《循环结构程序设计》PPT课件.ppt_第1页
《循环结构程序设计》PPT课件.ppt_第2页
《循环结构程序设计》PPT课件.ppt_第3页
《循环结构程序设计》PPT课件.ppt_第4页
《循环结构程序设计》PPT课件.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第五章 循环结构程序设计,主讲:田志刚 联系电话5.1循环的概念,计算机解题过程中,经常遇到要编制循环结构,即大量问题均 离不开循环结构,(有人说:没有循环结构等于没有计算机) 如求: 1+2+3+.+100 求: sinx=x-x3/3!+x5/5!-x7/7!+ 几乎所有数学函数均需展开成多项式,求其近似值,均离不开循环结构.,循环结构,5.2循环结构的实现,5.2.1 while 语句构成当型循环 格式: while (表达式) 语句 例 求1+2+3+-+100的值(教材例子5.1) #include void main ( ) int i=1, sum=0; /* 准备部分 */ while (i =100) /* 控制部分 */ sum=sum+ i; /* 工作部分 */ i=i+1; /* 修改部分 */ printf (“sum = %d n“, sum); printf (“i = %d n“, i );/退出循环时候i的数值 ,5.2.1 do while 语句构成直到型循环 格式: do 语句 while (表达式) 例 求1+2+3+-+100的值(教材例子5.1) #include void main ( ) int i=1, sum=0; /* 准备部分 */ do sum=sum+ i; /* 工作部分 */ i=i+1; /* 修改部分 */ while (i=100); /* 控制部分 */ printf (“sum = %d n“, sum); printf (“i = %d n“, i );/退出循环时候i的数值 ,while 与 do while区别,void main() void main() int sum=0, i; int sum=0,i; scanf(“%d“, 而右边程序执行一次,循环语句注意事项,循环体如果包括一个以上的语句需要加 循环体中应该有可以使循环趋于结束的语句 注意初始条件的值 循环可以提前预知循环次数(例5.1、5.2),有时也无法判断循环次数(例5.4、5.5),需要选取好控制部分。,例:用 0.1mm 厚纸对折, 问对折多少次后, 其厚度超过地球直径 (12742公里),#include void main () int n=1; float ans ; /* n 对折次数,ans ans = 1e-7; 存放对折后的厚度 */ while(ans =12742) n=n+1; ans=ans*2; printf (“n=%d, ans=%f n“, n, ans); 运行结果:n=37,ans=13743.895347,例:计算T=1+1/2+1/3+1/n(教材5.6),#include void main () float t=0,a;int i=1,n ; scanf(“%d“, ,逗号运算符及其表达式,逗号运算符: , 逗号表达式格式: , 计算逗号表达式值是按自左至右的顺序, 先计算的值, 再计算的值,.而逗号表达式值是最后一个的值. 示例: a=1,b=2,c=3,d=a+b 表达式值为3,关于逗号表达式的说明,1.其优先级最低,结合性是自左至右 2.注意逗号表达式构成的语句和非逗号表达式构成的语句区别。 a=1;b=2;和a=1,b=2; 3.,#include void main ( ) int a, b, c, d; a=(c=100, d=200, c+d);/注意有无括号的区别 b=(c=d=0, c+50); /注意有无括号的区别 printf(“ %d, %d, %d, %dn “ , a, b, c, d); 运行结果: 300, 50, 0, 0,for语句构成循环,格式: for (; ; ) 语句 表达式1称为初值表达式 表达式2称为控制表达式 表达式3称为步增表达式 - 均是C的任何一种表达式,利用for语句改写例5.1(1),#include void main ( ) int I, sum=0; for (i=1; i = 100; i+) sum += i; printf (“sum=%dn“, sum); 运行结果: sum=5050,利用for语句改写例5.1(2),#include void main ( ) int i, sum; for (i=1, sum=0; i=100; i+) sum+= i; printf(“sum=%dn“, sum); ,利用for语句改写例5.1(3),#include void main ( ) int i, sum; for (i=1, sum=0; i = 100; sum+=i, i+); printf(“sum=%dn“, sum); ,关于for语句说明,1.for语句使用灵活是功能最为强大的循环语句。它可以构成当型或直到型循环。 2.for语句中任何一个表达式均可省略。 3.例如上例省略表达式1 i=1, sum=0; for (; i = 100; sum+=i, i+); 4.例如上例省略表达式3 for (i=1, sum=0; i = 100;) sum+=i, i+;,关于for语句说明,4. 省略表达式2 for (i=1;i+) 等价于 for (i=1;1;i+) 构成一个判断条件永远为真的循环,这样的循环是不会结束的,称为死循环,为了防止死循环的发生,要采用别的方式退出循环。 5.for的后面循环体语句可有可无, 可以是一个语句;可以是 多个语句,但要用 括起来。 6.for中表达式都可以省略,但括号以及分号不可以省略。,5.3循环的嵌套,在一个循环结构中的循环体中又出现了另外一个循环结构,称之为循环的嵌套。 while ()/外循环 . for ( ; ; )/内循环 ,内、外层循环可由任何循环语句构成,for ( ; ; ) do while ( ) for(;) while() 循环只可以嵌套不可以交叉。,例:打印输出九九乘法表(教材例5.8),#include void main ( ) int i,j; for( i=1; i=9; i+) for( j=1; j=9; j+) printf(“%d * %d = %d “, i, j, i*j ); printf(“n“); ,例求1!+3!+5!+7! 教材例5.9,#include void main ( ) int jc,k,m; float sum=0.0; for(m=1;m=7;m=m+2) jc=1; for(k=1;k=m;k+) jc=jc*k; sum=sum+jc; printf(“sum=%fn“,sum); ,例求1!+3!+5!+7!(改写),#include void main ( ) int jc,k,m; float sum=0.0; jc=1; for(m=1;m=7;m=m+2) sum=sum+jc; jc=jc*(m+1)*(m+2); printf(“sum=%fn“,sum); ,5.4break和continue,break-退出switch语句或循环(提供一种非正常出口) continue-提早结束本次循环,而不是终止循环. while(表达式1) if (表达式2) continue; if (表达式3) break; ,break和continue示例,#include void main() int k,sum=0; for(k=1;k200) break; printf(“sum=%d“,sum); ,break和continue示例,void main( ) int i; for(i=1;i6;i+) if ( i%21) printf(“#“); continue; printf(“*“); ,循环综合示例(求解两个数字的最大公约数和最小公倍数),#include void main() int a,b,c,m,n; scanf(“%d%d“, ,求:A,B , 使 AB-BA=45 成立,#include void 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); ,例:判断数字是否为素数,判断数字m为质数方法: m 除以 2m-1 (按定义), 之间每个整数都除不尽 m 除以 2 m/2, 之间每个整数都除不尽 m 除以 2 m的平方根, 之间每个整数都除不尽,#include #inclue void main( ) int i, j, m, c=0; for ( i=3; i= m+1) printf(“%d “ , i); c=c+1; printf(“n c=%d n“, c); ,例:输出斐波那契数列前40项 F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2),#include void main( ) long int f1=1, f2=1,f3;int i=3; printf(“%10ldn“,f1); printf(“%10ldn“,f2); while ( i =40) f3=f1+f2; printf (“%10ld n“,f3);i+; f1=f2; f2=f3; ,例:输出斐波那契数列前40项 F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2),#include void main( ) long int f1=1, f2=1; int i=1; while ( i =20) printf (“%10ld %10ld n“, f1, f2); f1=f1+f2; f2=f1+f2; i=i+1; ,例.教材习题5.7,#include void 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*k*k ) printf(“%d “, n); printf (“ n“); ,求定积分 不是用解析法求准确值,而是用近似法(等效矩形法、等效梯形法、辛普生公式(Sipson),# include #include void main( ) int i,n; double a, b, h, s=0, f, x; scanf(“%lf,%lf,%d“, ,等效梯形法:,# include #include void main( ) int i,n; double a, b, h, s, f; scanf (“%lf,%lf,%d“, ,方程求根:当无法用解析法, 只可用近似法, 求根的近似值 f(x)=x3-x-1 在区间(1, 1.5)内有实根 精确到 10-5,# include #include void main ( ) double a=1, b=1.5, x0, y, y0; while (abs(a - b) 1e-5) x0=(a+b)/2; y=a*a*a - a - 1; y0=x0*x0*x0 - x0 - 1; if (y*y0 0) a=x0; else b=x0; pr

温馨提示

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

评论

0/150

提交评论