c语言循环课件_第1页
c语言循环课件_第2页
c语言循环课件_第3页
c语言循环课件_第4页
c语言循环课件_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、第六章 循环控制6. 1 概述概述6. 2 goto语句以及用语句以及用goto语句构成循环语句构成循环6. 3 while语句语句6. 4 do - while语句语句6. 5 for语句语句6. 6 循环的嵌套循环的嵌套6. 1 概述概述C语言描述循环结构的方法:1)goto语句与if语句配合(可构成当型、直到型)2)while语句 (当型循环)3)do while语句 (直到型循环)4)for语句 (当型循环)6. 3 while语句语句一般形式:一般形式:while (while (表达式表达式) )语句语句其中: 表达式表示循环条件;可是任何表达式。 内嵌语句为循环体;是一条语句。执

2、行流程: 首先求解表达式并进行逻辑判断,为真执行内嵌语句;再次求解表达式并判断,为真再次执行内嵌语句;当表达式值为假时,退出while循环。例:求例:求#include stdio.hint main( ) int i=1, sum=0; while(i=100) sum=sum+i; i=i+1 ; printf(%dn, sum); return 0; 1001nnsum+=i; i+ ;易错点:易错点:累加变量累加变量在循环体外初值在循环体外初值使用说明:1)循环变量应该在循环体外初值;2)在while的循环体中一定要有改变循环变量的值以使循环条件为假的语句,否则将形成死循环;1)循环变

3、量、累加变量、累乘变量都)循环变量、累加变量、累乘变量都要在循环体外初值;要在循环体外初值;2)在循环体中要有改变循环变量的值)在循环体中要有改变循环变量的值的语句。的语句。例:累加例:累加求求:1+22+32+102 的值的值#include stdio.hint main()int i=1,sum=0;while(i11)printf(%d,sum); return 0;sum=sum+i*i; i+;求:求:4i1000的的i的最大值的最大值#include stdio.hint main()int i=0,p=1;while(p1000) i+; p=p*4;printf(%d,i-1

4、); return 0; 6. 4 do - while语句语句一般形式: do 语句 while (表达式) ;其中:其中: 表达式表示了循环条件,可以是任何表达式。 内嵌语句为循环体;单条、复合。执行流程:执行流程: 首先执行内嵌语句,之后求解表达式并对其值进逻辑判断,为真再次执行内嵌语句,如此反复,直到表达式的值为假退出 do - while循环。例:求例:求5! #include stdio.hint main( ) int i, p; i=1, p=1; do p=p*i; i+ ; while(i=1e-6pi=pi+t计算下一项tpi=pi*4输出pi#include math.

5、hint main( ) int s; float n, t, pi; n=1.0; s=1; t=1.; pi=0; /*判断某项*/ pi=pi+t; /*累加*/ n=n+2.0; /*求下一项*/ s=-s; t=s/n; printf(PI=%10.6fn, pi*4);return 0;直到某项的绝对值直到某项的绝对值小于小于10-6为止。为止。while(fabs(t)=1e-6)6. 5 for语句语句一般形式:一般形式:for (表达式1; 表达式2; 表达式3) 语句其中:其中: 内嵌语句为循环体;可以是单条、复合; 表达式13可是任何形式的表达式; 循环类型:当型例:例:

6、求任意求任意1010个三角形的面积个三角形的面积. .lint main( )l float a,b,c,s,area; l printf(Enter a, b, c:); l scanf(%f,%f,%f, &a, &b, &c);l if(a+bc & a+cb & b+ca)l s=(a+b+c)/2.0;l area=sqrt(s*(s-a)*(s-b)*(s-c);l printf(area=%-8.3fn, area); l else printf(DATA ERROR!n);lreturn 0;l int main( ) float a,b

7、,c,s,area; int i; for(i=1;ic & a+cb & b+ca) s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%-8.3fn, area); else printf(DATA ERROR!n); return 0;6. 8 break语句和语句和continue语句语句 (循环的附加控制)(循环的附加控制)1. break语句语句一般形式:一般形式: break;break;常用形式常用形式: : if(if(表达式表达式) break;) break;功能:功能:以if(if(表达式

8、表达式) break;) break;的的形式放在 whilewhile、do- do- whilewhile、forfor语句的循环体中语句的循环体中, ,用于跳出(结束)循环语句. 以break; break; 的的形式放在switch语句中语句中, , 用于跳出(结束)switchswitch构成的多路分支结构。例:判断例:判断m m是否素数是否素数素数:除素数:除1和它本身之外再无别的约数;和它本身之外再无别的约数;m算法:判断算法:判断m%i=0成立否?成立否? i取值取值: 2(m-1) 或:或:2#include math.h int main( ) int m, i, k; p

9、rintf(Enter m: ); scanf(%d,&m); k=sqrt(m);for(i=2; i=k; i+) if(m%i=0) break;if(i=k+1)printf(%d is a prime number.n, m);else printf(%d is not prime number.n, m);return 0;2. continue语句语句 一般形式:一般形式: continue;continue;常用形式:常用形式: if (e) continue;if (e) continue;功能:功能:用于用于whilewhile、do-whiledo-while、f

10、orfor的循环体中,的循环体中, 跳过跳过本次循环体本次循环体后面尚未执行后面尚未执行的语句的语句,继续循环流,继续循环流程的下一步。程的下一步。例:例: 例:例:for中用中用 continue while中用中用continue for(e1; e2; e3 ) while( e1 ) if (e) continue; if(e) continue; do-while中用中用continue do if (e) continue; while( e1 ) 读下列程序:读下列程序:#include stdio.hInt main( ) int n; printf(n); for(n=100

11、; n=200; n+)例:把例:把100_200之间之间不能不能被被3整除的数输出整除的数输出.改写改写 if(n%3=0) continue; printf(%5d, n); return 0;枚举(穷举)算法:枚举(穷举)算法:采用枚举算法求解问题的基本思路为:采用枚举算法求解问题的基本思路为:(1)确定)确定枚举对象枚举对象,枚举范围枚举范围和和判定条件判定条件;(2)一一枚举该范围的对象,验证是否为问题的解。)一一枚举该范围的对象,验证是否为问题的解。枚举算法的实现:用循环语句从可能的集合中一一枚举各枚举算法的实现:用循环语句从可能的集合中一一枚举各个元素;在循环体中用选择语句判定哪

12、些是所求的解。个元素;在循环体中用选择语句判定哪些是所求的解。其基本格式如下:其基本格式如下:ForFor(循环变量(循环变量x x取所有可能的值)取所有可能的值) if( if(满足指定的条件)满足指定的条件) 处理语句处理语句 6. 6 循环的嵌套循环的嵌套 一个循环体内又包含一个完整的循环语句,称一个循环体内又包含一个完整的循环语句,称为循环的嵌套。为循环的嵌套。 C C四种形式的循环可以互相嵌套,但绝不能出现四种形式的循环可以互相嵌套,但绝不能出现交叉现象。交叉现象。正确的循环嵌套形式:正确的循环嵌套形式: 外循环体外循环体 内循环内循环 外循环体外循环体 内循环内循环1 内循环内循环

13、2三重循环三重循环分辨循环语句之间的关系分辨循环语句之间的关系for(.).for(.).内循环内循环外循环外循环for(.).for(.). 并列循环并列循环嵌套循环嵌套循环交叉循环交叉循环for(.).for(.) . 错误错误例:do-while嵌套 例:do-while、for混合嵌套 do do do for(e1;e2;e3) while(e1); while(e); while(e); l 1 #include l 2 int main()l 3 l 4 int i,m;l 5 scanf(%d,&m);l 7 for (i=2 ; i=m-1 ; i+)l 8 if (

14、m % i=0) break;l 9 if (i=m) printf(Yesn);l 10 else printf(Non);l 11 return 0;l 12 判断一个整数为素数判断一个整数为素数例:求100 200之间的全部素数。算法:枚举100 200之间的素数。 #include int main() int i,m;for(m=101; m200; m=m+2)for (i=2 ; i=m-1 ; i+) if (m % i=0) break; if (i=m) printf(Yesn); else printf(Non); return 0; 例:某学院一年级共10个小班,求每一

15、个班英语课的平均成绩。 #includestdio.hInt main()float sum,mark,aver;int i,num,j;for(j=1;j=10;j+) sum=0; printf(input class %d num,j); scanf(%d,&num); /*输入人数*/ for(i=1; i=num; i+) /*循环次数明确*/ scanf(%f, &mark); sum=sum+mark; aver=sum/num;printf(class %d aver mark is %.2fn,j,aver);return 0;【例3.14】 百钱买百鸡问题:

16、有人有一百块钱,打算买一百只鸡。公鸡一只5元,母鸡一只3元,小鸡3只1元,求应各买多少? 枚举对象及范围:三种鸡的个数(设为x、y、z)。判定条件:三种鸡的总数(x+y+z)=100和买鸡用的钱的总数(5x+3y+z/3)=100。 1 #include 2 int main() 3 4 int x,y,z; 5 for (x=0; x=20; x+) 6 for (y=0; y=33; y+) 7 for (z=0; z=100; z+) 8 if (z%3=0 & x+y+z=100 & 5*x+3*y+z/3=100) 9 printf(公鸡公鸡=%d,母鸡母鸡=%d,小

17、鸡小鸡=%dn,x,y,z); 10 return 0; 11 例3.14 5 for (x=0; x=20; x+) 6 for (y=0; y=33; y+) 7 z=100-x-y; 8 if (z%3=0 & 5*x+3*y+z/3=100) 9 printf(公鸡公鸡=%d,母鸡母鸡=%d,小鸡小鸡=%dn,x,y,z); 10 由于三种鸡的和是固定的,因此只要枚举二种鸡(x、y),第三种鸡就可以根据约束条件求得(z=100-x-y),这样就缩小了枚举范围变成双重循环。之所以选择z,是因为z的数量大,优化效果更好。此时循环体执行21x34=714次。 ch0615l#incl

18、udestdio.hlInt main()lchar i,j,k;lfor(i=x;i=z;i+)l for(j=x;j=z;j+)l for(k=x;k=z;k+)l if(i!=j&i!=k&j!=k)l if(i!=x&k!=x&k!=z)l printf(A-%ct B-%ctC-%cn,i,j,k);lT0611.CPP l编写程序计算编写程序计算500800区间内素数的个数区间内素数的个数cnt,并按所求素数的值从大到小的顺序,再计算其并按所求素数的值从大到小的顺序,再计算其间隔减、加之和,即第间隔减、加之和,即第1个素数第个素数第2个素数个素数+第

19、第3个素数第个素数第4个素数个素数+第第5个素数个素数的值的值sum。 l#includel#includelint main()llint m,k,i,cnt=0,s=0,q=1;lfor(m=799;m=500;m=m-2)lprintf(cnt=%d,s=%dn,cnt,s);lreturn 0;l k=sqrt(m); for(i=2;i=k;i+)if(m%i=0) break;if(i=k+1)s=s+q*m; q=-q; cnt=cnt+1;迭代法是一种不断用变量的旧值递推新值的求解方法。迭代法是一种不断用变量的旧值递推新值的求解方法。采用迭代算法求解问题的基本思路为:(1)确定

20、迭代变量确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。 (2)建立迭代关系式建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。(3)实现迭代算法。实现迭代算法。4迭代算法迭代算法【例3.15】 求斐波那契(Fibonacci)数列前40个 数。斐波那契数列公式为: (1) 1(1)(2) 1(2)( )(1)(2)(2)fnfnf nf nf nn语句的设计:语句的设计:确定变量并赋初值:当前项(fn)为后两项(f1,f2),为f1,f2赋初值,并输出前两项。循环语句:循环语句:1)循环

21、变量)循环变量 :i=32)循环条件:)循环条件:i=403)循环体:)循环体:求出一项求出一项fn,输出一项;,输出一项;调整后两项变量(调整后两项变量(f1,f2)的值的值i+ 例3.15#include int main() int i, f1=1,f2=1,fn; /迭代变量迭代变量 printf(%dn%dn,f1,f2);for(i=3;i1e-5)给定初值给定初值x0, 计算计算x1.构造循环构造循环:循环条件循环条件x1-x0大于给定精度大于给定精度;循环体中循环体中:1)用用x1更新更新 x0,2)用用x0通过迭代公式算出通过迭代公式算出X1,x0=x1; x1=1./2*(x0+a/x0);简单迭代求方程的近似根简单迭代求方程的近似根 给定方程给定方程f(xf(x)=0)=0,按照迭代公式:,按照迭代公式:X Xn+1n+1=g(X=g(Xn n) )进行进行迭代,迭代,直到直到xn+1-xn小于给定精度。小于给定精度。算法实现:算法实现: 给定初值给定初值x0,通过迭代公式算出通过迭代公式算出X1;构造循环:构造循环:循环条件:循环条件:x1-x0大于给定精度。大于给定精度。循环体循环体:X1更新更新 x0,

温馨提示

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

评论

0/150

提交评论