C语言基础知识----循环

发布于:2022-10-26 ⋅ 阅读:(430) ⋅ 点赞:(0)

  循环结构的特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。

  C语言中提供while语句do-while语句for语句来实现循环结构。 

一、while语句


while语句是当型循环控制语句一般形式为:

while(表达式)          “表达式”为循环条件

   语句;                         循环体


要求

(1)while后面的括号()不能省。

(2)while后面的表达式可以是任意类型的表达式,但一般是条件表达式或逻辑表达式。表达式的值是循环的控制条件。

(3)语句部分称为循环体,当需要执行多条语句时应使用复合语句。

例题:用while语句求1~100的累计和。

#include<stdio.h>
int main()
{
  int i=1,sum=0;
  while(i<=100)
  {
    sum+=i;
    i++;
  }
  printf("sum=%d\n");
  return 0;
}

运行结果:
sum=5050
   

注意

(1)如果while后面的表达式的值一开始就为假,循环体将一次也不执行。

int a=0,b=0;
while(a>0)     //a>0为假,b++不执行
  b++

(2) 循环体中的语句可以为任意类型的C语句。

(3)退出while循环的情况:

         while后面的表达式为假(为0);

         循环体内遇到breakreturngoto语句。 

下面的程序是统计用户输入的字符个数,遇到回车符结束。

int num=0;               //字符计数
while(1)
{
  if(getche()=='\n')    //如果输入的字符是回车符,则返回
    return 0;
   num++;
}

当执行循环体内的语句return时,它不仅要退出循环,而且要终止return后面的语句的运行,将该循环所在的函数返回。所以,一般情况下,return语句主要用于函数返回。 

(4)通常情况下,程序中会利用一个变量来控制while语句的表达式的值,这个变量被称为循环控制变量。例:

#include<stdio.h>
int main()
{
  int i;  //i未初始化,i应赋值初始值10

 /*i时循环控制变量,必须初始化,否则结果不可预知*/
  long s=1;
  while(i>=1)
    s*=i--;
  printf("10!=%ld\n",s);
  return 0;
}

(5)要在while语句的某处(表达式或循环体内)改变循环控制变量的值,否则极易构成死循环。

i=1;
while(i<100)    //死循环,因为i的值没变化,永远小于100
  sum+=i;
printf("sum=%d\n",sum);

(6)允许while语句的循环体又是while语句,从而形成双重循环。例如下面一个二重循环:

i=1;
while(i<=9)
{
  j=1;
  while(i<=9)
  {
    printf("%d*%d=%d\n",i,j,i*j);
    j++;
  }
  i++;
}

用while语句求1~100累计和

#include<stdio.h>
int main()
{
  int i=1,sum=0;
  while(i<=100)
  {
  sum+=i;
  i++;
  }
printf("sum=%d\n");
return 0;
)


 二、do-while语句 

直到型循环语句do-while,一般格式为

do

    语句;     循环体

 while(表达式);   “表达式”为循环条件


要求

(1)while后面的括号()不能省略。

(2)while最后面的分号;不能省略。

(3)while后面的表达式可以任意类型的表达式,但一般是条件表达式或逻辑表达式。表达式的值是循环的控制条件。

(4)语句部分称为循环体,当需要执行多条语句时,应使用复合语句。


 注意事项

(1)如果do-while后的表达式的值一开始就为假,循环体还是要执行一次。例如:

int a=0,b=0;
do
  b++;
while(a>0);

尽管一开始a>0为假,但b++还是要执行一次,所以最后b的值为1。

(2)在if语句、while语句中,表达式后面都不能加分号,而在do-while语句的表达式后则必须有分号,否则将产生语法错误。

(3)循环体中的语句可以为任意类型的C语句。

(4)使用do-while语句时,也需要初始化循环控制变量,否则结果不可预知。

(5)要在do-while语句某处(表达式循环体内)改变循环控制变量的值,否则极易构成死循环。

(6)do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套。


用while语句求1~100累计和

#include<stdio.h>
int main()
{
  int i=1,sum=0;

  do
  {
    sum+=i;
    i++;
  } while(i<=100);
  printf("sum=%d\n");
  return 0;
}

三、for语句 

一般格式:

for(表达式1;表达式2;表达式3)  “表达式” 为循环条件

   语句;    循环体


要求: 

(1)for后面的括号不可缺失或省略。

(2)表达式1:一般为赋值表达式,给循环控制变量赋初值;

          表达式2:一般为关系表达式或逻辑表达式,作为循环控制条件。

          表达式3:一般为赋值表达式,给循环控制变量增量或减量。

(3)表达式之间用分号分隔。

(4)语句都称为循环体,当需要执行多条语句时,应使用复合语句。


注意事项: 

(1)表达式1、表达式2、表达式3可以是任何类型的表达式。每个表达式都可由多个表达式组成。

(2)表达式1、表达式2、表达式3都是任选项,可以省略其中一个、两个或全部,但用于间隔的分号不可省略。

求1~100累计和 用下面三种情况进行对比:

情况一:省略其中一个

#include<stdio.h>
int main()
{
  int i,sum=0;
  i=1;
  
  for( ; i<=100; i++)
     sum+=i;
  printf("sum=%d\n",sum);
  return 0;
}

情况二:省略其中两个

#include<stdio.h>
int main()
{
  int i,sum=0;
  i=1;
  
  for( ; i<=100; )
     sum+=i++;
  printf("sum=%d\n",sum);
  return 0;
}

情况三: 省略全部

#include<stdio.h>
int main()
{
  int i,sum=0;
  i=1;
  
  for(; ;)
  {
    if(i>100) break;
    sum+=i++;
  }
  printf("sum=%d\n",sum);
  return 0;
}

(3)如果表达式2为空,则相当于表达式2的值为真。因此下面的程序是死循环。

for(a=1; ;a++)
   printf("%d\n",a);

(4) 在for语句前可以单独初始化循环控制变量,也可以利用for语句中的表达式1初始化循环控制变量(见情况一)。

(5) 可以在循环体内干煸循环控制变量的值,也可以利用for语句中的表达式3改变循环控制变量的值(见情况二三)。

(6) 循环体中的语句可以是任意类型的C语句。

(7) for语句可以组成多重循环,也可以与while语句以及do-while语句相互嵌套。

(8) 循环体可以是空语句。如下是计算用户输入的字符数(当输入是回车符时统计结束)。

#include<stdio.h>
int main()
{
  int n=0;
  printf("input a string:\n");
  for(; getchar()!='\n';n++); //后面的分号表示循环体为空语句,不是for语句的结束
  printf("%d",n);
  return 0;
}

四、循环嵌套 

    一个循环的循环体中有另一个循环称为循环嵌套。一个 循环外面仅包围一层循环称为二重循环;一个循环外面包围两层称为三重循环;一个循环外面包围许多层循环称为多重循环

while语句do-while语句for语句可以相互嵌套,但应注意一下:

(1)嵌套的各层循环中要用复合语句(用花括号将循环体语句括起来)。

(2)内层和外层的循环控制变量不可以同名,防止造成混乱。

(3)嵌套循环最好采用右缩进格式来书写,保证层次的清晰性。

(4)循环嵌套不可交叉,即一个循环体内必须完整的包含另一个循环 。

执行过程:嵌套循环执行时,先由外层循环进入内层循环,并在内层循环终止后接着执行外层循环,再由外层循环进入内层循环中,当外层循环全部终止时,程序结束。

例如:

#include<stdio.h>
int main()
{
  int i,j;
 
  for(i=1;i<=3;i++)
  {
    printf("i=%d:",i);
    for(j=1;j<=3;j++)
       printf("j=%-4",j);
    printf("\n");  //控制换行
  }
   return 0;
}

  

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到