六章循环结构程序设计.ppt

上传人:本田雅阁 文档编号:2588447 上传时间:2019-04-13 格式:PPT 页数:43 大小:413.51KB
返回 下载 相关 举报
六章循环结构程序设计.ppt_第1页
第1页 / 共43页
六章循环结构程序设计.ppt_第2页
第2页 / 共43页
六章循环结构程序设计.ppt_第3页
第3页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《六章循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《六章循环结构程序设计.ppt(43页珍藏版)》请在三一文库上搜索。

1、第六章 循环结构程序设计,6.1 while语句 6.2 do-while语句 6.3 for语句 6.4 多重循环 6.5 continue和break语句 6.6 练习 6.7 程序设计举例 6.8 作业和实验,6.1 while语句,1. 形式:while(表达式) 循环体 2. 执行过程:先判断,后执行。,例1 用while语句求1+2+3+99+100的值。,main( ) int sum=0, i=1; while(i=100) sum=sum+i; i+; printf(“%dn”,sum); ,3. 说明 (1)while语句是先判断, 后执行。 如果循环条件一开始就不成立(条

2、件表达式为假), 则循环一次都不执行。 (2)while循环中的表达式一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值非零,就可执行循环体。 (3)循环体为多条语句时, 必须采用复合语句,要加上一对花括号。 (4)循环体中必须有改变循环条件的语句, 否则循环不能终止, 形成死循环。,#include main( ) int m=0; char ch; ch=getchar( ); while(ch!=n) m+; ch=getchar( ); printf(“%d”, m); ,例2 从键盘连续输入字符,直到输入回车为止, 统计输 入的字符个数。,6.2 do-whil

3、e语句,1. 形式:do 循环体 while(表达式) ; 2. 执行过程:先执行,后判断。,循环体,真,假,表达式,例3 用do-while语句求1+2+3+99+100的值。,main( ) int sum=0, i=1; do sum=sum+i; i+; while(i=100); printf(“%dn”,sum); ,3. 说明 (1)do-while语句是先执行, 后判断。如果循环的条件一开始就不成立, 循环也将执行一次。 (2)do-while循环中的表达式一般也是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值非零,就可执行循环体。 (3)循环体为多条语句时

4、必须采用复合语句。 (4)与while语句一样, 循环体中同样必须有改变循环条件的语句, 否则循环不能终止,将形成死循环。 (5)对于同一个问题,while循环与do-while循环的条件表达式是完全相同的。,#include main( ) int m=0; char ch; ch=getchar( ); do m+; ch=getchar( ); while(ch!=n); printf(“%d”, m); ,例4 从键盘连续输入字符,直到输入回车为止, 统计输 入的字符个数。,6.3 for语句,1. 形式: for( 表达式1 ; 表达式2 ; 表达式3) 循环体 2. 执行过程:先判

5、断,后执行。,循环变量赋初值,循环条件,循环变量增值,例 for(a=1; a=3; a+) printf(“%d”, a); 执行步骤: 执行a=1,a值为1。 判断a=3,成立,输出1。 执行a+,a值为2。 判断a=3,成立,输出2。 执行a+,a值为3。 判断a=3,成立,输出3。 执行a+,a值为4。 判断a=3,不成立,循环结束。,例5 用for语句求1+2+3+99+100的值。,main( ) int sum=0, i; for(i=1; i=100; i+) sum=sum+i; printf(“%dn”,sum); ,3. 说明 (1)for语句是先判断,后执行。如果循环条

6、件一开始就不成立,则循环一次都不执行。 (2)for语句的使用很灵活,形式多样化。 (3)循环体为多条语句时, 必须采用复合语句,要加上一对花括号。 (4)循环变量的增值并不受限于1,可以为正,也可为负。但必须使循环变量的值发生改变,使循环条件能趋向假,否则会造成死循环。,4. for语句的灵活使用 (1)for语句中的初始化表达式和增值表达式也常为逗号表达式。 如:for(sum=0, i=1; i=100; i+) sum=sum+i; 又如:for(a=0, b=8; ab; a+, b-) x=a+b; (2)for语句中的初始化表达式和增值表达式可以省略,但两个分号不能省略。此时,f

7、or语句与while语句完全等价。,例5可改写成如下形式: main( ) int i, sum=0; i=1; for( ; i=100 ; ) sum=sum+i; i+; printf(“%d”, sum); ,(3)循环条件不一定是循环变量和某个目标值的比较。 例4可改用for语句来实现: #include main( ) int m ; char ch; for(m=0; ( ch=getchar( ) ) !=n ; m+ ) ; printf(“%d”, m); 比较:几种循环可互相替换,其中for语句的功能最强,使用最灵活。,goto语句(无条件转向语句) 1. 形式:goto

8、 标号; 2. 功能:将程序流程无条件地转移到标号所在的那个语句开始执行,与if语句一起可构成循环。 例 用goto求1100之和。 main( ) int i=1, sum=0; loop: if(i=100) sum=sum+i; i+; goto loop; printf(“%d”, sum); ,6.4 多重循环,当一个循环体内又包含另一个完整的循环结构时,称为多重循环或循环嵌套,其循环结构可用上述三种循环语句的任意一种。形如: sum=0; for(a=1;a=3;a+) for(b=1;b=3;b+) sum=sum+b; 内外重循环的循环变量不同,b变化的速度比a快,赋值语句共执

9、行9次。,例6 求s=1+(1+2)+(1+2+3)+(1+2+3+100)的值。,main( ) int i, j, t; long s; for(s=0, i=1; i=100; i+) t=0; for(j=1; j=i; j+) t=t+j; s=s+t; printf(“s=%ldn”, s); ,例7 打印九九表(每个数占4列)。,S1:打印表头 S2:打印分隔线 S3:打印表体,(1)打印表头 for(i=1; i=9; i+) printf(“%4d”, i );,(2)打印分隔线 for(i=1; i=36; i+) printf(“%c”, - );,(3)打印表体 for

10、(i=1; i=9; i+) 打印第i行,进一步考虑如何“打印第i行”?,for(j=1; j=9; j+) 打印第j个数,“打印第j个数”即在第i行的第j列上打印一个数,大小为i*j, 占4列,故可写为: printf(“%4d”, i*j);,最后考虑如何“换行”?,显然不能在每个数字后面都换行,而应该在第九个数字后 面换行。因此,换行的语句不应该放在第二重循环内,而 应在第二重循环外,与第二重循环并列。,main( ) int i, j; for(i=1; i=9; i+) /*打印表头*/ printf(“%4d”, i ); printf(“n”); for(i=1; i=36; i

11、+) /*打印分隔线*/ printf(“%c”, - ); printf(“n”); for(i=1; i=9; i+) /*用双重循环打印表体*/ for(j=1; j=9; j+) printf(“%4d”, i*j); printf(“n”); /*换行*/ ,6.5 continue和break语句,6.5.1 continue语句 1. 格式:continue; 2. 功能:终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句而立即开始下一轮循环。对于while和do-while来讲,这意味着立即进行下一次循环条件的判断;而对于for语句来讲,则意味着立即求

12、解表达式3。 3. 说明:continue语句往往与if 语句联用。,例 main( ) int n; for(n=1; n=20; n+) if(n%3= =0) continue; printf(“%d_”, n); ,功能:打印120之间不能被3整除的数。,6.5.2 break语句 1. 格式:break; 2. 功能:跳出switch结构,也可以跳出循环结果,提前结束一整个循环,执行循环结构后面的语句。 3. 说明: (1) break语句只能用于switch结构或循环结构,且往往与if 语句联用。 (2)在循环语句嵌套使用的情况下, break语句只能跳出(或终止)它所在的循环,而

13、不能同时跳出(或终止)多层循环。,define PI 3.1415926 main( ) int r ; float area ; for (r=1; r100) break; printf(“r: %d,area is: %fn“, r, area); ,功能:计算半径为110的圆的面积,直到面积大于100为止。,6.6 练习,1. 下列程序段的输出结果是( )。 x=3; do printf(“%d”, x-); while(!x); A.321 B.3 C.21 D.210 2. 下面程序的输出结果为( )。 main( ) int y=10; while( y- - ) ; print

14、f(“y=%d”, y); A.y=0 B.while构成死循环 C.y=1 D.y= -1,B,D,3. 以下程序的输出结果是( )。 #include main( ) int i; for(i=1; i); putchar(#); A. # B. # D. #,C,4.下述for循环语句( )。 int i, k; for(i=0, k= -1; k=1; i+, k+) printf(“*”); A.判断循环结束的条件非法 B.是无限循环 C.只循环一次 D.一次也不循环 5. 执行下列语句的结果为( )。 for(i=0; i5; +i) if( i= =2) break; print

15、f(“%d”, i ); A.01 B.0134 C.01234 D.不打印,B,A,5. 若x,y为int型变量,下列语句结果为 。 for(x=1; x5; x=x+2) for(y=2; y5; y+) printf(“%2d”, x*y); if(y= =5) printf(“n”); ,_2_3_4 _6_912,6.7 程序设计举例,6.7.1 两种基本算法 1. 穷举法:对问题所有可能出现的状态一一测试,直到找到解或将全部可能的状态都测试过为止。 2. 迭代法:用新值取代旧值,或由旧值递推出新值。 主要考虑: 初值:在循环体外给出 迭代公式:通常即为循环体 迭代次数:循环条件的设

16、定,6.7.2 迭代法的应用 例8 用 公式求出的近似值,直到 最后一项的绝对值小于10-6为止。 考虑: 迭代公式 迭代次数 初值,#include main( ) int s; float n, t, pi; t=1; pi=0; n=1; s=1; while( fabs(t) =1e-6 ) pi=pi+t; n=n+2; s= - s; t=s/n; pi=pi*4; printf(“pi=%.7fn”, pi); ,例9 求Fibonacci数列的前40个数。 F1=1 (n=1) 公式 F2=1 (n=2) Fn=Fn-1+Fn-2 (n=3),main( ) int i; lo

17、ng f1=1, f2=1; for( i=1; i=20; i+ ) printf(“%12ld%12ld”, f1, f2); f1=f1+f2; f2=f2+f1; if(i%2= =0) printf(“n”); ,例10 求两个正整数m和n的最大公约数和最小公倍数。 最小公倍数=m*n/最大公约数 最大公约数的求法:辗转相除法。其算法可描述为: 当n不为0时,进行辗转操作: r=m%n; m=n; n=r; 消去相同的因子,直到n=0时,m的值即为所求的解。,6.7.3 穷举法的应用 例11 判断n是否素数。,#include main( ) int n, m, k; scanf(“

18、%d”, ,例12 求出100200之间的全部素数。,#include main( ) int n, m, k; for(n=101; n200; n=n+2) k=sqrt(n); for(m=2; m=k; m+) if(n%m= =0) break; if(m=k) printf(“No!n”); else printf(“Yes!n”); ,例13 百钱买百鸡。算经中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?,可得一不定方程问题: cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100,容

19、易得到三个变量的取值范围: cocks: 019 hens: 033 chicks: 0100,main( ) int cocks, hens, chicks; for(cocks=0; cocks=19; cocks+) for( hens=0; hens=33; hens+) chicks=100-cocks-hens; if(5*cocks+3*hens+chicks/3= =100) printf(“cocks=%d, hens=%d, chicks=%dn”, cocks, hens, chicks); ,例14 译码。输入一行字符,将其中的每个字母转换成其后的第4个字母。要求输出相应的密码。,#include main( ) char c; while( (c=getchar( ) )!=n ) if( (c=a ,6.8 作业和实验,(一) 1.习题6.2 2.打印如下图形(_表示空格,每行五个*): * _* _ _* _ _ _* _ _ _ _* 3.习题6.3 4.习题6.1,(二) 1.习题6.6 2.求100之内所有素数的平均值。 3.一道算式中7个数字只能看清3个数字,且第一个数字不为1,试找出辩认不清的数字,算式为:*(3+)=89 (表示辩认不清的数字) 4.了解习题6.116.13的解题思路。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1