循环就是重复,是在满足一定条件时重复执行一段程序.本章目标_第1页
循环就是重复,是在满足一定条件时重复执行一段程序.本章目标_第2页
循环就是重复,是在满足一定条件时重复执行一段程序.本章目标_第3页
循环就是重复,是在满足一定条件时重复执行一段程序.本章目标_第4页
循环就是重复,是在满足一定条件时重复执行一段程序.本章目标_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、 循环就是重复,是在满足一定条件时重复执行一段程序。本章目标:1. 掌握3种循环结构的使用2. Break语句和continue语句第5章 循环结构程序设计魏东平25.1 用while语句构成的循环结构表达式语句真(非0)下一语句假(0)while (表达式) 循环体用 while 语句实现当型循环表达式语句N - S 图While语句的一般形式:#include void main ( ) int i, s ;s = 0; i = 1;while ( i = 100 ) s = s + i;i+;printf ( s =%dn, s); printf ( “i =%dn, i);s = 0,

2、 k = 1 k = 100 s = s + kk +输出 s【例5.0】计算 s =100100i=1i魏东平4【例5-1】求 s = nk=1k2#include main ( ) int i,s;i=0;s=0;while(s10000) s+=i*i; /*累加i的平方*/ i+; printf ( “n=% dn sum=%d,i-1, s);累加的和小于10000的最后一项n是多少?魏东平5【5-2】 用公式计算的近似值,直到最后一项的绝对值小于 10-6 为止。 1 1 1 = 1 - + - + 4 3 5 7算法一:用累加公式 ( -1 ) n+1 s = n = 1 2n

3、- 1魏东平6/*例5-2程序*/#include #include void main ( ) int s; float n, t, pi;t=1;pi=0;n=1.0;s=1;while( fabs (t) = 1e-6 ) pi=pi+t; n = n + 2;s = - s;t = s/n;printf (=%.6fn, 4 * pi);t=1;pi=0;n=1.0;s=1;| t |10 -6pi=pi+t;n = n + 2;s = - s;t=s/npi = 4 * pi输出 pi魏东平7【例5-3】用迭代法求方程x=cos x 的根#include #includemain (

4、 ) double x1,x2;x1=0.0; x2=cos(x1);while(fabs(x2-x1)1e-6) x1=x2; x2=cox(x1); printf ( “x=%fn,x2);魏东平85.3 do-while语句构成的循环结构do 循环体语句while ( 表达式 ) ;语句表达式do-while 语句用来实现直到型循环语句表达式下一语句真假不可省略不可省略!s = 0, k = 1 s = s + kk+ k = 100输出 s【例】使用Dowhile语句计算 s =100i=1i#include void main ( ) int s = 0; i = 1;do s =

5、s + i;i+; while ( i= 100);printf ( s =% dn, s);魏东平10【例5-4】计算Fibonacci数列: f0=0,f1=1,f2=1,f3=2,fn=fn-2+fn-1#include void main ( ) int f1=0,f2=1,f;do f =f1+f2;f1=f2;f2=f; while ( f2= 1000);printf ( “F =% dn,f2);魏东平11比较while 与Dowhile、for(表达式1,表达式2,表达式3)#include main ( )int sum=0,i;scanf(“%d”,&i);whi

6、le(i=10)sum = sum + i;i+;printf ( sum =% dn, sum);#include main ( )int sum=0,i;scanf(“%d”,&i);dosum = sum + i;i+; while ( i = 10);printf ( sum =% dn, sum);For 循环可以在表达式3中包含趋于结束的语句。魏东平125.3 用for 语句构成的循环结构初值表达式1表达式2语 句求解表达式3真假下一语句C 表达式1在进入循环之前求解C 表达式3是循环体的一部分5.3.1 for 循环的一般形式: for ( 表达式1; 表达式2; 表达式

7、3 ) 循环体;5.3.2 执行过程 见右图 Eg: for(int i=1;i=10;i+) printf(“*”);魏东平13【例5-5】计算 s =100n=1n#include main ( ) int s, n;s=0;for(n=1;n=100;n+ ) s=s+n; /*累加*/ printf ( s=% dn, s);魏东平14【例5-6】计算半径为0.5、1.0、1.5、2.0、2.5时的面积。(使用循环语句)#include void main ( ) double r,s,pi=3.1416;for(r=0.5;r=2.5;r+=0.5) s=pi*r*r; printf

8、 ( “r =%3.1f s=%fn,r,s); 魏东平155.4 循环的嵌套 一个循环体内包含着另一个完整的循环结构,称为循环嵌套,内嵌的循环中又可以嵌套循环,从而构成多重循环.三种循环都可以互相嵌套几种嵌套形式:(1)while 嵌套 whilewhile ( ) .while ( ) (2) do-while 嵌套 do-whiledo do while( ); while( );(3) for 嵌套 forfor ( ; ; ) for ( ; ; ) (4) while 嵌套 do-whilewhile ( ) do while ( );(5) for 嵌套 while for (;

9、 ; ) while ( ) (6) do-while 嵌套 fordo for ( ; ; ) while ( );魏东平17【例5-7】使用双层for循环打印图形#include void main ( ) int k,i,j;for(i=0;i9;i+) for(j=0;j10;j+) printf ( “*“); printf(“n”); * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *魏东平18【例5.8】 求2100之间的全部素数。分析:判断m是否为

10、素数(例5.6)#include #include void main ( ) int m, i, k;printf (输入一个整数:);scanf (%d, &m);k = sqrt ( m );for ( i = 2; i k ) printf (%d是素数n, m );else printf (%d不是素数n, m); for ( m = 2; m k ) printf (%6d, m );魏东平19【补充例5-8-a】 判断整数 m 是否为素数。分析:素数m是不能被整数 r ( 1rm )整除的数,让m被2 k = m 除,如果有任意一个整数整除,则结束循环,否则i递增继续循环

11、,最后输出素数。输入 mk = sqrt ( m )i = 2i = k + 1是 否m是素数 m不是素数魏东平20/*例5-8-a程序*/#include #include void main ( ) int m, i, k;printf (输入一个整数:);scanf (%d, &m);k = sqrt ( m );for ( i = 2; i k ) printf (%d是素数n, m );else printf (%d不是素数n, m ); 结束循环break 总是与 if 一起使用魏东平21/*5-8 b 完整程序*/#include #include void main (

12、 ) int m, i, k, n = 0;for ( m = 101; m 200; m =m + 2 ) if ( n % 10 = 0 ) printf (n);k = sqrt ( m );for (i = 2; i k ) printf (%6d, m);n+; 5.5.1 break 语句: 跳出switch语句或本层循环5.5 break语句和continue语句在循环体中应用/*例5-5-a: break在For语句中 */main() int n,x,s=0;for(n=0;n10;n+) scanf(%d,&x);s+=x; printf(%dn,s);例5-5-b

13、: break在while语句中 n=0;s=0; while(n 10) scanf(“%d”,&x); if(x0) break;s+=x;n+;例5-5-c: break在dowhile中 n=0;s=0; do scanf(“%d”,&x); if(x0) break;s+=x;n+;while(n10);从键盘输入10个整数,求和,如果输入的整数0,则结束循环。魏东平23用 continue 语句结束本次循环,即忽略循环体中剩余的语句开始下一次循环例5-6-afor ( n =0; n 10; n+) scanf(“%d”,&x);if(x0) continu

14、e; s+=x;5.5.2 continue 语句例5-6-bint x,n=0,s=0;while ( n 10) scanf(“%d”,&x); if(x0) continue;s+=x; n+例5-6-cint x,n=0,s=0; do scanf(“%d”,&x); if(x0) continue;s+=x; n+while (n10);魏东平24Break 与continue的区别:/*补充例:把100200之间不能被3整除的数输出*/#include #include void main ( ) int n = 0;for ( n = 100; n = 200;n

15、 + ) if ( n % 3 = 0 ) continue;printf (%d,n); 魏东平25【补充】 求任意两个正整数 m 和 n 的最大公约数 和最小公倍数1. 用辗转相除法求最大公约数m 对 n 求余数为 a,若 a0,则 m n,n a,继续求余;否则 n 为最大公约数例如,设 m=12, n=21,计算过程如下: 计算次数 被除数 除数 余数1 12 21122211293129349303魏东平262. 最小公倍数=即 mn / n 两个数的积最大公约数为什么是 n ?输入 m, nm1=m, n1=n, a=m1% n1a0m1=n1n1=aa = m1% n1输出n1 及 mn/n1魏东平27#include void main ( ) int m,

温馨提示

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

评论

0/150

提交评论