08-09-1学期C程序设计(第三版)教材PPT-第6章-1讲稿

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第6章循环控制6.1概述6.2goto语句以及用goto语句构成循环6.3while语句6.4do-while语句6.5for语句6.6循环的嵌套6.7几种循环的比较6.8break和continue语句6.9程序举例6.1概述什么是循环?为什么要使用循环?1001nyn问题1:问题2:求学生平均成绩分数相加后除以课数循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。C提供了多种循环语句,可组成各种循环结构。6.2goto语句以及用goto语句构成循环•goto语句——无条件转向语句goto语句标号;•语句标号用标识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。•例如:gotolabel_1;合法;goto123;不合法.结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差。一般来说,可以有两种用途:(1)与if语句一起构成循环结构;(2)从循环体中跳转到循环体外。但是这种用法不符合结构化原则,一般不宜采用,只有在不得已时才使用。(例如能大大提高效率)6.2goto语句以及用goto语句构成循环#includestdio.hvoidmain(){inti,sum=0;i=1;loop:if(i=100){sum+=i;i++;gotoloop;}printf(%d\n,sum);}6.2goto语句以及用goto语句构成循环例6.1用if语句和goto语句构成循环,求1001nn注意:语句标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。sum=0+1sum=1+2=3sum=3+3=6sum=6+4……sum=4950+100=50506.3用while语句实现循环while语句用来实现“当型”循环结构。一般形式:while(表达式)语句当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。#includestdio.hvoidmain(){inti,sum=0;i=1;while(i=100){sum=sum+i;i++;}printf(%d\n,sum);}例6.2用while语句求。1001nn注意:(1)循环体如果包含多个语句,应用花括弧括起来,以复合语句形式出现。(2)循环体中应有使循环趋向于结束的语句。否则会得到死循环。6.4用do-while语句实现循环do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:do循环体语句while(表达式);执行过程:先执行一次循环体,然后判别表达式,当表达式的值为“非0”,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。例6.3用do-while语句1001nn#includestdio.hvoidmain(){inti,sum=0;i=1;do{sum+=i;i++;}while(i=100);printf(“%d\n,sum);}#includestdio.hvoidmain(){inti,sum=0;i=1;while(i=100){sum=sum+i;i++;}printf(%d\n,sum);}同一个问题可以用do-while,也可用while处理。while与do-while循环的比较#includestdio.hvoidmain(){intsum=0,i;scanf(“%d”,&i);while(i=10){sum=sum+i;i++;}printf(“sum=%d\n,sum);}例6.4输入一个自然数,求从该自然数到10的和。#includestdio.hvoidmain(){intsum=0,i;scanf(“%d”,&i);do{sum=sum+i;i++;}while(i=10);printf(“sum=%d\n,sum);}注意:如果while后面的表达式一开始就为假时,两种循环的结果是不同的。•C中的do-while不是经典的直到型(until型)循环。运行情况:输入1时sum=55再运行一次:输入11时:sum=0运行情况:输入1时sum=55再运行一次:输入11时:sum=116.5用for语句实现循环C中的for语句使用灵活,不仅可用于循环次数已经确定的情况,而且可用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。•for语句一般形式:for(表达式1;表达式2;表达式3)语句for语句的执行过程:(1)先求解表达式1。(2)求解表达式2,若其值为真,则执行for语句中指定的内嵌语句,然后执行第(3)步。若为假,则转到第(5)步。(3)求解表达式3。(4)转回第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句。例如用for循环求#includestdio.hvoidmain(){inti,sum=0;for(i=1;i=100;i++)sum=sum+i;printf(%d\n,sum);}1001nnfor循环for循环最容易理解的形式:for(循环变量赋初值;循环条件;循环变量增值)语句#includestdio.hvoidmain(){inti,sum=0;i=1;while(i=100){sum=sum+i;i++;}printf(%d\n,sum);}说明:for循环中的“表达式1”、“表达式2”和“表达式3”都是选择项,即可以缺省,但“;”不能缺省。1)省略“表达式1(循环变量赋初值)”,则应在for语句前对循环变量赋初值。例如:i=1;for(;i=100;i++)sum=sum+1;2)省略“表达式2(循环条件)”,则认为表达式2始终为真,为死循环。例如:for(i=1;;i++)sum=sum+i;相当于:i=1;while(1){sum=sum+i;i++;}3)省略“表达式3(循环变量增量)”,这时可在循环体中加入修改循环变量的语句。例如:for(i=1;i=100;){sum=sum+i;i++;}for(表达式1;表达式2;表达式3)语句4)省略“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。例如:for(;i=100;)相当于:while(i=100){sum=sum+i;i++;}{sum=sum+i;i++;}5)三个表达式都可以省略,为死循环。例如:for(;;)语句相当于:while(1)语句6)表达式1可以是设置循环变量的初值的赋值表达式,也可以是与循环变量无关的其它表达式。例如:i=0;for(sum=0;i=100;i++)sum=sum+i;7)表达式1和表达式3可以是简单表达式也可以是逗号表达式。例如:for(sum=0,i=1;i=100;i++)sum=sum+i;或:for(i=0,j=100;i=100;i++,j--)k=i+j;8)表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。例如:for(i=0;(c=getchar())!=’\n’;i+=c);又如:for(;(c=getchar())!=’\n’;)printf(“%c”,c);注意:从键盘向计算机输入时,按回车以后才将一批数据一起送到内存缓冲区中。运行结果:abcdefghij例:#includestdio.hvoidmain(){inti=0;for(;i10;i++)putchar(‘a’+i);}例:#includestdio.hvoidmain(){inti=0;for(;i10;putchar(‘a’+i),i++);}例:#includestdio.hvoidmain(){inti;for(i=0;i10;i++)putchar(‘a’+i);}for循环形式灵活,用法举例6.6循环的嵌套一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。•三种循环(while、do-while和for循环)可以互相嵌套。下面几种都是合法的形式:(1)while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();(4)while()(5)for(;;)(6)do{…{…{…do{…}while()for(;;){}while(){…}………}}}while()1)三种循环可互相嵌套,层数不限2)外层循环可包含两个以上内循环,但不能相互交叉3)嵌套循环的执行流程(外循环执行一次,内循环执行一遍)【补充例】循环嵌套的例子#includestdio.hvoidmain(){inti,j,k;printf(“ijk\n”);for(i=0;i2;i++)for(j=0;j2;j++)for(k=0;k2;k++)printf(“%d%d%d\n,i,j,k);}循环变量的变化:111011101001110010100000kji6.7几种循环的比较(1)四种循环都可以用来处理同一问题,一般情况下可以互相代替。但不提倡用goto型循环。(2)在while和do-while循环中,为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i=i+1等)。for循环可在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。(4)while、do-while和for循环,可以用break语句跳出循环,用continue语句结束本次循环。对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。6.7几种循环的比较6.8break语句和continue语句6.8.1break语句break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。一般形式:break;注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。在多层循环中,一个break语句只向外跳一层。例:计算r=1到r=10时的圆面积,直到面积area大于100为止。floatpi=3.14159;for(r=1;r=10;r++){area=pi*r*r;if(area100)break;printf(″r=%f,area=%f\n″,r,area);}6.8.2continue语句作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.一般形式:continue;6.8break语句和continue语句continue语句和break语句的区别continue语句只结束本次循环,而不是终止整个循环的执行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。while(表达式1)for{…if(表达式2)continue;…}6.8break语句和continue语句while(表达式1)for{…if(表达式2)break;…}【补充例】continue语句的使用#includestdio.hvoidmain(){charc;while(c!=13)/*不是回车符则循环*/{c=getchar();if(c==27)continue;/*若按Esc键不输出便进行下次循环*/printf(%c\n,c);}}

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功