版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 执行过程:先判别,后执行。 循环体表达式非非0 00 0第六章 循环结构程序设计例1 用while语句求1+2+3+99+100的值。main( )int sum=0, i=1; while(i=100) s
2、um=sum+i; i+; printf(“%dn,sum);sum=0i=1当i=100sum=sum+ii=i+1输出sum的值第六章 循环结构程序设计3. 阐明1while语句是先判别, 后执行。 假设循环条件一开场就不成立条件表达式为假, 那么循环一次都不执行。2while循环中的表达式普通是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只需其值非零,就可执行循环体。 3循环体为多条语句时, 必需采用复合语句,要加上一对花括号。 4循环体中必需有改动循环条件的语句, 否那么循环不能终止, 构成死循环。 第六章 循环结构程序设计#includemain( )int m=0;
3、char ch; ch=getchar( ); while(ch!=n) m+; ch=getchar( ); printf(“%d, m);ch=getchar( )m=0当ch!=nm=m+1ch=getchar( )输出m的值#includemain( )int m=0; char ch; while( (ch=getchar( ) )!=n) m+; printf(“%d, m);例2 从键盘延续输入字符,直到输入回车为止, 统计输入的字符个数。第六章 循环结构程序设计6.2 do-while语句语句1. 方式:do 循环体 while(表达式) ; 2. 执行过程:先执行,后判别。到
4、此do-while语句终了循环体真假表达式第六章 循环结构程序设计例3 用do-while语句求1+2+3+99+100的值。main( )int sum=0, i=1; do sum=sum+i; i+; while(i100sum=sum+ii=i+1输出sum的值第六章 循环结构程序设计3. 阐明1do-while语句是先执行, 后判别。假设循环的条件一开场就不成立, 循环也将执行一次。2do-while循环中的表达式普通也是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只需其值非零,就可执行循环体。 3循环体为多条语句时必需采用复合语句。 4与while语句一样, 循环体中
5、同样必需有改动循环条件的语句, 否那么循环不能终止,将构成死循环。 5对于同一个问题,while循环与do-while循环的条件表达式是完全一样的。第六章 循环结构程序设计#includemain( )int m=0; char ch; ch=getchar( ); do m+; ch=getchar( ); while(ch!=n); printf(“%d, m);ch=getchar( )m=0直到ch= =nm=m+1ch=getchar( )输出m的值例4 从键盘延续输入字符,直到输入回车为止, 统计输入的字符个数。第六章 循环结构程序设计6.3 for语句语句1. 方式: for(
6、表达式1 ; 表达式2 ; 表达式3) 循环体2. 执行过程:先判别,后执行。e2假真求解e1循环体求解e3循环变量赋初值循环条件循环变量增值第六章 循环结构程序设计例 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=
7、sum+i; printf(“%dn,sum);sum=0for i=1 to 100sum=sum+i输出sum的值第六章 循环结构程序设计3. 阐明1for语句是先判别,后执行。假设循环条件一开场就不成立,那么循环一次都不执行。2for语句的运用很灵敏,方式多样化。 3循环体为多条语句时, 必需采用复合语句,要加上一对花括号。 4循环变量的增值并不受限于1,可以为正,也可为负。但必需使循环变量的值发生改动,使循环条件能趋向假,否那么会呵斥死循环。第六章 循环结构程序设计4. for语句的灵敏运用1for语句中的初始化表达式和增值表达式也常为逗号表达式。如:for(sum=0, i=1; i
8、=100; i+) sum=sum+i;又如:for(a=0, b=8; ab; a+, b-) x=a+b;2for语句中的初始化表达式和增值表达式可以省略,但两个分号不能省略。此时,for语句与while语句完全等价。第六章 循环结构程序设计例5可改写成如下方式:main( )int i, sum=0; i=1; for( ; i=100 ; ) sum=sum+i; i+; printf(“%d, sum);第六章 循环结构程序设计3循环条件不一定是循环变量和某个目的值的比较。例4可改用for语句来实现:#includemain( )int m ; char ch; for(m=0; (
9、 ch=getchar( ) ) !=n ; m+ ) ; printf(“%d, m);比较:几种循环可相互交换,其中for语句的功能最强,运用最灵敏。第六章 循环结构程序设计goto语句无条件转向语句语句无条件转向语句1. 方式:方式:goto 标号标号;2. 功能:将程序流程无条件地转移到标号所在的功能:将程序流程无条件地转移到标号所在的那个语句开场执行,与那个语句开场执行,与if语句一同可构成循环。语句一同可构成循环。例例 用用goto求求1100之和。之和。 main( ) int i=1, sum=0; loop: if(i=100) sum=sum+i; i+; goto loo
10、p; 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次。第六章 循环结构程序设计例6 求s=1+(1+2)+(1+2+3)+(1+2+3+100)的值。t=0for j=1 to it=t+js=0for i=1 to 100s=s+t输出s的值求出第i个加项tmain( )in
11、t 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(i=1; i=9; i+) 打印第i行第六章 循环结构程序设计进一步思索如何“打印第i行?f
12、or(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+) /*打印分隔线*/ printf(“%c, - ); printf(“n
13、); 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来来讲,这意味着立刻进展下一次循环条
14、件的判别;讲,这意味着立刻进展下一次循环条件的判别;而对于而对于for语句来讲,那么意味着立刻求解表达语句来讲,那么意味着立刻求解表达式式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构造,也可以跳出循环结果,构造,也可以跳出
15、循环结果,提早终了一整个循环,执行循环构造后面的语提早终了一整个循环,执行循环构造后面的语句。句。3. 阐明:阐明:1 break语句只能用于语句只能用于switch构造或循环构造,构造或循环构造,且往往与且往往与if 语句联用。语句联用。2在循环语句嵌套运用的情况下,在循环语句嵌套运用的情况下, break语句语句只能跳出或终止它所在的循环,而不能同只能跳出或终止它所在的循环,而不能同时跳出或终止多层循环。时跳出或终止多层循环。第六章 循环结构程序设计define PI 3.1415926 main( ) int r ; float area ; for (r=1; r100) break;
16、 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.2102. 下面程序的输出结果为 。main( )int y=10; while( y- - ) ; printf(“y=%d, y);A.y=0 B.while构成死循环 C.y=1 D.y= -1BD第六章 循环结构程序设计3. 以下程序的输出结果是 。#includemain( )
17、int i; for(i=1; i5; i+) if(i%2) putchar(); putchar(#);A. # B. # C. # 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; printf(“%d, i ); A.01 B.0134 C.01234 D.不打印BA第六章 循环结构程序设计5. 假设x
18、,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. 迭代法:用新值取代旧值,或由旧值递推出新迭代法:用新值取代旧值,或由旧值递推出新值。值。 主要思索:主要思索
19、: 初值:在循环体外给出初值:在循环体外给出 迭代公式:通常即为循环体迭代公式:通常即为循环体 迭代次数:循环条件的设定迭代次数:循环条件的设定第六章 循环结构程序设计715131146.7.2 迭代法的运用迭代法的运用例例8 用用 公式求出公式求出的近似值,的近似值,直到直到最后一项的绝对值小于最后一项的绝对值小于10-6为止。为止。思索:思索: 迭代公式迭代公式 迭代次数迭代次数 初值初值第六章 循环结构程序设计#includemain( )int s; float n, t, pi; t=1; pi=0; n=1; s=1; while( fabs(t) =1e-6 ) pi=pi+t;
20、 n=n+2; s= - s; t=s/n; pi=pi*4; printf(“pi=%.7fn, pi);t=1, pi=0, n=1, s=1当| t | = 10-6pi=pi+t输出pi的值n=n+2s = - st=s/npi=pi*4 第六章 循环结构程序设计例9 求Fibonacci数列的前40个数。 F1=1 (n=1)公式 F2=1 (n=2) Fn=Fn-1+Fn-2 (n=3)f1=1, f2=1for i=1 to 20f1=f1+f2输出f1,f2的值f2=f2+f1main( )int i; long f1=1, f2=1; for( i=1; i=20; i+ )
21、 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能否素数。能否素数。输入nk=sqrt(n)n%m= =0breakm=m+1for m=2 to k 打
22、印“Yes打印“Nom=kYNYN#includemain( )int n, m, k; scanf(“%d, &n); k=sqrt(n); for(m=2; m=k; m+) if(n%m= =0) break; if(m=k) printf(“No!n); else printf(“Yes!n);第六章 循环结构程序设计例12 求出100200之间的全部素数。k=sqrt(n)n%m= =0breakm=m+1for m=2 to k 打印“Yes打印“Nom=kYNYNfor n=100 to 200 #includemain( )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 百钱买百鸡。中提出了“百鸡问题:鸡翁一值钱五,鸡母一值钱三,鸡
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 各类协议书的法律效力
- 保安服务协议范文
- 商标贷款担保协议样本
- 2024年男方自愿放弃财产离婚协议书
- 工程租赁提升机合同范文
- 施工合同示范文本:建筑施工合同工期延误协议
- 工程监管合同协议
- 建筑工程项目勘察合同
- 2024年商铺转让的租赁合同范本
- 浙江S锯床内部控制环境问题及优化建议13000字
- 选修课-足球教案
- 充电桩运维合同(2篇)
- 美团 课程设计
- 骨质疏松的分级诊疗及医联体的建设方案
- 2024年贵州黔东南州直事业单位遴选工作人员42人历年高频难、易错点500题模拟试题附带答案详解
- 公务员2022年国考《申论》真题(副省级)及参考答案
- 临建板房搬迁合同模板
- 医疗器械(耗材)项目投标服务投标方案(技术方案)
- (完整版)链传动习题
- 出国留学高中成绩单最强模板
- 食安员抽考必备知识考试题库(含答案)
评论
0/150
提交评论