欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《循环控制结构》PPT课件.ppt

    • 资源ID:5583426       资源大小:854KB        全文页数:94页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《循环控制结构》PPT课件.ppt

    ,第6章,循环控制,循环是计算机解题的一个重要特征。由于计算机运 算速度快,最适宜做重复性的工作。当我们在进行程序 设计时,总是要把复杂的不易理解的求解过程转换为容 易理解的操作的多次重复,从而降低了问题的复杂度,同时也减少程序书写及输入的工作量。,sum=1+2+3+4+100输出如下:输出所有210000的素数.,*,循环结构程序设计,循环是在循环条件为真时计算机反复执行的一组指令(循环体)。循环控制通常有两种方式:计数控制事先能够准确知道循环次数时用之 用专门的循环变量来计算循环的次数,循环变量的值在每次执行完循环体各语句后递增,达到预定循环次数时则终止循环,继续执行循环结构后的语句。标记控制事先不知道准确的循环次数时用之 由专门的标记变量控制循环是否继续进行。当标记变量的值达到指定的标记值时,循环终止,继续执行循环结构后的语句。,实现循环结构的语句,C语言中可用以下语句构成循环:if goto while do while for其中if goto是通过编程技巧(if语句和goto语句组合)构成循环功能。而且goto语句将影响程序流程的模块化,使程序可读性变差,所以结构化程序设计主张限制goto语句的使用。其他三种语句是C语言提供的循环结构专用语句。,6.1 if/goto 语句,语句功能:,语句格式:,语句标号:语句;if(表达式)goto 语句标号;,当(表达式)的值为非零时则重复执行“语句标号”后面的语句。,标识程序中某 个语句的位置,EXAMPLE6-1:,请用C语言实现右侧程序流程图所描述的算法:即:sum=1+2+3+4+100,设:i 计数器:i=i+1,sum 为累加器:sum=sum+i,main(),int sum=0,i=1;,sum=sum+i;,sum+=i;,i=i+1;,if(i=100),printf(“%dn”,sum);,goto aa;,aa:,i+;,语句标号:语句;if(表达式)goto 语句标号;,EXERCISES6-1:,从键盘输入100个有符号整数,请 分别统计其中正整数和负整数的个数。,Begin,i=0 p=0 n=0,i+,输出p n,End,p+,F,X0,T,输入 x,n+,i100,F,1,1,1、设计算法,X0,2、实现算法,main(),Int p,n,i,x;,scanf(“%d”,i+;,if(x0),printf(“%d,%dn”,p,n);,goto bb;,bb:,p+;,p=n=i=0;,else,If(x0)n+;,if(i100),5.2 while 语句,语句功能:,语句格式:,while(表达式)statements;,当表达式的值为非零时,重复statements。,关系、逻辑 赋值表达式,body of loop,请用while实现 sum=1+2+3+4+100,main(),int sum=0,i=1;,sum+=i;,While(i=100),printf(“%dn”,sum);,i+;,while(表达式),main()int n=0;while(n3)printf(“%d,”,n);n+;printf(“%dn”,n);,0,main()int n=3;while(n)printf(“%d,”,n-);n=-3;printf(“n”);while(n)printf(“%d,”,n+);,1,2,3,3,2,1,-3,-2,-1,EXAMPLE6-2:,n,0,1,2,3,2,1,0,-3,-2,-1,0,main()int a=1,b=2,c=2,t=0;while(ab)t=a;a=b;b=t;c+;printf(“%d,%d,%d”,a,b,c);,EXERCISES6-2:,a,0,2,2,1,b,c,t,1,2,1,3,main()int x=0,s=0;while(!x!=0)s+=+x;printf(“%d n”,s);,EXERCISES6-3:,x,0,s=s+(+x);,s,0,1,1,!x,从键盘输入100条整型数据,请找出其中最大的数,并指出这个最大的数是从键盘第几次输入的。要求:1、用N-S图设计算法;2、用C语言实现算法。,HOMEWORK6-1:,请分别统计在输入的字符串中 字母、数字和其它字符的个数。要求:1、用N-S图设计算法;2、用C语言实现算法。,HOMEWORK6-2:,book12pen5%*#()&,字母:,7,数字:,3,字符:,8,语句功能:,6.3 do-while 语句,语句格式:,do statements;while(表达式);,当表达式的值为非零时,重复statements。,body of loop,1+2+3+4+5+100,main()int i,sum;,do,printf(“%dn”,sum);,sum=0;i=1;,i+;,while();,sum+=i;,while(i=100);,EXAMPLE6-3:,main()int x;x=-1;do x=x*x;while(!x);,EXERCISES6-4:,A)是死循环 B)循环执行三次C)循环执行一次D)有语法错误,x=0;,main()int x=3;do printf(“%d,”,x-=2);while(!(-x);,EXERCISES6-5:,A)1 B)1,-2 C)3,0 D)0,x,3,1,0,-2,-3,x=x-2;,main()int s;s=7;do s=2;while(s0);printf(“s=%dn”,s);,EXERCISES6-6:,请写出右侧程序的运行结果,main()int x,y;x=y=0;while(x20)y+,x+=3;printf(“y=%d x=%dn”,y,x);,EXERCISES6-7:,写出右侧程序段的运行结果以及循环体中的语句共执行了几次。,为了使电文保密,往往按一定规律将其转换成 密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E(a变e,即将变成其后的第4 个字母)W变成字母A,X变成字母B,Y变成字母C,Z 变成字母D。要求:字母按上述规律转换,非字母字符不变。如,“China”应转换为“Glmre”。请输入一行字符,要求输出其相应的密码。,请设计一个 译密码 的程序,HOMEWORK6-3:,main()int x,y;x=y=0;do y+;x*=x;while(x0),请程序的运行结果及循环次数,HOMEWORK6-4:,while语句和用do-while语句的比较:在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。,例 while和do-while循环的比较(1)#include(2)#include void main()void main()int sum=0,i;int sum=0,i;scanf(“%d,,运行结果:1 sum=55 再运行一次:11sum=0,运行结果:1 sum=55 再运行一次:11sum=11,说明:(1)当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。,语句功能:,6.4 for 语句,语句格式:,for(表达式1;表达式2;表达式3)statements;,当表达式2的值为非零时,重复执行statements。,for(表达式1;表达式2;表达式3)statements;,表达式1 循环初始表达式,用于进入循环体前为循环变量赋初值 由算术、赋值、逻辑和逗号表达式构成。,表达式2 循环控制表达式,用于控制循环体语句的执行次数由关 系表达式或逻辑表达式构成。,表达式3 修改循环变量表达式,即每循环一次使得表达式1的值 就要变化一次。由算术、赋值、逻辑和逗号表达式构成。,main()int n;for(n=1;n=10;n+)printf(“%d,”,n);,1,2,3,4,5,6,7,8,9,10,for(表达式1;表达式2;表达式3)statements;,EXAMPLE6-4:,main()int n,i=100;for(n=1;n=5;n+)printf(“%d,”,i);,100,100,100,100,100,main()int n,i=100;for(n=5;n0;n-)printf(“%d,”,i);,EXAMPLE6-5:,main()int x,y;for(x=0,y=0;x+y=50;x+,y+)printf(“%3d”,x+y);if(x%5=0)printf(“n”);,EXERCISES6-8:,写出右侧程序段的 运行结果,main()int sum,i;for(sum=0,i=1;i=100;i+)sum+=i;printf(“sum=%dn”,sum);,main()int sum=0,i=1;do sum+=i;i+;while(i=100);printf(“sum=%dn”,sum);,main()int sum=0,i=1;while(i=100)sum+=i;i+;printf(“sum=%dn”,sum);,main()int sum=0,i=1;label:if(i=100)sum+=i;i+;goto label;printf(“sum=%dn”,sum);,1+2+3+4+5+100,说明:for语句的一般形式中的“表达式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+;,(3)表达式3也可以省略,但此时程序设计者应另外设法保证 循环能正常结束。如:for(i=1;i=100;)sum=sum+i;i+;在上面的for语句中只有表达式1和表达式2,而没有表达式3。i+的操作不放在for语句的表达式3的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。,(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件 如:for(;i=100;)while(i=100)sum=sum+i;sum=sum+i;i+;相当于 i+;在这种情况下,完全等同于while语句。可见for语句比while语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。,(5)3个表达式都可省略,如:for(;)语句 相当于 while(1)语句 即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。,(6)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如:for(sum=0;i=100;i+)sum=sum+i;表达式3也可以是与循环控制无关的任意表达式。,表达式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;表达式1和表达式3都是逗号表达式,即同时设两个初值,使两个变量增值。,在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为其中最右边的表达式的值。如:for(i=1;i=100;i+,i+)sum=sum+i;相当于 for(i=1;i=100;i=i+2)sum=sum+i;,(7)表达式2一般是 关系表达式(如i=100)或逻辑表达式(如ab 在表达式2中先从终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于n(换行符),如果不等于n,就执行循环体。注意:此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中,作用是一样的。,for(;(c=getchar()!=n;)printf(“%c”,c);for语句中只有表达式2,而无表达式1和表达式3。其作用是每读入一个字符后立即输出该字符,直到输入一个“换行”为止。,例5.9 用for循环按下列公式计算e的值(精度为1e-6):e=1+1/(1!)+1/(2!)+1/(3!)+1/(n!)void main()int i,f=1;double e=0;x=1.0;for(i=1;x=1e-6;i+)e=e+x;f=f*i;x=1.0/f;printf(“e=%f”,e);,例5.10 猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。到第十天想再吃时,就只剩一个桃子了,求第一天共摘多少桃子。采用逆算法,若某一天剩余的桃子是x,则前一天的桃子数应是2(x+1)void main()int x=1,i;for(i=9;i=1;i-)x=2*(x+1);printf(“%d”,x);,程 序 举 例,例1 求Fibonacci数列前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。即:F(1)=1(n=1)F(2)=1(n=2)F(n)=F(n-1)+F(n-2)(n3)算法如图所示:,图6-13,例1 求Fibonacci数列前40个数。#include void main()long int f1,f2;int i;f1=1;f2=1;for(i=1;i=20;i+)printf(“%12ld%12ld”,f1,f2);if(i%2=0)printf(“n”);f1=f1+f2;f2=f2+f1;,运行结果:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986 102334155,请输出26个小写的英文字母以及 每个字母所对应的ASCII码值。,HOMEWORK6-5:,设某学校新生入学时,需报选体育课选修 科目。其科目包括有:篮球、排球、体操、乒 乓球、网球。请为某班级(30人)统计报选各 科目的人数。,请设计报选体育科目统计程序,HOMEWORK6-6:,6.5 嵌套循环,嵌套循环是循环中的循环。嵌套 循环的深度可达两层、三层、四层,甚至更多。实际层数可根据应用程序 的需要而定,但超过三层的嵌套循环 不为多见。,for(i=1;i=9;i+)for(j=1;j=9;j+),内层循环,外层循环,双重循环,下面几种都是合法的形式:(1)while()(2)do(3)for(;)while()do for(;)while();while();(4)while()(5)for(;)(6)do do while()for(;)while();while();,请设计求解下列问题的C语言程序:s=1!+2!+3!+20!,1!=1,2!=1*2,3!=1*2*3,4!=1*2*3*4,5!=1*2*3*4*5 20!=1*2*3*4*5*20,i,1-1,1-,i,1-20,EXAMPLE6-6:,1-2,1-3,1-4,1-5,1-20,j,t=t*j,s=1!+2!+3!+20!,s=0,t,i(120),t=1,j(1i),输出 s,t*=j,s+=t,main()int i,j,t;long s=0;,for(),i=1;,i=20;,i+,for(),j=1;,j=i;,j+,t=t*j;,s+=t;,printf(“%ln”,s);,s=1!+2!+3!+20!,i(1-20),j(1-i),t=1;,请设计按下列格式打印九九表程序。,1*1=1 1*2=2 1*3=3 1*9=9 2*1=2 2*2=4 2*3=6 2*9=18 9*1=9 9*2=18 9*3=27 9*9=81,EXAMPLE6-7:,a,b,p=a*b,a,b,p,a(19),b(19),输出 a*b=p,1*1=1 1*2=2 1*3=3 1*9=9 2*1=1 2*2=4 2*3=6 2*9=18,main()int a,b,p;,p=a*b,for(),a=1;,a=9;,a+,for(),b=1;,b=9;,b+,printf();,p=a*b;,“%d,a,b,p,*,%d,=,%d,”,printf(“n”);,1*1=1 1*2=2 1*3=3 1*9=9 2*1=1 2*2=4 2*3=6 2*9=18,双重循环特点,当外层 循环变量中 的值变换一 次时,内层 循环变量中 的值将变换 若干次。,若 i,j 已定义为 int 类型,则以下程序段中 内循环体总的执行次数是:for(i=5;i;i-)for(j=0;j4;j+)A)20 B)24 C)25 D)30,EXERCISES6-9:,请打印下列图形:ABCDEFABCDEFABCDEFABCDEFABCDEFABCDEF,TEST6-4:,#define ROWS 6#define CHARS 6 main()int row;char ch;for(row=0;rowROWS;row+)for(ch=A;ch=F;ch+)printf(“%c”,ch);printf(“n”);,ABCDEFABCDEFABCDEFABCDEFABCDEFABCDEF,请打印下列图形:ABCDEF BCDEF CDEF DEF EF F,HOMEWORK6-7*:,#define ROWS 6#define CHARS 6main()int row;char ch;for(row=0;rowROWS;row+)for(ch=(A+ROW);ch=F;ch+)printf(“%c”,ch);printf(“n”);,ABCDEFBCDEF CDEF DEF EF F,前面我们介绍了四种能够实现循环的语句,它们退出循环的方式通常都是以某个表达式的结果作为判断条件,当其值为零时结束循环。除了这种正常结束循环的方式外,还可以利用C 语言提供的专门退出循环的语句。,6.6 break 与 continue 语句,6.6 break语句和continue语句,6.6.1 break 语句 break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。一般形式:break;注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。,例:float pi=3.14159;for(r=1;r100)break;printf(“r=%f,area=%fn”,r,area);,程序的作用是计算r=1到r=10时的圆面积,直到面积area大于100为止。从上面的for循环可以看到:当area100时,执行break语句,提前结束循环,即不再继续执行其余的几次循环。,break,break 语句,EXERCISES6-10:,main()int i,m=0,n=0,k=0;for(i=9;i=11;i+)switch(i/10)case 0:m+;n+;break;case 10:n+;break;default:k+;n+;printf(“%d,%d,%dn”,m,n,k);,m,0,n,0,1,1,k,0,2,1,2,3,continue,continue 语句,main()int k=4,n=0;for(;nk;)n+;if(n%3!=0)continue;k-;printf(“%d,%d n”,k,n);,A)1,1 B)2,2 C)3,3 D)4,4,EXAMPLE6-8:,main()int i;for(i=1;i5;i+)if(i%2)printf(“*”);else continue;printf(“#”);printf(“$n”);,EXERCISES6-11:,main()int i,j,x=0;for(i=0;i2;i+)x+;for(j=0;j=3;j+)if(j%2)continue;x+;x+;printf(“x=%d n”,x);,x=8,EXERCISES6-12:,在下列语句中,哪一个不为无限循环 A)i=100;B)for(;)while(1)i=i%100;i+;if(i 100)break;C)k=32764;D)S=32764;do while(S+%2)|(S%2)k+;k+;S+;while(k0);,EXERCISES6-13:,C)k=32764;do k+;printf(“k=%dn”,k);k+;printf(“k=%dn”,k);while(k0);,int-3276832767,215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20,1 个字节,1 个字节,C)k=32764;do k+;printf(“k=%dn”,k);k+;printf(“k=%dn”,k);while(k0);,k+,32765,k+,32766,k+,32767,k+,-32768,int-3276832767,-32767,continue语句和break语句的区别:continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。,while(表达式1)if(表达式2)continue;,while(表达式1)if(表达式2)break;,main()int k=0;char c=A;do switch(c+)case A:k+;break;case B:k-;case C:k+=2;break;case D:k=k%2;continue;case E:k=k*10;break;default:k=k/3;k+;while(cG);printf(“k=%d n”,k);,TEST6-1:,例2 把100200之间的能被3整除的数输出。#include void main()int n;for(n=100;n=200;n+)if(n%3!=0)continue;printf(“%d”,n);,说明:当n不能被3整除时,执行continue语句,结束本次循环(即跳过printf函数语句),只有n能被3整除时才执行printf函数。,算法思想:让m被2到 除,如果m能被2 之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即);如果m不能被2k(即)之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2k之间任一整数整除过,因此输出“是素数”。,例3 判断m是否素数。,例3 判断m是否素数。#include#include void main()int m,i,k;scanf(“%d”,,运行结果:1717 is a prime number,例4 求100200间的全部素数。#include#include void main()int m,k,i,n=0;for(m=101;m=k+1)printf(“%d”,m);n=n+1;if(n%10=0)printf(“n”);printf(“n”);,运行结果:101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199,HOMEWORK6-8:,输出任意两个数之间的基数 如:输入为 1,25 两个数,则对应输出应是 1,3,5,7,9,11,13,15,17,19,21,23,25,请输入若干名学生某科的考试成绩 然后统计出各分数段考试成绩的人数。如:小于60 6069 7079 8089 90100,HOMEWORK6-9*:,请使用嵌套循环打印下列图形:F F E F E D F E D C F E D C B F E D C B A,HOMEWORK6-10:,F F E F E D F E D C F E D C B F E D C B A,main()char ch;int i,j;for(i=0;i=6;i+)for(ch=F,j=0;ji;j+,ch-)printf(“%c”,ch);printf(“n”);,请写出下列程序的运行结果:for(i=4;i=0;i-)for j=1;j=i;j+)putchar(#);for(j=1;j=4-i;j+)putchar(*);putchar(n);,#*#*#*#*,HOMEWORK6-11:,请编写打印下列图形的程序,*,HOMEWORK6-12*:,*,*,main()int n1,n2,n3;for(n=1;n1=5;n1+)for(n2=1;n2=20-n1;n2+)printf(“”);for(n3=1;n3=2*n1-1;n3+)printf(“*”);printf(“n”);,for(n1=4;n1=1;n1-)for(n2=1;n2=20-n1;n2+)printf(“”);for(n3=1;n3=2*n1-1;n3+)printf(“*”);printf(“n”);,请编写按下列格式打印九九乘法表的程序,HOMEWORK6-13:,语句标号:语句;if(表达式)goto 语句标号;,Summary,while(表达式)statements;,do statements;while(表达式),for(表达式1;表达式2;表达式3)statements;,

    注意事项

    本文(《循环控制结构》PPT课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开