kj-第5章循环结构程序的设计ppt课件(全)_第1页
kj-第5章循环结构程序的设计ppt课件(全)_第2页
kj-第5章循环结构程序的设计ppt课件(全)_第3页
kj-第5章循环结构程序的设计ppt课件(全)_第4页
kj-第5章循环结构程序的设计ppt课件(全)_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 循环结构程序的设计本章概述 本章的学习目标主要内容1本章概述本章主要通过大量程序实例介绍while、do-while及for循环结构的使用方法本章还将介绍初学者编程难点之一的多重循环结构的使用方法在本章中还会介绍较多的程序算法2本章的学习目标本章教学目的:掌握几种循环语句(goto、while、do-while、for)的使用方法掌握break和continue语句的使用方法能使用嵌套方法编写程序。本章教学重点:掌握while、do-while、for循环语句本章教学难点:循环嵌套3主要内容5.1 while语句和do-while语句5.2 for语句5.3 嵌套循环结构5.4 bre

2、ak语句和continue语句5.5 goto语句和用goto语句构成的循环5.6 程序设计举例5.7 本章小结 4 5.1 while语句和do-while语句while语句用来实现“当型”循环结构,其一般形式如下: while(表达式) 循环体语句其执行过程是:计算表达式的值,若表达式为非0值时,执行while语句中的循环体语句,并再次计算表达式的值,此过程重复执行,一直到表达式的值为0,循环结束。5.1.1 while语句5例 5.1 求1+3+5+7+99的值# include int main() int i,n,sum=0; i=1; while(i=99) sum+=i; i+=

3、2; printf(sum=%dn,sum); return 0; 6对于while语句,有几点需要注意:(1)循环体若包含一个以上的语句,应该用花括弧括起来。若不加花括弧,则while循环体语句的范围只到while后面第一个分号处。(2)若表达式的值为0,循环体一次也不执行.(3)在循环体中一定要有使循环趋向于结束的语句,否则循环永不结束,形成死循环。75.1.2 do-while语句一般格式: do 循环体语句组; while(循环继续条件); /*分号不能缺省*/思考题:例题5.1用do-while语句如何来实现?8执行过程:(1)先执行循环体语句组。(2)计算“循环继续条件”表达式。若

4、“循环继续条件”表达式的值为非 0(真),则转向(1)继续执行;否则,转向(3)。(3)执行do-while的下一条语句。do-while循环语句最重要的特点是:先执行一次循环体语句组,然后再判断循环条件。9例5.2 从键盘输入若干个数求和,当和大于200时停止执行。# include int main()int x,sum=0; do scanf(%d,&x); sum+=x; while(sum=200); printf(sum=%dn,sum); return 0; 10本题思路:为了实现逆序输出一个正整数,需要把该数按逆序逐位拆开,然后输出。从一个数中分离一位数,可以对10求余.345

5、 num 345%10=5 digit345/10=34 num 34%10=4 digit34/10=3 num 3%10=3 digit3/10=0 num当num最后变成0时,处理过程结束。 赋值给例5.3 从键盘输入一个正整数,各位数码顺序颠倒输出。如输入345,输出543。 # include int main()int num,digit; printf(Input a number: ); scanf(%d,&num); do digit=num%10; printf(%d,digit); num/=10; while(num!=0); printf(n); return 0;

6、11 5.2 for语句1、一般格式:for(表达式1;表达式2;表达式3) 循环体语句组; (1)若表达式1存在,则先计算表达式l的值,然后转向步骤(2),若表达式1不存在,则直接进入步骤(2)。 (2)计算表达式2的值,若其值为真(值为非0),则执行for语句中指定的循环体语句,然后执行下面第(3)步。若为假(值为0)则结束循环,转到第(4)步。 (3)若表达式3存在,则计算表达式3的值,然后转向步骤(2),若表达式3不存在,则直接转向步骤(2)。 (4)循环结束,执行for语句下面的一个语句。 图5.3for语句流程图12 for语句是C语言中最灵活也是应用最广泛的循环结构,可以替代wh

7、ile和do-while语句思考题:例题5.1用for语句如何实现?例5.4输入一个110间的整数,用for语句求这个数的阶乘。main()int i,sum;for(sum=0,i=1;i=99;i=i+2) sum=sum+i;printf(“the num is %d”,sum);# include int main()int i,n; long s=1; scanf(%d,&n); for(i=1;i=n;i+) s*=i; printf(%d!=%ldn,n,s); return 0; 131、for后面括号里的3个表达式都可以省略,但其中的两个分号不能省略 for( ; ; ) p

8、rintf(“#”);2、若表达式1被省略,则应在for语句之前给循环变量赋初值。 i=1; sum=0; for(;i=10; i+) sum+=i;3、若表达式2被省略,即不判断循环条件,则循环无终止地进行下去。也就是认为表达式2始终为真4、若表达式3被省略,则程序设计者应另外设法保证循环能正常结束。 for语句需要注意的是:145、若省略表达式1和表达式3,只有表达式2,即只给循环条件,则在这种情况下,完全等同于while语句 i=1; sum=0; for(;i=10; ) sum+=i; i+; 6、若3个表达式都省略时,则无终止地循环7、表达式1可以是设置循环变量初值的赋值表达式,

9、也可以是与循环变量无关的其他表达式例如:for(sum=0,i=0;i=10;i+) sum+=i;8、表达式2可以是任何合法的C语言表达式 只要其值为非零,就执行循环体 15例5.5 输入一行字符并计算出字符个数 #includeint main() int n=0; printf(Input a string: ); for(; getchar()!=n; n+); printf(%dn,n); 程序中的循环条件为getchar()!=n,判断从键盘输入的字符是不是回车。165.3 嵌套循环结构 循环的嵌套是指一个循环体内又包含另一个完整的循环结构。内嵌的循环中还可以嵌套循环,这就是多层循

10、环。 while循环、dowhile循环和for循环不仅可以自身嵌套,而且可以互相嵌套 例5.6 在屏幕上输出如下的一张九九乘法表1*1=11*2=2 2*2=4 1*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*

11、9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 17 思路: 九九乘法表,共有9行;我们可以用一个循环变量i来依次表示第i(1 i 9)行; 对于第i行来说,它又有i个等式, 可以用一个循环变量j来依次表示第j(1 j i)个等式;第i行第j列的等式刚好是j和i相乘的式子。 # include int main()int i,j; for(i=1;i10;i+) for(j=1;j=i;j+) printf(%d*%d=%-3d,j,i,i*j); printf(n); return 0; 18例5.7 在计算机屏幕上输出

12、如下图形。 * * * *思路: 上述图形中,共有5行,可以通过循环依次输出每一行。 每一行中可分成两部分,前面由若干个空格组成,后面是由若干个星号组成。具体空格和星号由当前的行数来决定 。# include int main()int i,j,k,n=5; for(i=0;in;i+) for(j=0;jn-i;j+) printf( ); for(k=0;k=2*i;k+) printf(*); printf(n); return 0; 195.4 break语句和continue语句while(表达式) 语句块1 if(条件) break; 语句块2 1、break语句 break语句可

13、以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。 格式如下:20例5.8 输入一个正整数m,判断它是否为素数。思路:判断一个数m否为素数,需要检查该数m是否能被2 m-1之间的整数整除。数学上能证明,只需要检查该数m是否能被2 之间的整数整除即可 。设i取2, 上的整数,如果m不能被该区间上的任何一个数整除,即对每一个i,m%i都不为0,则m是素数;但是只要找到一个i,使m%i为0,则m肯定不是素数 。#includeint main()int i,m,k; printf(Input a number: ); scanf(%d,&m); k=sqrt(m); for(i=2

14、;i=k;i+) if(m%i=0) break; if(i=k) printf(%d is not a prime number.n,m); else printf(%d is a prime number.n,m); return 0; 212、continue语句格式如下:while(表达式) 语句块1 if(条件) continue; 语句块2 continue语句作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。思考题:continue语句和break语句的区别?22例5.9 输入100个整数,求其中正整数之和 思路:在输入了100个数以后,累加

15、之前判断该数是否是正数,若是则累加,否则则将该数忽略(即跳出本次循环)。# include int main()int i=0,n; long sum=0; while (i100) scanf(%d,&n); i+; if (n=0) continue; sum+=n; printf(sum=%ldn,sum);return 0; 235.5 goto语句和用goto语句构成循环C语言中,goto语句为无条件转向语句。一般形式为: goto 语句标号;功能:无条件使程序的流程从当前所在的位置,转向标号所指定的语句位置执行。使用goto语句,需要注意以下几点:(1)语句标号用标识符表示,它的命

16、名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。不能用整数来做标号。 例如:“ goto label_123;” 是合法的, 而 “ goto 123;” 是不合法的。(2) 在带标号的语句中,语句标号与语句之间用冒号作分隔。例如: label_123 : a=50;24goto语句与if语句一起构成循环结构,如下的例子即是二者组成的循环结构。例5.10 用if语句和goto语句构成循环,求1+2+3+n的值。# include int main() int i,n,sum=0; i=1; scanf(“%d”,&n); loop: if(i=n) sum+=i

17、; i+; goto loop; printf(sum=%dn,sum); return 0; goto语句可使程序的流程变的毫无规律、可读性差,在程序设计中尽量不用。255.6 程序设计举例例5.11 利用下面的格里高利公式求 的近似值,要求精确到最后一项的绝对值小于10-6为止。类似的,请考虑:计算1-1/2+1/3-1/4+.+1/99-1/100的值。# include # include int main()float i=1.0;int k=1; double t=1.0,pi=0; do pi=pi+t; i+=2; k=-k; t=k/i; while(fabs(t)=1e-6

18、); pi*=4; printf(pi=%fn,pi); return 0; 程序运行结果:pi=3.141691 这是一个求累加和的问题,通过循环,把第i项加到pi中。第i项用变量t表示,在每次循环中其值都会改变。要注意每一项的构成,如分母、分子以及符号等。 具体程序如右面所示:26例5.12 古代某工地需要搬砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。问用45人正好搬45块砖,有多少种搬法。 思路: 这是一个组合问题,由3个因数决定组合的数量(即搬法的种数):男人、女人和小孩的人数,人数的取值范围为045,各类人数的取值与其他类人数的取值无关,但最后加起来正好45人。因此对于

19、每类人数的取值都要反复地试,最后确定正好满足45人搬45块砖的组合。 27# include int main()int men,women,child; for(men=0;men=45;men+) for(women=0;women=45;women+) for(child=0;child=45;child+) if(men+women+child=45 & men*3+women*2+child*0.5=45) printf(men=%d women=%d child=%dn, men,women,child); return 0; 程序运行结果:men=0 women=15 child

20、=30men=3 women=10 child=32men=6 women=5 child=34men=9 women=0 child=3628改进后的程序如下:# include int main()int men,women,child; for(men=0;men=15;men+) for(women=0;women=22;women+) child=45-men-women; if(men*3+women*2+child*0.5=45) printf(men=%d women=%d child=%dn, men,women,child); return 0; 上述程序有一些值得改进的地方。由于最多只有45块砖,男人的数量不会超过15人,女人的数量不会超过22人,而且男人和女人的数量确定下来后,小孩的数量是: 小孩数=45-男人数-女人数29例5.13 输入两个正整数m和n,求它们的最大公约数和最小公倍数。 分析:我们考虑所有可能的情况,包括这两个数互质(公约数是1)情况。若k是m和n的公约数,则k的值可能是1(两个数互质)、可能是2、可能是3、可能q(q是m和n中的最小数),所以我们可以使用循环方法

温馨提示

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

评论

0/150

提交评论