C语言教程第5章_循环结构程序设计.ppt_第1页
C语言教程第5章_循环结构程序设计.ppt_第2页
C语言教程第5章_循环结构程序设计.ppt_第3页
C语言教程第5章_循环结构程序设计.ppt_第4页
C语言教程第5章_循环结构程序设计.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 循环结构程序设计,概述 计算机解题过程中,经常遇到要编制循环结构的情况, 大量问题均离不开循环结构 如求: 1+2+3+.+100 sinx = x -,x3 x5 x7,3!,5!,7!,+ ,准备部分,工作部分,控制部分,准备部分,控制部分,工作部分,修改部分,出循环,出循环,N,Y,N,修改部分,Y,两种循环结构:,左边是先执行后判断 右边是先判断后执行,循环语句 while 语句 格式: while (表达式) 语句 功能: 当表达式为非0值时,执行while语句中的内嵌语句。其特点是: 先判断表达式,后执行语句。,表达式值非 0,语句,编程: 求1+2+3+100的值 mai

2、n() int i=1, sum=0; /* 准备部分 */ while (i =100) /* 控制部分 */ sum=sum+ i; /* 工作部分 */ i=i+1; /* 修改部分 */ printf (sum = %d n, sum); printf (i = %d n, i ); ,说明: 1) 循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。 2) 在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。即形成了死循环。,do while 语句 格式: do 语句 while (表达式 ) ; 功能:先执行一次指定的循环体语句,

3、然后判别表达式,当表达式的值为非零时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。,表达式值不为0,语句,main( ) int i=1, sum=0; do sum=sum+i; i=i+1; while (i=100); printf(sum=%dn, sum); printf(i=%dn, i); ,while语句和do-while语句的比较: 在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。,while 与 do

4、 while区别 i10 时不同,main() int sum=0, i; scanf(%d, ,main() int sum=0,i; scanf(%d, ,main() int c; while(c=getchar()!=n) putchar(c); ,将输入的字符原样输出,main() int c; c=getchar(); while(c!=n) putchar(c); c=getchar(); ,例:用 0.1mm 厚纸对折, 对折多少次后其厚度超过地球直径 (12742公里) main() int n=1; float ans ; ans=2*1e-7; while(ans=127

5、42) n=n+1; ans=ans*2; printf(n=%d, ans=%f n, n, ans); getch(); ,运行结果: n=37,ans=13743.895347,求:框里数字(19):111111=111*11* 1,运行结果: i=9,main() long int i=1, ans; ans=111*11*(i*10+1); while(111111 != ans) i+; ans=111*11*(i*10+1); printf(i=%dn, i) ; ,main() long int i=1, ans; do ans=111*11*(i*10+1); i+; whi

6、le(111111 != ans); printf(i=%dn, i-1); ,运行结果: i =9,设有一阶梯,每步阶,最后余阶;每步阶,最后余阶;每步阶,最后余阶;每步阶,最后余阶;每步阶,正好到楼顶。问共有多少阶梯。,main( ) int ladders=7; while (ladders%3!=2 | ladders%5!=4 | ladders%6!=5) ladders+=14; printf(%dn, ladders); ,求两个非负整数u和v 的最大公因子(即最大公约数)。,main() int a,b,i; printf(please enter 2 integers:);

7、 scanf(%d,%d, ,for语句 格式: for (; ; ) 语句,C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。,表达式1,表达式2值非0?,语句,表达式3,Y,下一语句,N,等价于: 表达式1; while (表达式2) 语句; 表达式3; ,for语句最简单最常用的应用形式: for (循环变量赋初值;循环条件;循环变量增值) 如: for(i=1;i=100;i+) sum=sum+i; 相当于: i=1; while (i=100) sum=sum+i; i+; ,f

8、or语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如: for(; i=100; i+) sum=sum+i; 执行时,跳过“表达式1” ,其他不变。,若省略表达式2,即不判断循环条件,即认为表达式2始终为真。如: for(i=1; ;i+) sum=sum+i; 相当于: i=1; while(1) sum=sum+1; i+; ,为避免死循环,应加上 if (i100) break;,表达式3也可以省略,但此时应保证循环能正常结束。如: for (i=1;i=100;) sum=sum+i; i+; 此时由于省略表达

9、式3,而将语句i+; 作为循环体的一部分,效果是一样的,都能使循环正常结束。,可以同时省略表达式1和表达式3,只有表达式2,即只给循环条件。如: for(;i=100;) while(i=100) sum=sum+i; sum=sum+i; i+; i+; 在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。,也可以将3个表达式都省略,如: for(; ;) 语句 相当于 while(1) 语句 即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。此时应在循环体中设置退出循环的语句。,表达式1可以是

10、设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如: for (sum=0;i=100;i+) sum=sum+i; 表达式3也可以是与循环控制无关的任意表达式。如: for (sum=0;i=100;sum+) i+;,表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如: for (sum=0,i=1; i=100; i+) sum=sum+i; 或 for (i=0,j=100; i=j; i+,j-) k=i+j;,表达式2一般是关系表达式(如i=100)或逻辑表达式(如ab 在表达式2中先从终端接收一个字符赋给

11、c,然后判断此字符是否非n,如果非n,就执行循环体。此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中。,for( ;(c=getchar()!=n;) printf(“%c”,c); for语句中只有表达式2,而无表达式1和表达式3。其作用是读入一个字符后即输出该字符,直到输入一个“换行”为止。,运行情况: ComputerComputer,请注意,从终端键盘向计算机输入时,是在按Enter键以后才将一批输入数据一起送到内存缓冲区中去的。,main() int i=1, sum=0; for (; i=100; i+) sum += i; printf(sum=%dn,

12、 sum); 省略表达式1,求: 1 + 2 + 3 + + 100的值,main ( ) int i, sum; for (i=1, sum=0; i=100; i+) sum+= i; printf(sum=%dn, sum); main() int i, sum; for (i=1, sum=0; i=100; sum+=i, i+); printf(sum=%dn, sum); ,使用逗号表达式,验证素数 int prime(int n) int m; for (m=2;m=n/2;m+) if (n%m=0) return(0); return(1); main() int i; s

13、canf(%d, ,说明 1. 用计数法设置循环时,要特别留心循环变量的“边界值”。 2. 要使循环体最终能结束,应当在表达式3中或在循环体中存在改变条件表达式的值的操作。 3. 循环体内如果包含一个以上的语句,应该使用花括号,以复合语句形式出现。,break和continue break-退出switch语句或当前循环 continue-结束本次循环,接着进行下一次是否执行循环的判定. while(表达式1) if (表达式2) continue; if (表达式3) break; ,计算100以内的圆面积 main() int r; float pi=3.14159,area; for(r

14、=1;r100) break; printf(r=%d, area=%fn, r, area); ,输出100200之间不能被3整除的数。 main() int n; for (n=100;n=200;n+) if (n%3=0)continue; printf(%d ,n); ,多重循环 一个循环体内又包含另一个完整的循环结构称为循环的嵌套,即多重循环。 三种循环结构(while循环、do-while循环和for循环)可以互相嵌套。 注意: 结构之间仅可嵌套, 不可交叉,不允许:,允许:,例: 编程并输出乘法表 main() int i,j; for(i=0; i=9; i+) for(j=

15、1; j=9; j+) printf(%d*%d=%2d , i, j, i*j ); if (j=9) printf(n); ,运行结果: 1*1= 1 1*2= 2 1*9= 9 9*1= 9 2*9=18 9*9=81,打印乘法表 1 2 3 4 5 6 7 8 9 - 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49

16、 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 1: 打印表头 2: 打印隔线 3: 打印表体,main( ) int i, j; for (i=1;i=9; i+) printf(%4d,i); printf(n); for (i=1;i=40;i+) printf(%c,-); printf(n); for (i=1; i=9;i+) for (j=1;j=9;j+) printf(%4d, i*j); printf(n); ,打印隔线,打印表体,打印表头,36块砖,36人搬;男4,女3,两个小孩抬一块。求一次搬完,需男

17、、女、小孩个若干? main() int men=0,women,children; while(men=8) women=0; while (women=11) children=36-women-men; if (4.0*men+3.0*women+children/2=36) printf(nmen is %d,men); printf(t women is %d, women); printf(t children is %dn, children); women+; men+; ,例: 键入1个正整数, 求这个数的阶乘 main ( ) int num, i1; long int t

18、; scanf(%d, ,运行结果: 3 ans=9,for (t=1; i1=1; i1=num;) t=t*i1; i1+; ,t=1; i1=1; do t=t*i1; i1+; while (i=num);,例: 求A, B, 使 AB-BA=45 成立 main() int a, b, k, ans=45; for (a=1; a10; a+) for (b=0; b10; b+) k=(10*a+b)-(b*10+a); if (k=ans) printf(a=%d, b=%d n, a, b); ,穷举法,例: 求 A,B,C, 使 ABC+BCC=532 成立 main() i

19、nt a, b, c, k, ans=532; for (a=0; a10; a+) for (b=0; b10; b+) for (c=0; c10; c+) k=(100*a+10*b+c)+(b*100+c*10+c); if (k=ans) printf(a=%d,b=%d,c=%dn,a,b,c); ,穷举法,例.编程产生 main() int i, j; for (i=2; i5; i+) for (j=2; j5; j+) printf(%2d , i*j); if (j=5) printf(n); ,4 6 8 6 9 12 8 12 16,计算水仙花数 (如:153=1*1*1+5*5*5+3*3*3) main() int i, j, k, n; for (n=100; n1000; n+) i=n/100; j=n/10 - i*10; k=n%10; if (i*100+j*10+k=i*i*i+j*j*j+k

温馨提示

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

最新文档

评论

0/150

提交评论