第五章循环结构程序设计循环就是在程序执行过程中,反复多次的执行同一段程序。一、C语言中有三种循环语句。1.while循环语句形式为:while(表达式){循环体}执行过程:先计算表达式的值,当表达式的值非0时就执行循环体,之后再判断表达式的值,且重复以上过程;当表达式的值为0时就结束循环。特点:先执行语句,后判断表达式。注意以下几点:①while是关键字,要小写。②while后面的循环条件和if后面的条件一样。③对于任何循环,只要掌握两点内容:一是循环条件是什么?二是循环体是谁?④若循环体只是一条语句,则一对花括号{}可以省略。⑤如何结束循环,一般是两种方式:一是正常结束(既不满足循环条件了)。二是中途结束(用break语句)。2.do--while循环语句形式为:do{循环体}while(表达式);执行过程:先执行循环体一次,再判断表达式的值,当表达式的值非0时就再执行循环体,之后再判断表达式的值,且重复以上过程;当表达式的值为0时就结束循环。特点:先执行语句,后判断表达式。注意以下几点:①do和while是关键字,都要小写。②循环至少执行一次。③while()后面要有分号;3.for循环语句形式为:for(表达式1;表达式2;表达式3){循环体}执行过程:先执行表达式1,然后判断表达式2是否为真?,若为假则退出循环;若为真则执行循环,再执行表达式3,然后再去判断表达式2是否为真?,若为真则继续执行循环体,再执行表达式3……,直到表达式2为假。特点:表达式1用于提供循环的初始值,表达式2提供了循环的条件,表达式3用于改变循环的条件。若没有表达式2则会陷入死循环。注意以下几点:①三个表达式可有可无,但分号;必须有。②三个表达式的含义如下:表达式1:一般是给变量赋值的。表达式2:是循环条件。表达式3:是变量的变化。③重点弄明白循环条件是什么?循环体是谁?④如何结束循环,两种方式:一是正常结束(既不满足循环条件了)。二是中途结束(用break语句)。二、三种循环语句的比较三种循环语句可以完成同一件事,可任选其一。使用while和do--while循环时,要提前给循环变量赋初值。而for循环是在表达式1中赋初值的。while循环和for循环都是先判断条件后执行循环体,有可能一次也不执行循环体,do--while循环是先执行循环体,后判断条件,即循环体至少也得执行一次。for循环不限于计数循环,其循环条件可以是逻辑表达式和字符表达式等。三、continue语句和break语句5、break语句形式为“break;”break语句只能用于switch结构或循环结构,而且在循环语句嵌套使用的情况下,break语句只能跳出(或终止)它所在的循环,而不能同时跳出(或终止)多层循环。6、continue语句形式为:“continue;”,continue语句的功能是结束本次循环的执行,但不退出循环结构。7、continue语句和break语句的比较continue语句只结束本次循环,而不是终止整个循环的执行;而break语句则是结束循环,不再进行条件判断。四、循环嵌套三种循环控制语句可以互相嵌套,即在一个循环体内部又可以出现另一循环,这种嵌套在理论上来说可以是无限的。注意必须是一个循环完整的套住另一个循环。练习题1.inta=1,x=1;循环语句while(a10)x++;a++;的循环执行()。A.无限次B.不确定次C.10次D.9次2.下列语句中,错误的是()。A.while(x=y)5;B.dox++while(x==10);C.while(0);D.do2;while(a==b);3.循环语句for(x=0,y=0;(y!=123)||(x4);x++);的循环执行()。A.无限次B.不确定次C.4次D.3次4.循环语句for(i=0,x=1;i=10&&x0;i++);的循环执行()。A.无限次B.不确定次C.10次D.9次5.若i、j已定义为int类型,则以下程序段中内循环体的执行次数是()。for(i=5;i;i--)for(j=0;j4;j++){………}A.20B.24C.25D.306.inti=1,s=0;while(i100){s+=i++;if(i100)break;}执行以上程序段后,中放的是()。A.1到101`的和B.1到100的和C.1到99的和D.以上都不是7.假定a和b为int型变量,则执行以下语句后b的值为()。a=1;b=10;do{b-=a;a++;}while(b--0);A.9B.-2C.-1D.88.设x和y均为int型变量,则执行下面的循环后,y的值为()。for(y=1,x=1;y=50;y++){if(x=10)break;if(x%2==1){x+=5;continue;}x-=3;}A.2B.4C.6D.89.在C语言中,下列说法中正确的是()。A.不能使用“do语句while(条件)”的循环B.“do语句while(条件)”的循环必须使用“break”语句退出循环C.“do语句while(条件)”的循环中,当条件为非0时将结束循环D.“do语句while(条件)”的循环中,当条件为0时将结束循环10.在C语言的语句中,用来决定分支流程的表达式是()。A.可用任意表达式B.只能用逻辑表达式或关系表达式C.只能用逻辑表达式D.只能用关系表达式11.若有以下程序段,sum和i都是整型变量,则不能与该程序段等价的程序段是()。┆A.for(i=2,sum=0;i=10;i++)sum+=i;sum=0;i=2;B.sum=0;i=2;while(i=10)do{sum=sum+i;i++;while(i=10);{sum=sum+i;C.sum=0;i=10;i++;while(i1){sum=sum+i;i--;}}D.sum=0;i=11;do{i--;sum=sum+i;}while(i1)11.C语言中while与do---while语句的主要区别是()A.do---while的循环体至少无条件执行一次B.do---while允许从外部转到循环体内C.do---while的循环体不能是复合语句D.while的循环控制条件比do---while的循环控制条件严格12.以下程序段()x=-1;do{x=x*x;}while(!x);A.是死循环B.循环执行两次C.循环执行一次D.有语法错误13.以下的for循环for(x=0,y=0;(y!=123)&&(x4);x++);A.执行3次B.执行4次C.循环次数不定D.是无限循环14.执行下面语句后,变量I的值是()。for(I=1;I++4;);A.3B.4C.5D.不定15.对for(表达式1;;表达式3)可理解为()A.for(表达式1;0;表达式3)B.for(表达式1;1;表达式3)C.for(表达式1;表达式1;表达式3)D.for(表达式1;表达式3;表达式3)16.若i、j均为整型变量,则以下循环()for(i=0,j=-1;j=1;i++,j++)printf(“%d,%d\n“,i,j);A.循环体只执行一次B.循环体一次也不执行C.判断循环结束的条件不合法D.是无限循环17.设j为int型变量,则下面for循环语句的执行结果是()for(j=10;j3;j--){if(j%3)j--;--j;--j;printf(“%d“,j);}A.63B.74C.62D.73二、写出下列程序运行的结果。1.下列程序运行后的输出结果是#includestdio.hmain(){inti,j;for(i=4;i=1;i--){printf(*);for(j=1;j=4-i;j++)printf(*);printf(\n);}2.当运行以下程序时,从键盘键入right?CR(CR代表回车),则下面程序的运行结果是。#includestdio.hmain(){charc;while((c=getchar())!=’?’)putchar(++c)}3.下面的程序的运行结果是。#includestdio.hmain(){inta,s,n,count;a=2;s=0;n=1;count=1;while(count=7){n=n*a;s=s+n;++count}printf(“s=%”,s);}4.下面程序段中循环体的执行次数是。a=10;b=0;do{b+=2;a-+2+b;}while(a=0);5.面程序段的运行结果是。x=2;do{printf(“*”);x--;}while(!x==0);6.下面程序段的运行结果是。i=1;a=0;s=1;do{a=a+s*i;s=-s;i++;}while(i=10);printf(“a=%d”,a);7.下面程序的运行结果是。#includestdio.hmain(){inti,t,sum=0;for(t=i=1;i=10;){sum+=t;++i;if(i%3==0)t=-i;}printf(“sum=%d”,sum);}8.下面程序的运行结果是。#includestdio.hmain(){inti,k=0;for(i=1;;i++){k++;while(ki*j){k++;if(k%3==0)gotoloop;}}loop:printf(“%d,%d,i,k”);}9.下面程序段的运行结果是。i=1;s3;do{s+=i++;if(s%7==0)continue;else++i;}while(s15);printf(“%d”,i);四、程序填空题1.下面的程序输出3到100之间的所有素数。#tnclude<stdio.h>main(){inti,j;for(i=3;i<=100;i++){for(j=2;j<=i-1;j++)if(________)break;if(________)printf(“%4d”,i)}}2.以下程序的功能是:人键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入.请填空.main(){floatx,amax,amin;scanf(%f,&x);amax=x;amin=x;while(_______){if(xamax)amax=x;if(______)amin=x;scanf(%f,&x);}printf(\namax=%f\namin=%f\n,amax,amin);}3.求:1*2*3*…*10的积。main(){inti;;for(;i101;i++)sum*=i;printf(“%d”,sum);}五、编程题1.打印九九乘法表。2.编程求:2+4+6+8+……+100。3.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数