您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 第5章 循环结构程序设计资料
第5章循环结构程序设计内容简介所谓循环就是当给定条件成立时,反复执行某段程序,直到条件不成立时为止。给定的条件称为循环条件,反复执行的程序段称为循环体。在C语言中主要用while、do-while和for语句来实现循环。5.1while语句和do-while语句1、while语句while语句用来实现“当型”循环结构。一般形式:while(表达式)语句;当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。循环控制表达式循环体例5.1求1到100的和#includestdio.hvoidmain(){inti=1,sum=0;while(i=100){sum=sum+i;i++;}printf(“%d\n”,sum);}说明:(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。(2)在循环体中应有使循环趋向于结束的语句。(3)循环前,必须给循环控制变量i赋初值.分析循环体的执行过程,并写出程序运行结果#includestdio.hmain(){inty=10;while(y--);printf(y=%d\n,y);}#includestdio.hmain(){inty=10;while(y--)printf(y=%d\n,y);}2.do-while语句do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。do循环体语句;while(表达式);注意:;不能省例5.2求1到100的和#includestdio.hvoidmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i=100);printf(“%d\n”,sum);}使用do-while语句时,需注意如下几个问题:(1)do关键字必须与while联合使用,循环由do开始,用while结束。在while(表达式)后的“;”不能省略,它表示do-while语句的结束。(2)条件表达式,可以是C语言中任意合法的表达式。由它控制循环是否执行。(3)若循环体内由多条语句构成,应该用大括号括起来,组成复合语句。例5.3计算并输出1+1/2+1/3+…+1/100的值。方法1:利用while语句实现源程序如下:#includestdio.hmain(){floatsum=0;inti=1;while(i=100){sum+=1.0/i;i++;}printf(sum=%f\n,sum);}方法2:利用do-while语句实现源程序如下:#includestdio.hmain(){floatsum=0;inti=1;do{sum+=1/(float)i;i++;}while(i=100);printf(sum=%f\n,sum);}do-while循环与while循环区别在于:while循环的判断控制出现在循环体之前,只有当while后面表达式的值为非零时,才能执行循环体;而do-while循环中,总是先执行一次循环体,然后再求表达式的值,因此循环体至少要执行一次。思考与提高:在一般情况下,用while语句和do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。问:是不是所有都成立呢?如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。比较:#includestdio.h#includestdio.hmain()main(){intsum=0,n;{intsum=0,n;scanf(“%d”,&n);scanf(“%d”,&n);while(n=100)do{sum=sum+n;{sum=sum+n;n++;n++;}}while(n=100);printf(“sum=%d\n”,sum);printf(“sum=%d\n”,sum);}}格式for(表达式1;表达式2;表达式3)语句for(循环变量赋初值;循环条件;循环变量增值)语句执行过程(1)先求解表达式1;(2)求解表达式2,若其值为真,则执行循环体语句,然后执行第(3)步;若为假,则结束循环,转到第(5)步;(3)求解表达式3;(4)转向步骤(2);(5)循环结束,执行for语句下面的一个语句。表达式2循环体语句假真求解表达式1求解表达式35.2for语句for语句等价于下列语句:表达式1;while(表达式2){语句;表达式3;}例5.4求1~100的累加和#includestdio.hvoidmain(){inti,sum;sum=0;for(i=1;i=100;i++)sum=sum+i;printf(“sum=%5d\n”,sum);}表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值不等于0就执行循环体。如:for(k=1;k-4;k++)s=s+k;仅当k的值等于4时终止循环。k-4是数值表达式。for语句的其他形式:例:i=1;for(;i=100;i++)sum=sum+i;例:for(i=1;i=100;){sum=sum+i;i++;}例:for(i=1;;i++)sum=sum+i;表达式1;for(;表达式2;表达式3)语句;for(表达式1;表达式2;){语句;表达式3;}for(表达式1;;表达式3)语句表达式1;for(;表达式2;){语句表达式3;}例:i=1;for(;i=100;){sum=sum+i;i++;}for(;;)语句#includestdio.hvoidmain(){intm,n,num1,num2,num3;num1=num2=num3=0;for(n=1;i=10;n++){scanf(“%d”,&m);if(m0)num1++;elseif(m==0)num2++;elsenum3++;}printf(“%d,%d,%d\n”,num1,num2,num3);}例5.5编一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。5.2.1循环的嵌套一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套。下面几种都是合法的形式:(1)while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();(4)while()(5)for(;;){…{…do{…}while()for(;;){}while();{…}……}}while();#includestdio.hvoidmain(){introw=1,col;for(;row=5;row++){for(col=1;col=5-row;col++)printf(“”);printf(“********\n”);}}#includestdio.hvoidmain(){introw=1;for(;row=5;row++)printf(“********\n”);}例4.13打印下列图形1.break语句break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句一般形式:break;5.2.2break语句和continue语句例:floatpi=3.14159;for(r=1;r=10;r++){area=pi*r*r;if(area100)break;printf(″r=%f,area=%f\n″,r,area);}使用break语句应注意如下几个问题:①break语句只能用于循环语句或switch语句中。如果程序中有:if(…)break;则表明该if语句一定位于循环体中或switch语句中,执行break语句时跳出的是包含此if语句的循环体或switch语句,也不是跳出if语句本身。②在循环语句嵌套使用的情况下,break语句只能跳出(或终止)它所在的循环,而不能同时跳出(或终止)多层循环。若要从最内层循环退出外层循环,则必须用其他方法.例5.6判断m是否素数。#includestdio.h#includemath.hvoidmain(){intm,i;scanf(“%d”,&m);for(i=2;i=m-1;i++)if(m%i==0)break;if(i=m)printf(“%d是素数\n”,m);elseprintf(“%d不是素数\n”,m);}读入mi=2i=m-1Tm%i==0Fbreaki=i+1i=m-1TF输出:输出:m不是素数m是素数例5.7已知sum=1+2+3+…+i+…,求sum大于1000时,i的最小值。分析:此题可以使用表达式sum1000来结束循环,也可以使用if语句和break语句配合将循环结束的判断放在循环体中。源程序如下:#includestdio.hmain(){inti=1,sum=0;while(i1000)/*假设一个很大的循环次数i*/{sum+=i++;/*sum=1+2+3+…*/if(sum1000)break;/*当sum1000时,退出循环*/}printf(i=%d\n,i);}运行结果:2.continue语句作用为结束本次循环,即跳过循环体中下面尚未执行的语句,再一次进行循环的条件判定。一般形式:continue;使用continue语句应注意:continue语句只能出现在循环语句的循环体中。若执行while或do-while语句中的continue语句,则直接跳到循环控制条件的测试部分,然后决定循环是否继续进行;若continue语句出现在for语句中,则执行continue语句就是跳过循环体中continue语句后面的语句,转而执行for语句的表达式3。•例5.8把100~200之间的不能被3整除的数输出。#includestdio.hvoidmain(){intn;for(n=100;n=200;n++){if(n%3==0)continue;printf(%d”,n);}}例5.9从键盘输入10个字符,并统计其中小写字母的个数。源程序如下:#includestdio.hmain(){intsum=0,i;charch;for(i=0;i10;i++){ch=getchar();if(ch'a'||ch'z')continue;/*终止本轮循环,但未跳出循环结构*/sum++;}printf(sum=%d\n,sum);}continue语句和break语句在使用的时候要注意下面的区别:1、continue语句只能出现在循环语句的循环体中,而break语句既可以出现在循环语句中,也可以出现在switch语句中。2、break语句是终止它所在的循环语句的执行,而continue语句不是终止它所在的循环语句的执行,而是结束本次循环,并开始下一次循环。5.3goto语句1、goto语句以及用goto语句构成的循环goto语句也称为无条件转移语句。其作用是改变程序流程,转去执行语句标号所标识的语句。其一般格式为:goto语句标号;其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,格式为标号后加冒号(:)。表示程序指令的地址。语句标号只能由字母、数字和下划线组成,第一个字符必须为字母或下划线。一般来说,goto语句用于下面两种情况:(1)与if语句一起构成循环。(2)从循环体中跳到循环体外,但一般使用break和continue语句而不尽量不用goto语句。例5.10用if语句和goto语句构成循环,求10!。分析:使用goto语句构成循环,类似于其他循环语句,只是要用goto语句指向循环体的开始,也就是指向标号所在的行。源程序如下:#includestdio.
本文标题:第5章 循环结构程序设计资料
链接地址:https://www.777doc.com/doc-3389678 .html