第六章 循环结构的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
2、 10 %d n“,result3); result4 = 4 * 10; printf(“4 10 %d n“,result4); result5 = 5 * 10; printf(“5 10 %d n“,result5);,1 10 10 2 10 20 3 10 30 4 10 40 5 10 50,输出结果,重复语句,6.1 概述,循环的必要性,1 10 = 10 2 10 = 20 3 10 = 30 4 10 = 40 5 10 = 50,0 + 1,1 + 1,2 + 1,上个数字 + 1,.,重复(上个数字 +1) 10,C 语言中的各种循环,while,do- while,f
3、or,需要多次重复执行一个或多个任务的问题考虑使用 循环来解决,C语言可实现循环的语句: 用goto 和 if 构成循环 while 语句 do while 语句 for 语句,循环型程序设计,6.2 while语句一般形式:,while(表达式) 循环体语句;,执行流程:,计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。,工作原理,说明:语句部分可以是简单语句也可以是复合语句。,循环体,例 用while循环求,#include main() int i,sum=0;i=1;while(i=100)
4、sum=sum+i;i+;printf(“%d“,sum); ,说明: 循环体有可能一次也不执行 循环体可为任意类型语句,一个以上的语句用括起来下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇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=.”。 无法正常终止的程序,称为“死循环”。结论:在whi
5、le语句循环体中,一定要有能够对循环控制条件产生影响的语句。避免出现“死循环”现象。,例 显示110的平方,#include main() int i=1;while(i=10) printf(“%d*%d=%dn“,i,i,i*i);i+; ,运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100,6.3 dowhile语句一般形式:,do 循环体语句;while(表达式);,执行流程:,它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。,工作原理,特点:先
6、执行循环体,后判断表达式 说明: 至少执行一次循环体 dowhile可转化成while结构,分别用dowhile和while求,main() int i,sum=0;i=1;do sum+=i;i+;while(i=10);printf(“%d“,sum); ,main() int i,sum=0;i=1;while(i=10) sum=sum+i;i+;printf(“%d“,sum); ,do-while,while,问题描述: 猜数游戏。要求猜一个介于110之间的数字,根据用户猜测的数与标准值进行对比,并给出提示,以便下次猜测能接近标准值,直到猜中为止。,do-while 循环示例,ma
7、in() int number=5,guess;printf (“猜一个介于 1 与 10 之间的数n“);doprintf(“请输入您猜测的数:“);scanf(“%d“, ,猜一个介于 1 与 10 之间的数 请输入您猜测的数:3 太小 请输入您猜测的数:5 您猜中了! 答案为 5,输入数字 5 后,dowhile 循环中的条件为假, 输出结果消息后,程序终止。,比较 while 和 do-while循环,while(循环条件) 循环体; ,do 循环体;while( 循环条件);,do-while 循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。,while循环是先
8、判断后执行,所以,如果条件为假,则循环体一次也不会被执行。,比较 while 和 do-while 循环的工作原理,编程:辗转相除法求任意两个整数间的最大公约数,:输入一个正整数,要求以相反的顺序输出该数。例如:输入12345,则输出为54321。基本思路:可以从个位开始,按位输出整数的每一位,Input an integer to number,Until number = 0,Output number%10 number = number /10,main( ) unsigned int number;printf (“Input the number:“);scanf (“%d“, ,
9、思考:使用while或for语句,如何实现?,两个程序有何区别?,前面的程序可以处理数字0,后面的程序不能处理,1234,5,6.4 for语句一般形式:,for(expr1 ; expr2 ; expr3)循环体语句;,执行流程:,for( 表达式1 ; 表达式2 ; 表达式3 ) 语句; ,for 循环的一般语法:,for 循环,counter = 0; num = 1; cnt = 100;,counter = 10; num 0,counter +; num = num + 1; cnt-,分号用于分隔 for 循环的 三个表达式,1、计算表达式1的值,通常为循环变量赋初值; 2、计算
10、表达式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 请输入任意一个正整数:“);scanf(“%d“, ,请输入任意一个正整数:5,5,1,1,2,120,6,循环执行五次,5的阶乘 = 120,for 循环的表达式,for 循环中有三个表达
11、式 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始终为真,这时应在循环体内设法结束循环,否则将成为死循环,省略表达式3,for(i=1;i=100;) sum=sum+1;
12、 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(sum=0,i=1;i=100;i=i+2)for语句可以转换成while结构,
13、expr1; while(expr2) 循环体语句;expr3; ,例:#includemain( ) int i=0;for(i=0;i10;i+)putchar(a+i);,运行结果:abcdefghij,例:#includemain( ) int i=0;for(;i10;i+)putchar(a+i);,例:#includemain( ) int i=0;for(;i10;)putchar(a+(i+);,例:#includemain( ) int i=0;for( ;i10; putchar(a+i),i+);,main() int i,j,k;for(i=0,j=100;i=j;i
14、+,j-) k=i+j;printf(“%d+%d=%dn“,i,j,k); ,#include main() char c;for(;(c=getchar()!=n;)printf(“%c “,c); ,0+100=100 1+99=100 2+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)步的结果,再利用前面已知的(N1)项结果,按照递推公式
15、(或遵照递推规则),推出第N步结果。递推法是程序设计中最常用的方法之一,使用递推法必须有明确的递推初始值和递推规则(递推公式)。,6.5 break、continue、goto语句 break语句 功能:在循环语句和switch语句中,终止并跳出循环体或switch 说明: break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的任何其它语句之中,continue语句 功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断 仅用于循环语句中,break 语句,跳出 for 循环 for( ; ; ) printf(“这将一直进行下去“)
16、;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 语句,w
17、hile() continue; ,while() 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 107 200,100 101,:求555555的约数中最大的三位数是多少?main( ) int j; long n=555555
18、; /*所求的约数的可能取值是从999到100,j从大到小*/for (j=999; j=100; j-)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语句一般格式:,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 循环 结构 程序设计 PPT
