第5章循环控制PPT课件

上传人:博****1 文档编号:591358856 上传时间:2024-09-17 格式:PPT 页数:24 大小:393.50KB
返回 下载 相关 举报
第5章循环控制PPT课件_第1页
第1页 / 共24页
第5章循环控制PPT课件_第2页
第2页 / 共24页
第5章循环控制PPT课件_第3页
第3页 / 共24页
第5章循环控制PPT课件_第4页
第4页 / 共24页
第5章循环控制PPT课件_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《第5章循环控制PPT课件》由会员分享,可在线阅读,更多相关《第5章循环控制PPT课件(24页珍藏版)》请在金锄头文库上搜索。

1、1. 概述概述 重重复复执执行行某某个个程程序序段段称称为为循循环环。在在C中中可可用用如如下下语句实现循环:语句实现循环:1用用goto语句和语句和 if 语句构成循环;语句构成循环;2用用while语句;语句;3用用dowhile语句;语句;4用用for语句。语句。 2. goto 语句语句 goto语句为无条件转向语句。其形式为:语句为无条件转向语句。其形式为: goto 语句标号;语句标号; 说明:说明: goto语语句句的的作作用用是是无无条条件件地地转转去去执执行行“语语句句标标号号”标明的某一段程序。标明的某一段程序。第第5章章 循循 环环 控控 制制“语语句句标标号号”为为某某

2、一一语语句句前前的的一一个个标标识识符符。其其定定名名规规则则与变量名相同。与变量名相同。例例5.1 用用 if 语句和语句和goto语句构成循环求语句构成循环求 。 在在C中,除非不得已时才使用中,除非不得已时才使用goto语句。语句。main( ) int i,sum=0; i=1;loop: if (i=100) /* 语语句句标标号号后后的的“:”是是必必须须的的 */ sum=sum+i; i+; goto loop; printf(“%d”,sum); 用用while语语句句可可实实现现“当当型型”循循环环,语语句句形形式式为:为: while (表达式表达式) 语句;语句;说明:

3、说明: “表表达达式式”的的值值为为真真(非非0)时时执执行行“语语句句”,然然后后返返回回while处处判判断断“表表达达式式”是是否否为为假假(0 ),若若为为假假,则则转转去去执执行行“语语句句”后后面面的的语语句句,否否则则,继续执行继续执行“语句语句”。 “语句语句”可以是用可以是用 括起的复合语句。括起的复合语句。 3. while 语句语句例例5.2用用while语语句句求求1+2+100 。main( )int i, sum=0; i=1; while ( i=100 ) sum=sum+i; i+; printf(“%d”, sum);用用dowhile语语句句可可实实现现“

4、直直到到型型”循循环环,语语句句形形式为:式为: do 语句;语句; while (表达式表达式);说明:说明: 执执行行“语语句句”后后,判判断断“表表达达式式”是是否否为为假假(0),若若为为假假,则则结结束束循循环环,否否则则返返回回do处处继继续续执执行行“语语句句”。 “语句语句”可以是用可以是用 括起的复合语句。括起的复合语句。 while循循环环是是先先判判断断“表表达达式式”,后后执执行行“语语句句”。因此。因此。while循环可能一次也不会执行。循环可能一次也不会执行。 do while循循环环是是先先执执行行“语语句句”,后后判判断断“表表达达式式”。因此,。因此,do w

5、hile 循环至少要执行循环至少要执行 1 次次。 4. do while语句语句例例5.3 用用do while语句求语句求1+2+100 。main( ) int i, sum=0; i=1; do sum=sum+i; i +; while ( i=100 ); printf(“%d”, sum);main( ) int i, sum = 0 ; for ( i=1; i=100; i+ +) sum = sum + i ; printf(“%d”, sum); 5. for 语句语句for语句的一般形式:语句的一般形式: for (表达式表达式1; 表达式表达式2; 表达式表达式3)

6、语句;语句;其中:其中:“语句语句”可以是用可以是用 括起的复合语句。括起的复合语句。 for语句的执行过程如图所示。语句的执行过程如图所示。例例5.3 用用 for 循环语句求循环语句求1+2+100 。i=1; for ( ; i=100; i+ +) sum=sum+i;表表达达式式2常常称称为为循循环环条条件件表表达达式式,如如果果省省略略“表表达达式式2”或或三三个个表表达达式式均均省省略略,则则成为成为“死循环死循环”。如:。如: for (i=1; ; i+) sum=sum+i; for ( ; ; ) 语句;语句; 表达式表达式3常用于常用于循环变量的修改循环变量的修改,可置

7、于可置于“语句语句”中。如:中。如: for (sum=0, i=1; i=100 ;) sum=sum+i; i+; 如果只有如果只有“表达式表达式2”,则完全等同于,则完全等同于while循环。如:循环。如:“表达式表达式1”常称为常称为初始初始表达式表达式可置于可置于for语句之前,但必须保留语句之前,但必须保留“;”如:如:“表表达达式式1”可可以以是是设设置置循循环环变变量量初初值值的的赋赋值值表表达达式式,也也可可以以是是与与循循环环变变量量无无关关的其它表达式。如:的其它表达式。如: for (sum=0; i=100; i+) sum=sum+i; “表达式表达式1”和和“表达

8、式表达式3”可以是简单表达式,也可以是逗号表达式。如:可以是简单表达式,也可以是逗号表达式。如: for (i=0, j=100; i=j; i+, j-) k=i+j; “表表达达式式2” 一一般般为为关关系系表表达达式式或或逻逻辑辑表表达达式式,但但也也可可以以是是数数值值表表达达式式或或字字符符表达式,只要其值为非表达式,只要其值为非0,就执行,就执行“语句语句”。for (sum=0, i=1; i=100;) sum=sum+i; i+;while ( i=100 ) sum=sum+i; i+; 1) break语句语句 break语语句句用用于于从从while 、do while

9、和和for循循环环中中跳跳出去而终止其循环出去而终止其循环。例例:for (i=1; i30) break; printf(“%f n”,s); 注注:break语语句句不不能能用用于于循循环环语语句句和和switch语语句句以以外外的的任何其它语句中。任何其它语句中。2) continue语句语句continue语句的作用是结束语句的作用是结束本次本次循环并循环并开始下一次循环。开始下一次循环。 6. break 语句和语句和 continue 语句语句例例5.4 编编程程输输出出100 200之之间间不不能能被被3整整除除的的数。数。 main( ) int n; for (n=100;

10、n=200; n+) if (n%3=0) continue; printf(“%d”,n); 3) break语句和语句和continue语句执行流程比较语句执行流程比较例例5.5 用用“辗转相除法辗转相除法”求正整数求正整数m和和n的最大公约数。的最大公约数。“辗转相除法辗转相除法”的步骤为的步骤为:(演示演示) 若若mn,则,则m n; m%n r ; 若若r=0,转,转 n m,r n,转,转 输出输出n。main( ) int r,m,n; printf(“Enter m,n=”); scanf(“%d%d”,&m,&n); printf(“m=%d,n=%dn”,m,n); if

11、(mn) r=m; m=n; n=r ; r =m%n; while ( r != 0 ) m=n; n=r ; r =m%n; printf(“H.C.F=%dn”,n); 交换例例5.6 求求100 200之之间间的的所所有有素素数数(循循环环嵌嵌套套)。 (演演示示) :#include “math.h”main( )int f,m,i,k,n=0; for (m=101; m=200; m=m+2) if (n%10 = = 0) printf(“n”); k = sqrt(m); f =1; for (i=2; i = k; i+) if (m%i = = 0) f = 0; bre

12、ak; if (f = = 1) printf(“%d”,m); n=n+1; 例例5.8 编程求编程求1000以内的完数。以内的完数。(一个数等于因子之和为完数一个数等于因子之和为完数)#include “stdio.h”main( )int m,n,sum; for (m=2; m1000; m+) sum=1; for (n=2; nm; n+) if (m%n=0) sum+=n; /*求求m的因子之和的因子之和*/ if (m=sum) /*按规定格式打印按规定格式打印m*/ printf(%d=1,m); for (n=2; nm; n+) if (m%n=0) printf(+%

13、d,n); printf(n); 例5.9打印如右所示图形(演示5_9.c)/*设每行*个数为COLUME、共有2*ROW+1行*/#include#defineCOLUME7#defineROW4main()inti,j;for(i=1;i=ROW+1;i+)/*打印上面ROW+1行*/for(j=1;j=ROW-i+1;j+)printf();for(j=1;j=COLUME;j+)printf(*);printf(n);for(i=1;i=ROW;i+)/*打印下面ROW行*/for(j=1;j=i;j+)printf();for(j=1;j=COLUME;j+)printf(*);pr

14、intf(n);【题8.23】打印高和上底均为打印高和上底均为5的等腰空心梯形。的等腰空心梯形。(方法一方法一)#include#definewidth5main()inti,j;for(j=1;j=width-1;j+) putchar( );for(j=1;j=width;j+) putchar(*);putchar(n);* * * *for(i=1;i=width-2;i+)for(j=1;j=width-i-1;j+)putchar();putchar(*);for(j=1;j=width-2+2*i;j+)putchar();putchar(*);putchar(n);for(j=

15、1;j=3*width-2;j+) putchar(*);putchar(n);【题8.23】打印高和上底均为打印高和上底均为5的等腰空心梯形。的等腰空心梯形。(方法二方法二)#include#definewidth5voidmain()inti,j;for(j=1;j=2*width-1;j+) if(j=width-1) putchar( ); else putchar(*);putchar(n);for(i=1;i=width-2;i+) for(j=1;j=3*width;j+) if(i=-j+width|i=j-2*width+1) putchar(*); else putchar

16、( );putchar(n);for(j=1;j=3*width-2;j+) putchar(*);putchar(n);左斜*构成的(直线)方程:i=-j+width右斜*构成的(直线)方程:i=j-2*width+1输出如下图所示九九乘法表#includemain()inti,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);【题8.25】用牛顿迭代法求下用牛顿迭代法求下面方程在面方程在x=1.5附近的根。附近的根。2x3-4x2+3x-6 =

17、 0牛顿迭代法先任意设定一个与真实的根接近的值x0作为第一次近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),过(x1,f(x1))点做f(x)的切线,交x轴于x2,把它作为第三次近似根如此知道足够接近真正的根xn为止。牛顿迭代公式为:x1=x0-f(x0)/f(x0)(x0,f(x0)(x1,f(x1)x1=x0-f(x0)/f(x0)x0x1f(x)=2x3-4x2+3x-6则:则:f(x)= 6x2-8x+3程序如下:程序如下:#includevoid main() double y0,yd0,x0,x1;

18、 int count=0; x1=1.5; do x0=x1; y0=2*x0*x0*x0-4*x0*x0+3*x0-6; yd0=6*x0*x0-8*x0+3; x1=x0-y0/yd0; count+; while(fabs(x1-x0)=1e-6); printf(root=%8.4fn,x0); printf(2*x*x*x-4*x*x+3*x-6=%8.4fn,y0); printf(迭代次数:迭代次数:count=%dn,count);用用while循环替代部分程序实现:循环替代部分程序实现: x0=1.5; while(1) y0=2*pow(x0,3)-4*pow(x0,2)+

19、3*x0-6; yd0=6*pow(x0,2)-8*x0+3; x1=x0-y0/yd0; if(fabs(x1-x0)=1e-6)break; x0=x1; count+; 【题题8.33】输出不超过输出不超过1000的回文素数的回文素数(按每行按每行8个打印个打印)#include#includevoidmain()intnum,p,rev,i,count=0;for(num=11;num=999;num+=2)p=(int)sqrt(num);for(i=2;i=p;i+)/判断是否为素数if(num%i=0)break;if(i!=p+1)continue;/非素数不考虑p=num;rev=0;/用p求rev以免num改变!do/求逆序数revrev=rev*10+p%10;while(p=p/10)!=0);if(rev=num)/num为回文素数count+;printf(%-4d,num);if(count%8=0)printf(n);循环小结循环小结:For while dowhile 三种循环可以相互转换。三种循环可以相互转换。用用if goto 可以构成循环可以构成循环, 但不符合结构化程序设计但不符合结构化程序设计,尽量少用尽量少用或不用。或不用。三种循环可以相互嵌套。三种循环可以相互嵌套。 本章习题:本章习题:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号