C语言 第5章_循环结构.ppt
《C语言 第5章_循环结构.ppt》由会员分享,可在线阅读,更多相关《C语言 第5章_循环结构.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1/52第第5章章 循环结构循环结构1.5.1 5.5 2学时2.5.6 2学时2/52问题的提出:对于这样的一类问题:问题1.从键盘输入10个学生的成绩,求总成绩。问题2.求100以内的素数问题3.求1!+2!+3!+10!用前面所学知识来解决这些问题是非常麻烦的对于问题1的一个笨办法:设一个变量,每次输入一个学生成绩,累加后再输入下一个学生成绩,如下:scanf(“%f”,&a);s=s+a;scanf(“%f”,&a);s=s+a;.这样重复10次,然后输出s的值。是否可用一种语句,使这两句话能自动的重复执行10次,以简化书写的麻烦呢?这就是循环语句的任务。3/52u循环结构特点:在给定
2、条件(循环条件)成立时,反复执行某程序段(又称循环体),直到条件不成立为止。uC语言可实现循环的语句:while 语句Dowhile 语句for 语句4/52while(表达式)循环体语句;v执行流程:表达式循环体假(0)真(非0)whilev一般形式:5.1 while循环结构5/52v特点:先判断表达式,后执行循环体v说明:l循环体有可能一次也不执行l循环体可为任意类型语句l下列情况,退出while循环u条件表达式不成立(为零)u循环体内遇break,return,gotol无限循环:while(1)循环体;6/52例例 用用whilewhile循环求循环求#includemain()in
3、ti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环终值循环变量增值循环条件循环体go7/52【例例】问题问题1的解决方法的解决方法1:采用:采用while循环结构循环结构 main()intcount=1,total=0,grade;while(count=10)printf(inputthegrade:);scanf(%d,&grade);total=total+grade;count+;printf(%dn,total);应注意:应注意:1、计数器和累加器的初、计数器和累加器的初值;值;2、一次循环后,循环控、一次循环后,
4、循环控制变量的变化情况。制变量的变化情况。3、跳出循环时循环控制、跳出循环时循环控制变量的值应为多少?如变量的值应为多少?如果果count初值为初值为10,20时时呢?呢?111098765432count10987654321次数次数每次循环后,控制变量每次循环后,控制变量count的变化情况的变化情况8/52例例 显示显示110的平方的平方#includemain()inti=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100循
5、环变量初值循环变量初值循环条件循环条件改变循环变量值改变循环变量值9/52注意:循环控制变量值在循环体内必须有所改变。例如:请问下例中循环结束时i值为多少?i=1;while(i=100)putchar(*);i+;这个循环永远不会结束这个循环永远不会结束,因为循环控制变量因为循环控制变量i i没有没有在循环体内被改变,在循环体内被改变,i+;i+;不属于循环语句。不属于循环语句。i+应该在循环体内改变:10/52do循环体语句;while(表达式);v执行流程:do循环体表达式假(0)真(非0)whilev一般形式:5.2 dowhile 循环结构11/52v特点:先执行循环体,后判断表达式
6、v说明:l至少执行一次循环体ldowhile可转化成while结构expr循环体假(0)真(非0)循环体While循环12/52例用dowhile循环求#includemain()inti,sum=0;i=1;dosum+=i;i+;while(i=100);printf(%d,sum);13/52【例例】问题问题1的解决方法的解决方法2:采用:采用do-while循环结构循环结构【源程序】main()int count=1,total=0,grade;do printf(input the grade:);scanf(%d,&grade);total=total+grade;count+;w
7、hile(count=10);printf(%dn,total);应注意:应注意:1、一次循环后,循环控制、一次循环后,循环控制变量的变化情况。变量的变化情况。2、跳出循环时循环控制变、跳出循环时循环控制变量的值应为多少?如果量的值应为多少?如果count初值为初值为10,20时呢?时呢?111098765432count10987654321次数次数每次循环后,控制变量的变化情况每次循环后,控制变量的变化情况14/52例例 while和和dowhile比较比较#includemain()inti,sum=0;scanf(%d,&i);dosum+=i;i+;while(i=10);print
8、f(%d,sum);#includemain()inti,sum=0;scanf(%d,&i);while(i=10)sum+=i;i+;printf(%d,sum);1、跳出循环时循环控制变量的值应为多少?如果输入值为1,10,20时呢?2、输出结果呢?15/52n1.while结构与do-while循环结构相类似.n2.但要注意区别:n前者:先判断表达式,再执行语句。至少要执行0次n后者:先执行语句,再判断表达式。至少要执行1次。n3.也就是说用两种循环结构处理同一问题时,若二者的循环体部分是一样的,当while后面表达式的第一次的值为“真(非0)”时,两种循环结构得到的结果相同,否则二者
9、的结果不相同。While 与与 do while 循环结构的比较循环结构的比较16/52for(表达式1;表达式2;表达式3)循环体语句;v执行流程:vfor(循环变量赋初值;循环条件;改变循环变量)表达式表达式1表达式表达式2循环体循环体表达式表达式3TFv一般形式:5.3 for循环结构17/52vfor语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;v说明:lfor语句中expr1,expr2,expr3类型任意,都可省略,但分号;不可省l无限循环:for(;)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;例
10、用for循环求#includemain()inti,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);18/52例:#includemain()inti;for(i=0;i10;i+)putchar(a+i);运行结果:abcdefghij例:#includemain()inti=0;for(;i10;i+)putchar(a+i);例:#includemain()inti=0;for(;i10;)putchar(a+(i+);例:#includemain()inti=0;for(;i10;putchar(a+i),i+);逗号运算符的主要应用在逗号运算
11、符的主要应用在for语句中的表达式语句中的表达式1或表达式或表达式3建议为了增强程序的可读性,尽量不省略for结构中的表达式。19/52main()inti,j,k,s=0;for(i=1,j=100;i=j;i+,j-)k=i+j;s=s+i+j;printf(%d+%d=%dn,i,j,k);printf(%dn,s);#includemain()charc;for(;(c=getchar()!=n;)printf(%c,c);#includemain()inti,c;for(i=0;(c=getchar()!=n;i+=3)printf(%c,i+c);例:双循环变量求 如输入:abc则
12、输出:abc如输入:abc则输出:aei20/525.4 循环结构的嵌套n在循环体语句中又包含另一个完整的循环结构的形式,称为循环结构的嵌套。n嵌套在循环体内的循环体称为内循环,外面的循环体称为外循环。如果内循环中又有嵌套的循环语句,则构成多重循环。while、dowhile、for循环结构既可以自身嵌套又可以相互嵌套。2021/52循环的嵌套v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉v嵌套循环的执行流程(1)while()while().(2)do do while();.while();(4)while()do while();.(3)for(;)for(
13、;)v嵌套循环的跳转禁止:从外层跳入内层l 跳入同层的另一循环2122/52*#includemain()inti,j;for(i=1;i=5;i+)/控制行数for(j=1;j=i;j+)/控制每一行中*的个数printf(*);printf(n);22例:编写程序输出如下图形。例:编写程序输出如下图形。*思考:如何输思考:如何输出右侧图形?出右侧图形?for(j=1;j=10-i;j+)/控制每一行中空格的个数printf();23/52例:例:编写程序求解编写程序求解“百钱买百鸡百钱买百鸡”问题。问题。算经算经一书中提一书中提出出“百鸡问题百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值
14、:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?钱一。百钱买百鸡,问鸡翁、母、雏各几何?分析:设变量分析:设变量a,b分别代表鸡翁、鸡母的个数,则鸡雏的分别代表鸡翁、鸡母的个数,则鸡雏的个数为个数为100-a-b。通过分析可知,。通过分析可知,a,b可能取值的范围可能取值的范围为:为:a在在019,b在在033。则鸡翁、鸡母、鸡雏可能的。则鸡翁、鸡母、鸡雏可能的组合有组合有2034=680种。对每一种组合都用是否符合百钱种。对每一种组合都用是否符合百钱的条件进行测试,若符合,则该组合就是问题的一个解,的条件进行测试,若符合,则该组合就是问题的一个解,因此解可能不唯
15、一因此解可能不唯一。23#includemain()int a,b,c;for(a=0;a=19;a+)for(b=0;b=33;b+)c=100-a-b;if(5.0*a+3.0*b+c/3.0=100)printf(a=%d,b=%d,c=%dn,a,b,c);24/52 n5.5 辅助控制语句辅助控制语句nbreak语句n功能:在循环语句和switch语句中,终止并跳出循环体或开关体n说明:nbreak只能终止并跳出最近一层的结构nbreak不能用于循环语句和switch语句之外的任何其它语句之中25/52exprbreak;假(0)真(非0)whiledobreak;.expr假(0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言 第5章_循环结构 语言 循环 结构
限制150内