循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
特点是:当给定条件成立时,反复执行某段程序,直到条件不成立时为止。
给定的条件称为循环条件,反复执行的程序段称为循环体。
C语言提供了以下形式的循环结构。
(1)用for语句构成循环;
(2)用while语句构成循环;
(3)用do-while语句构成循环。
for语句的一般形式和执行过程
一般形式为:
for(表达式1;表达式2;表达式3)
语句;
表达式1:通常用来给循环变量赋初值,一般为赋值表达式。
表达式2:通常是循环结束条件,一般为关系表达式或逻辑表达式。
表达式3:通常用来修改循环变量的值,一般是赋值表达式。
for(循环变量赋初值;循环条件;循环变量增值)语句
for语句的执行过程如下:
① 首先计算表达式1的值。
② 再计算表达式2的值,若值为真(非0)则执行循环体一次,然后执行下面的第3步;若值为假(值为0)则结束循环,转到第4步。
③ 计算表达式3的值,转回第2步继续执行。
④ 循环结束,执行for语句下面的一个语句。
for(循环变量赋初值;循环条件;循环变量增值)循环体
for语句的各种形式
1.”表达式1”省略:但分号不能省略。
例如:
i=1;
for(  ; i<=100;i++)  sum=sum+i;
又如:
#include"stdio.h"
int main()
{  int n=0;
printf("input a string:\n");
for(    ;  getchar()!=‘\n’ ; n++) ;
printf("%d",n);
}
2.”表达式2”可以省略:这时循环体中必须加入条件判断语句来判断是否结束循环,否则循环会无终止地进行下去形成死循环。分号不能省略。
例如:
for(i=1;;i++)
{  sum=sum+i;
if(i>100)break;
}
其中,break语句的意义是结束循环。如果循环体中去掉if语句,则上面的循环为死循环。
3.”表达式3”可以省略:这时循环体内应加入使循环变量变化的语句,否则也会造成死循环。
例如:
for( i=1;i<=100;)
{  sum=sum+i;
i++;
}
4.循环体可以是空语句:可以把循环体要处理的内容放到表达式3中,效果是一样的。
例如:
for(i=1;i<=100;sum=sum+i,i++);
【例  1】用for循环语句计算s=1+2+3+…+9+10。
Void main()
{
Int n,s=0;
For(n=1;n<10;n++)
S=s+n;
Printf(“s=%d\n”,s);
}
【例  2】用for语句编写程序。从0开始,输出n个连续的偶数。
Void main()
{int a=0,n;
Printf(“\n input n:”);
Scanf(“%d”,&n);
For(n>0;a++:n--)
Printf(“%5d”,a*2);
}
2.1 while语句的一般形式和执行过程
一般形式为:
while(表达式)    语句;
其中:表达
式是循环条件,语句为循环体。
执行过程:先计算表达式的值,当值为真(非0)时则执行循环体语句;当表达式为假(值为0)时,跳出循环,执行循环以外的下一个语句。
其执行过程如图  3表示。
while循环的特点是:先判断表达式,后执行循环体语句。
2.1 while语句的一般形式和执行过程
例  3】统计从键盘输入一行字符的个数。
#include <stdio.h>
int main()
{  int n=0;
printf("input a string:\n");
while(getchar()!='\n')
n++;
printf("%d",n);
}
说明:循环条件为getchar()!='\n',只要从键盘输入的字符不是回车就继续循环。循环体n++完成对输入字符个数计数。
注意:
(1)While语句的(表达式)可以是关系表达式、逻辑表达式或算术表式和字符表达式等,当值非0时可继续循环。
(2)循环体为多个语句时必须用{ }括起来,组成复合语句。
(3)允许while语句的循环体又是while语句,从而形成循环嵌套。
例如:
int main()
{  int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
while (n--)
printf("%d ",a++*2);
}
一般形式为:
do{
语句;
}while(表达式);
其中:表达式是循环条件,语句为循环体。
执行过程:
先执行循环体语句一次,再判断表达式的值,若为真(非0)则继续循环,否则如果表达式为假(值为0),则结束循环。
注意:do-while语句和while语句的区别:
do-while是先执行循环体后判断条件,因此do-while至少要执行一次循环体。
而while是先判断条件后执行循环体,如果条件不满足,则一次循环体语句也不执行。
【例  4】用do-while语句修改【例  2】题:从0开始,输出n个连续的偶数。
int main()
{  int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
do{  printf("%d ",a++*2);
}while (--n);
试问:本例中循环条件继续用(n--)会出现什么问题?
答:将会多执行一次循环。
为什么:这是由于先执行后判断而造成的。
注意:
(1)在 do-while语句的表达式后面则必须加分号。
(2)do-while语句循环体还可以是循环语句,形成循环嵌套。
(3)循环体为多个语句时,也必须用{}括起来组成一个复合语句。
3 do-while语句
循环的嵌套
一个循环结构的循环体内又包含另外一个完整的循环结构,称为循环的嵌套。循环的嵌套层数可以是多层,称为多重循环。构成循环的嵌套结构时应注意以下几点:
①三种循环结构(while循环结构、do…while循环结构、for循环结构)可以相互嵌套;
②循环嵌套时应注意内层循环结构必须完整地被嵌套在外层循环结构的循环体内,不得出现交叉的现象;
③一般情况下,嵌套结构中的外层循环和内层循环的循环控制变量不得同名。
4 break语句和continue语句
4.1 break语句
一般格式:
break;
使用范围:break语句只能用在switch 语句或循环语句中。
功能:作用是跳出switch语句或结束本层循环,转去执行后面的程序。
般用法:
{
语句序列1;
if(表达式)
break;
语句序列2;
}
【例  7】从键盘输入任意一串字符并自动输出,统计字符个数,直到输入回车键或者Esc键结束。
int main()
{  int i=0;  char c;
while(1)         
{  c='\0';                            /*变量赋初值*/
if (c!=13&&c!=27)          /*键盘接收字符直到输入回车或Esc键*/
{  c=getch();
printf("%c\n", c); }
if(c==27)    break;    /*判断若输入Esc键则退出循环*/
i++;
printf("The No. is %d\n", i);
}
printf("The end");
}
注意: break语句对if-else的条件语句不起作用。在多层循环中, 一个break语句只向外跳一层。
注意:本语句只结束本层中本次的循环,并不跳出循环体。而break语句则跳出循环体。
4.2 continue语句
【例  8】输出100以内能被7整除的数。
int main()
{  int n;
for(n=7;n<=100;n++)
{  if (n%7!=0)
continue;
printf("%d ",n);
}
}
【例  9】检查输入的一行字中有无相邻两字符相同。
#include"stdio.h"
int main()
{  char a,b;
printf("input a string:\n");
b=getchar();
while((a=getchar())!='\n')
{    if(a==b)
{  printf("same character\n");
break;
}
b=a;
}
}
分析程序:把第一个读入的字符保存到变量b。然后进入循环,把下一个读入的字符保存到变量a,比较a,b是否相等,若相等则输出提示串并终止循环,若不相等则把a中的字符赋予b,进入下一次循环。
要求判断输入学生的成绩是否合格。
int main()
{    int count,score,I;
printf(“请输入班级的人数:”);
scanf(“%d”,&count);
printf("\n");
for(int i=0;i<count;i++)
{  printf(“请输入学生的成绩:”);
scanf(“%d”,&score);
if(score>60)
printf(“及格\n”);
else
printf(“不及格\n”);
}
}
【例  11】有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
int main()
{ int i,j,k;
printf("\n");
for(i=1;i<5;i++)            /*以下为三重循环*/
for(j=1;j<5;j++) 
      for (k=1;k<5;k++)
    {  if (i!=k&&i!=j&
&j!=k)  /*确保i、j、k三位互不相同*/
    printf("%d,%d,%d\n",i,j,k);
          }
}
分析以下情况:并考虑如果不是1、2、3、4,而是任意四位数呢?有几种情况,如何修改程序。注意:组成的四位数中最高位不能为零。
【例  12】判断整数m是否为素数。
程序分析:只能被1和它本身整除外,其它任何数都不能整除的数为素数。因此,判断数m是否为素数,只需用m去除以2到m-1之间的每一个整数,如果都不能整除,则m是素数;如果有一个数能整除,则m不是素数。
根据数学知识可知,不需要判断m能否被2到m-1之间的每一个数整除,只需判断m能否被从2到      之间的数整除就可以了。
程序如下:
#includen <stdio.h>
#include <math.h>
int main()
{  int m,i,k;
printf(“请输入一个整数:”);
scanf(“%d”,&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)  break;
if(i>k)  printf(“%d是一个素数。\n”,m);
else  printf(“%d不是一个素数。\n”,m);
}
【例  13】输出100到200之间的素数。
#includen <stdio.h>
#include <math.h>
int main()
{  int m,i,k,n;
n=0;
while语句怎么输出for(m=101;m<=200;m=m+2)
{  k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)  break;
if(i>k)
{  printf(“%d”,m);
n=n+1; }
if(n%5==0) printf(“\n”);
}
printf(“\n”);
}
程序运行结果为:
101 103 107 109 113
127 131 137 139 149
151 157 163 167 173
179 181 191 193 197
199

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。