五、循环结构程序设计_第1页
五、循环结构程序设计_第2页
五、循环结构程序设计_第3页
五、循环结构程序设计_第4页
五、循环结构程序设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、五、循环结构程序设计5.1 概述5.2 while 循环结构5.3 do - while 循环结构5.4 for 循环结构5.5 无条件控制语句 break, continue, goto 5.6 应用举例5.1 概述 循环结构 根据循环条件决定是否要重复执行某一模 块(循环体)。 C语言中主要有三种循环结构: while结构 do-while结构 for结构5.2 while 循环结构 一般形式 执行流程 while ( 表达式表达式 ) 语句语句 ( 循环体 ) while循环结构 是一种当型循环结构语 句表达式0(假)非0(真)【例 3.7】用while循环,把26个大写字母显示出来。

2、main ( ) char i = A; while ( i = Z) printf (%c, i ); i+; 打印ii=i+1iZFTi=A例1:统计输入键盘的字符、数字、空白键(空格、回车、制表)及其它字符的个数。设:nletter 为键入字符个数, ndigit 为键入数字个数, nwhite 为键入空白键个数 (含 、t、 n), nother 为键入其它字符个数。又:中定义EOF为复合键 ctrl+z, 将此动作视为键入字符的结束。# include main ( ) int nl, nd, nw, no, c; nl= nd = nw = no = 0; while (c=get

3、char( )!= EOF) if (a=c&c=z|A=c&c=Z) nl +; else if (0=c&c=9) nd +; else if (c= |c=t|c=n) nw+; else no+; printf(nletter=%d,ndigit=%dn,nl,nd); printf(nwhite=%d,nother=%dn,nw,no);例2:已知s=1!+2!+3!+n! ,求当s首次超过 2,000,000时的n和s的值main() int n=0;long s=0 ,an=1;while(s2000000) n+; an=an*n;s=s+an; printf(s=%ld n=

4、%dn,s,n);例3:给一个不多于5位的正整数,求出它是几位数, 并按逆序打印出各个位上的数字。 (上机题cp32) main() long a; int i=0; printf(Enter a data:n); scanf(%ld,&a); while(a!=0) printf(%d,a%10); a=a/10; i+; printf(n%dn,i);5.3 do - while循环结构 一般形式 执行流程 do 语句语句(循环体) while (表达式)(表达式); do-while循环结构 是一种直到型循环结构表达式语句FT【例 3.11】用do - while 循环,把26个大写字母

5、按 顺序显示出来main ( ) char i = A; do printf (%c, i ) i +; while ( i=p1);0margorPCp1p2例1:用 公式求 的 近似值,直到余项的首项绝对值小于10-4为止。#include main ( ) float PI=0., m=1., i=1.; int j= -1; do PI=PI+m; i=i+2; m=j/i; j= - j; while (fabs (m)= 0.0001); PI=4*PI; printf(PI=%fn, PI);.71513114int j=1;do PI=PI+j/i; i=i+2; j= - j

6、; while (1/i= 0.0001);例2:求 的部分和。 直到余项的首项的值小于1.0e-4。 有第 n 项 un=xn/n!, 第 n+1 项 un+1= xn+1/(n+1)! 及 un+1 = un(x/(n+1) 程序:main ( ) float x, u=1., s=0.; int n=0; scanf(%f, &x); do s+ = u;u*= x/(n+1); n+; while (u=1.e-4); printf(exp(x)=%fn, s ); .!.! 212nxxxenx5.4 for 循环结构 一般形式 for (表达式(表达式1;表达式;表达式2;表达式;

7、表达式3) 语句语句(循环体) 其中: 表达式表达式1 - 初始化表达式。可用来设定循环控制变 量或循环体中变量的初始值,可以是逗号表达式逗号表达式。 表达式表达式2 - 循环条件表达式。其值为逻辑量,为非 0时继续循环,为0时循环终止 表达式表达式3 - 增量表达式。用来对循环控制变量进行 修正,也可用逗号表达式逗号表达式包含一些本来可放在循环 体中执行的其他表达式 上述表达式可以缺省,但分号不可缺少上述表达式可以缺省,但分号不可缺少 执行过程求解表达式1求解表达式3语 句表达式2TF例1:求和 s=sin1+sin2+.+sin50#include math.hmain ( ) int n

8、; float s; for ( s=0., n=1; n=50; n+;) s+=sin(n); printf (s=%fn,s );【例3.20】百钱百鸡问题。 公鸡5文钱1只, 母鸡3文钱1只, 小鸡一文钱3只。 100文钱如何卖100只鸡?分析:设买 x 只公鸡,y 只母鸡,z 只小鸡,则有: x+y+z=100 5x+3y+z/3=100 隐含条件: x、y、z 都是整数;x20;y33。 用穷举法穷举法,即把x、y、x所有可能的各种组合都一 一判断是否符合上述不定方程组,具体是: 把x可能值020和y可能值033用二重循环来组合, 每个x和y组合都可得到z值,即z=100-x-y,

9、若x、y、 z值使5x+3y+z/3=100成立,则该组x、y、z即为一 组所求值。main( ) int x, y, z, j=1; printf(Possible solutions to buy 100 fowls whith 100 wen:n); for (x=0; x=20; x+) for (y=0; y=33; y+) z=100-x-y; if (z%3=0&5*x+3*y+z/3=100) printf(%2d:cock=%-2d hen=%-2d chicken=%-2dn, j, x, y, z); j+; 运行结果:Possible solutions to buy

10、100 fowls whith 100 wen: 1: cock=0 hen=25 chicken=75 2: cock=4 hen=18 chicken=78 3: cock=8 hen=11 chicken=81 4: cock=12 hen=4 chicken=84例2:打印出所有的“水仙花数”。所谓“水仙花 数”是指一个三位正整数,其各位数字的立方和 等于该数本身,例如:153=13+53+33 。 分析: 可用穷举法穷举法,即把所有的三位正整数100999按 题意一一进行判断,如果一个三位正整数n的百位、 十位、个位上的数字分别为i、j、k,则判断式为: n = i3 + j3 +

11、k3 如何分解三位数n的百位、十位、个位: 百位:i = n/100; 十位:j = ( n/10 )%10; 个位:k = n%10;#include stdio.hmain() int n,i,j,k; for( n=100; n=999; n+ ) i = n /100; j = ( n / 10 ) % 10 ; k = n % 10 ; if ( n= i*i*i + j*j*j + k*k*k ) printf(%d = %d3 + %d3 + %d3n,n,i,j,k); 运行结果:153 13 + 53 + 33370 33 + 73 + 03371 33 + 73 + 134

12、07 43 + 03 + 73例3:写出下列程序的输出结果main() int i,s=0,t=0;for(i=1;i10;i+)switch(i6) case 0: t+=i; break; case 1: s+=i; break; printf(t=%d,s=%dn;t,s);结果:t=30,s=15例4:写出下列程序的输出结果#include “stdio.h”main() int n,a,x; char cc=#;scanf(%d, &n); /* n=4*/for(x=0;x0;a-) putchar(cc); for(a=0;an;a+) printf(%c,97+a); prin

13、tf(n); #abcd#abcd#abcdabcd5.5 无条件控制语句5.5.1 break 语句5.5.2 continue 语句5.5.3 goto 语句及其构成的循环5.5.1 break语句 形式:break; 作用:跳出循环体, 提前结束循环, 无条件转移到 循环结构的下一句继续执行。 使用场合:只能用在 switch 结构和循环结构中。 【例3.23】求300330之间的全部素数。 一个只能被1和自己整除的数称为素数。 决定一个数 是否是素数,只要让 被2除到被 除就可以,如果不能被2到 中的任何一个数整除, 就定 为素数mmmmm#include math.hmain( )

14、int m, i, k; for(m=301;m=330;m=m+2) k=sqrt(m); for(i=2; ik) printf(%d is a prime numbern, m); 运行结果:307 is a prime number311 is a prime number313 is a prime number317 is a prime number例:阅读如下程序,写出运行结果main() int i,s=0; for(i=1;i10) break; printf(i=%d,s=%dn,i,s); 结果:结果:i=3, s=145.5.2 continue 语句 形式:cont

15、inue; 作用:用来结束本次循环(即跳出循环体中尚未 执行的语句)直接进行循环条件的判断 使用场合:用于循环结构中。 【例3.23】求100150之间和400450之间能被9 整除的数。main( ) int n; for( n=100; n150&n400) continue; if (n%9=0) printf(%5d, n); printf(n);运行结果:108 117 126 135 144 405 414 423 432 441 450例1:求100200之间的不能被3整除的数main() int n; for(n=100;n=200;n+) if(n%3=0) continue

16、; printf(%dn,n); 例2:阅读如下程序,写出运行结果main( ) int i, s=0, n=0; for( i=1; i10; i+) if( i%2=0 | i%3=0) continue; n+; s+=i; printf(n=%d, s=%dn, n, s);结果:n=3,s=135.5.3 goto语句及其构成的循环 形式: goto 语句标号语句标号; 其中语句标号用标识符表示。 与goto语句相对应,程序中必有一个带语 句标号的语句,形式为: 语句标号:语句语句标号:语句 作用: 程序无条件地转移到具有该语句标号的语 句上继续执行。 说明: goto语句不是一个必

17、要的语句; 与if结构配合构成条件转移或循环。【例3.25】求1100间的奇数和,即求1+3+5+99main() int i=1,sum=0; loop: sum=sum+i; i=i+2; if(i100) goto loop; printf(sum=%dn,sum);运行结果:sum=2500for (i=1;i1) a=2*(a+1); i-; printf(a=%dn,a);运行结果:a=1534main() /*用for循环*/ int i,a; for(i=10,a=1;i1;i-) a=2*(a+1); printf(a=%dn,a);【例3.28】求两整数的最大公约数和最小公

18、倍数。求最大公约数算法求最大公约数算法: 有两整数a和b: a%b得余数c 若c=0,则b即为两数的最大公约数 若c0,则a=b,b=c,再回去执行 例如求27和15的最大公约数过程为: 2715 余 12 1512 余 3 123 余 0 因此,3即为最大公约数求最小公倍数算法求最小公倍数算法: 最小公倍数=两整数的乘积最大公约数main() int m,n,a,b,t,c; prinf(Input two integer numbers:n); scanf(%d%d,&a,&b); m=a; n=b; c=a%b; while(c!=0) a=b; b=c; c=a%b; printf(T

19、he largest common divisor:%dn,b); printf(The least common multiple:%dn,m*n/b);while(b) c=a%b; a=b; b=c; b=a;例:有一头母牛每年年初生一头小母牛,每 头小母牛从第4个年头起,每年年初也生一 头小母牛。求在第20年时,共有多少头牛。 这是个“顺推顺推”问题。设:第n年时的母牛数为Xn,则: X12,X23,X34,X4X3+X1, X5X4+X2,可得到,当n4时有: XnXn-1 + Xn-3已知: X12,X23,X34main() int i, a, b, c, d; a=2; b;=3; c=4; /* 即 x1=2, x2=3, x3=4 */ for(i=4; i=20; i+) d=c+a; /* 即 xn=xn-1 + xn-3 */ a=b; b=c; c=d; printf(20 years of cow total amount is %dn, d);结果:20 years of cow total amount is 2745上机实验41. 计算在国民生产年增长率分别

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论