六章节循环结构C程序设计.ppt
《六章节循环结构C程序设计.ppt》由会员分享,可在线阅读,更多相关《六章节循环结构C程序设计.ppt(76页珍藏版)》请在三一办公上搜索。
1、第六章 循环结构的C程序设计,第一节 循环的基本概念第二节 while语句第三节 do-while语句第四节 for语句第五节 break、continue、goto语句第六节 几种循环语句比较第七节 循环的嵌套第八节 程序举例,循环的必要性,int result1,result2,result3;int result4,result5;result1=1*10;printf(1 10%d n,result1);result2=2*10;printf(2 10%d n,result2);result3=3*10;printf(3 10%d n,result3);result4=4*10;pri
2、ntf(4 10%d n,result4);result5=5*10;printf(5 10%d n,result5);,1 10 102 10 203 10 304 10 405 10 50,输出结果,重复语句,6.1 概述,循环的必要性,1 10=102 10=203 10=304 10=405 10=50,0+1,1+1,2+1,上个数字+1,.,重复(上个数字+1)10,C 语言中的各种循环,while,do-while,for,需要多次重复执行一个或多个任务的问题考虑使用循环来解决,C语言可实现循环的语句:用goto 和 if 构成循环while 语句do while 语句for 语
3、句,循环型程序设计,6.2 while语句一般形式:,while(表达式)循环体语句;,执行流程:,计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。,工作原理,说明:语句部分可以是简单语句也可以是复合语句。,循环体,例 用while循环求,#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);,说明:循环体有可能一次也不执行循环体可为任意类型语句,一个以上的语句用括起来下列情况,退出while循环条件表达式不成立(
4、为零)循环体内遇break,goto无限循环:while(1)循环体;,例:分析程序的运行结果#include main()int i=1,sum=0;while(i=100)printf(“i=%d,sum=%d”,i,sum+=i);i+;printf(”Sum=%dn”,sum);结果:程序将不停的打印“i=1,sum=.”。无法正常终止的程序,称为“死循环”。结论:在while语句循环体中,一定要有能够对循环控制条件产生影响的语句。避免出现“死循环”现象。,例 显示110的平方,#include main()int i=1;while(i=10)printf(%d*%d=%dn,i,i
5、,i*i);i+;,运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100,6.3 dowhile语句一般形式:,do 循环体语句;while(表达式);,执行流程:,它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。,工作原理,特点:先执行循环体,后判断表达式说明:至少执行一次循环体dowhile可转化成while结构,分别用dowhile和while求,main()int i,sum=0;i=1;do sum+=i;i+;while(i=10);printf(%d,sum);
6、,main()int i,sum=0;i=1;while(i=10)sum=sum+i;i+;printf(%d,sum);,do-while,while,问题描述:猜数游戏。要求猜一个介于110之间的数字,根据用户猜测的数与标准值进行对比,并给出提示,以便下次猜测能接近标准值,直到猜中为止。,do-while 循环示例,main()int number=5,guess;printf(猜一个介于 1 与 10 之间的数n);do printf(请输入您猜测的数:);scanf(%d,猜一个介于 1 与 10 之间的数请输入您猜测的数:3太小请输入您猜测的数:5您猜中了!答案为 5,输入数字 5
7、 后,dowhile 循环中的条件为假,输出结果消息后,程序终止。,比较 while 和 do-while循环,while(循环条件)循环体;,do 循环体;while(循环条件);,do-while 循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。,while循环是先判断后执行,所以,如果条件为假,则循环体一次也不会被执行。,比较 while 和 do-while 循环的工作原理,编程:辗转相除法求任意两个整数间的最大公约数,:输入一个正整数,要求以相反的顺序输出该数。例如:输入12345,则输出为54321。基本思路:可以从个位开始,按位输出整数的每一位,Input
8、an integer to number,Until number=0,Output number%10number=number/10,main()unsigned int number;printf(Input the number:);scanf(%d,思考:使用while或for语句,如何实现?,两个程序有何区别?,前面的程序可以处理数字0,后面的程序不能处理,1234,5,6.4 for语句一般形式:,for(expr1;expr2;expr3)循环体语句;,执行流程:,for(表达式1;表达式2;表达式3)语句;,for 循环的一般语法:,for 循环,counter=0;num=
9、1;cnt=100;,counter=10;num 0,counter+;num=num+1;cnt-,分号用于分隔 for 循环的三个表达式,1、计算表达式1的值,通常为循环变量赋初值;2、计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次,否则跳出循环;3、计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行;,工作原理,1,2,3,4,表达式1,表达式2,表达式3,语句,表达式1,表达式2,Y,表达式2,for循环,Y,N,表达式3,for 循环示例,#include void main()int number,i,fac=1;printf(n 请
10、输入任意一个正整数:);scanf(%d,请输入任意一个正整数:5,5,1,1,2,120,6,循环执行五次,5的阶乘=120,for 循环的表达式,for 循环中有三个表达式for 语句中的各个表达式都可以省略分号分隔符不能省略,for(;);,可省略,不能省略,省略表达式1,int num=0;for(;num=10;num+)printf(%dn,num*2);,int a=0,n;printf(n 输入n的值:);scanf(%d,相当于省去了为循环变量赋初值,此时应在for语句之前给循环变量赋初值,省略表达式2,for(num=1;num+).,即不判断循环条件,也就是认为表达式2始
11、终为真,这时应在循环体内设法结束循环,否则将成为死循环,省略表达式3,for(i=1;i=100;)sum=sum+1;i+;,即省去修改循环变量的值,但此时应在循环体内设法结束循环,省略三个表达式,for(;)printf(这将一直进行下去);i=getchar();if(i=X|i=x)break;,即不为循环变量赋初值,不设置循环条件(认为表达式2为真值),不修改循环变量的值,无终止地执行循环体。此时应在循环体内设法结束循环,否则会成为死循环,说明:expr1也可以是给其它变量赋初值;expr1和expr3也可以是逗号表达式例:for(sum=0,i=1;i=100;i+,i+)for(
12、sum=0,i=1;i=100;i=i+2)for语句可以转换成while结构,expr1;while(expr2)循环体语句;expr3;,例:#include main()int i=0;for(i=0;i10;i+)putchar(a+i);,运行结果:abcdefghij,例:#include main()int i=0;for(;i10;i+)putchar(a+i);,例:#include main()int i=0;for(;i10;)putchar(a+(i+);,例:#include main()int i=0;for(;i10;putchar(a+i),i+);,main(
13、)int i,j,k;for(i=0,j=100;i=j;i+,j-)k=i+j;printf(%d+%d=%dn,i,j,k);,#includemain()char c;for(;(c=getchar()!=n;)printf(%c,c);,0+100=1001+99=1002+98=100 50+50=100,:数列1、1、2、3、5、8、13、21、是著名的菲波那奇数列,其递推通项公式为:F1 F2 Fn Fn-1 Fn-2(n=3)为求出第N项的值,请编写程序。根据递推通项公式,可用递推法编写程序,计算第N项的值。递推法:由初始的已知条件开始,先计算出第(N1)步的结果,再利用前面已
14、知的(N1)项结果,按照递推公式(或遵照递推规则),推出第N步结果。递推法是程序设计中最常用的方法之一,使用递推法必须有明确的递推初始值和递推规则(递推公式)。,6.5 break、continue、goto语句break语句功能:在循环语句和switch语句中,终止并跳出循环体或switch说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中,continue语句功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中,break 语句,跳出 for 循环for(;)printf(这将一直进行下去
15、);i=getchar();if(i=X|i=x)break;,跳出 while 循环while(1)if(x=10)break;,跳出 do-while 循环do if(x=10)break;while(x 15);,continue 语句,continue 语句的作用是跳过循环体中剩余的语句而执行下一次循环对于while和do-while循环,continue 语句执行之后的动作是条件判断;对于for循环,随后的动作是变量更新,功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中,continue 语句,while()continue;,while
16、()break;,跳出整个循环,继续下一次循环,例6.5 把100200之间的不能被3整除的数输出,main()int n;for(n=100;n200;n+)if(n%3=0)continue;printf(%d,n);,main()int n;for(n=100;n200;n+)if(n%3=0)break;printf(%d,n);,100 101 103 104 106 107200,100 101,:求555555的约数中最大的三位数是多少?main()int j;long n=555555;/*所求的约数的可能取值是从999到100,j从大到小*/for(j=999;j=100;j
17、-)if(n%j=0)/*若能够整除j,则j是约数*/printf(”3 digits in%ld=%dn”,n,j);break;/*控制退出循环*/,main()int i,count=0,j,sum=0;for(i=1;i=10;i+)printf(Input integer:);scanf(%d,:输入10个整数,求其中正数的个数及平均值,精确到小数点后两位。,goto语句及用goto构成循环,goto语句一般格式:,goto 语句标号;.标号:语句;,功能:使系统转向标号所在的语句行执行说明:语句标号用标识符表示,要符合标识符命名规则,goto loop;goto 255;,#inc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章节 循环 结构 程序设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5359513.html