收藏 分享(赏)

第六章 循环控制 zd.ppt

上传人:tkhy51908 文档编号:8011485 上传时间:2019-06-04 格式:PPT 页数:46 大小:989KB
下载 相关 举报
第六章 循环控制 zd.ppt_第1页
第1页 / 共46页
第六章 循环控制 zd.ppt_第2页
第2页 / 共46页
第六章 循环控制 zd.ppt_第3页
第3页 / 共46页
第六章 循环控制 zd.ppt_第4页
第4页 / 共46页
第六章 循环控制 zd.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

1、第六章 循环控制,本章主要任务:1、掌握循环语句:whiledo-whilefor2、掌握循环控制:breakcontinuegoto、exit()3、能根据需要选择正确的结构,求12345678,开始,S=1,N=1,S*=N,N+,N8,输出S,结束,N,Y,引例,S=1,N=1,S*=N,N+,直到N8,输出S,循环,许多问题的求解归结为重复执行的操作,比如数值计算中的数列和,非数值计算中的对象遍历。重复执行就是循环。重复工作是计算机特别擅长工作之一。 重复的动作是受控制的,比如满足一定条件继续做,一直做直到某个条件满足,做多少次结束。也就是说重复工作需要进行控制-循环控制。,循环结构,

2、这种在给定条件成立时,反复执行某程序段,直到条件不成立为止,就称为循环结构。给定的条件称为循环条件,反复执行的程序段称为循环体,在循环变量中用于控制循环执行次数的变量称为循环变量。C语言提供了三种循环控制语句。while语句(“当型循环”) ;do-while语句(“直到型循环”) ;for语句(“当型循环”) 。,循环结构while语句,格式:while (表达式) 语句 功能:1、计算表达式的值;2、当值为真时,执行循环体。返回第1步.3、否则执行语句后的语句; 例如: /用于求输入的字符串中字符的个数。 int n=0; while (getchar()!=n)n+; printf(“T

3、he number of characters is : %d”,n); 说明:(1)while语句中的表达式一般是关系表达式或者逻辑表达式,只要值为真就可以继续执行循环体。 (2)如果循环体包含一个以上的语句,必须用括起来构成复合语句。,表达式,语句,C,CA,while语句,计算1100偶数的和。,1、问题分析:数据、结构和操作分析(1)重复偶数判断,并加和:所以需要循环结构while(2)循环体:偶数判断、循环变量(3)循环变量:操作数(4)条件1100(5)偶数判断: 2的求余运算,2、画流程图:定义变量、执行运算,定义变量N=0,S=0,N=100,N%2=0,S+=N,输出s,N,

4、Y,N+,3、编写程序,#include void main() int s=0,n;n=0;/循环变量初始化while (n=100)/循环执行条件if(n%2=0) /循环体s+=n;n+;/改变循环变量的值printf(“%d“,s); ,4、调试,#include void main() int s=0,n;n=0;/循环变量初始化while (n=100)/循环执行条件s+=n;/循环体n+=2;/改变循环变量的值printf(“%d“,s); ,循环结构do-while语句,格式:do 语句while(表达式); 功能:先执行一次循环体,再判别表达式的值,如果为真则继续执行循环,否

5、则终止循环。 例如:/重复判断用户输入的是否是一个偶数,直到输入0为止。 doprintf(“请输入一个整数”);scanf(“%d”, 说明: (1)do-while语句的表达式后必须加分号。 (2)如果循环体由多个语句组成,也必须由括起来,组成一个复合语句。,do-while语句,求1100之间所有偶数的和。,#include void main() int sum=0,n=0;dosum+=n;n+=2;while(n=100);printf(“%d“,sum); ,C,BC,循环结构for语句,格式: for (表达式1;表达式2;表达式3)语句 功能:(1)首先计算表达式1的值; (

6、2)再计算表达式2的值,若值为真,则执行一次循环体,否则跳出循环; (3)计算表达式3的值,转回第(2)步重复执行。 例如:/计算1100的和。 int sum=0,i; for (i=1;i=100;i+) sum+=i; printf(“sum=%d”,sum);,for语句(当型循环),for语句,求1100之间所有偶数的和。,#include void main() int sum=0,n;for (n=0;n=100;n+=2)sum+=n;printf(“%d“,sum); ,for语句,说明: for语句的各个表达式均可省略,但是分号不可缺少。 如果循环变量已经在for语句前赋初

7、始值,那么表达式1可以省略。 如果省略表达式2,一般在循环体中加入break语句来退出循环。 若省略表达式3,应在循环体中修改循环变量,保证循环能结束。 可以同时省略三个表达式中的任意2个。 三个表达式可以全部省略。 循环体可以是空语句。 表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其它表达式。 表达式2一般是关系表达式或者逻辑表达式,但也可以是数值表达式或者字符表达式,只要其值为非零,就可以执行循环。 表达式3一般是改变循环变量的赋值表达式,但也可以是与循环变量无关的其它表达式。 表达式1和表达式3都可以是逗号表达式。,C,几种循环的比较,1、循环变量初始化:whil

8、e和do-while循环,循环变量初始化应该在while和do-while语句之前完成;而for循环,循环变量的初始化可以在表达式1中完成。 2、循环条件:while和do-while循环只在while后面指定循环条件;而for循环可以在表达式2中指定。,几种循环的比较,3、循环变量修改使循环趋向结束:while和do-while循环要在循环体内包含使循环趋于结束的操作;for循环可以在表达式3中完成。 4、for循环可以省略循环体,将部分操作放到表达式2,表达式3中,for语句功能强大。,几种循环的比较,5、while和for循环先测试表达式,后执行循环体,而do-while是先执行循环体,

9、再判断表达式。(所以while,for循环是典型的当型循环,而do-while循环可以看作是直到型循环)。,几种循环的比较,6、三种基本循环结构一般可以相互替代,不能说哪种更加优越。具体使用哪一种结构依赖于程序的可读性和程序设计者个人程序设计的风格(偏好)。我们应当尽量选择恰当的循环结构,使程序更加容易理解。(尽管for循环功能强大,但是并不是在任何场合都可以不分条件使用)。,几种循环的比较,循环控制,控制循环语句中其他语句的执行 break continue goto exit,循环控制,break语句 格式:break; 功能:用于跳出switch结构,和从循环体内中途跳出该循环体,即提前

10、结束循环,执行循环下面的语句。 说明: (1)在循环语句中,break语句一般与if语句一起使用。 (2)break语句不能用于循环语句和switch语句之外的其它任何语句之中。 举例:,计算半径r=1到r=10的圆面积,直到圆面积大于100为止。 #define PI 3.1415926 #include void main()float area; int r;for (r=1;r100) break;printf(“%fn”,area); ,B,循环控制,continue语句 格式:continue; 功能:跳过循环体中剩余的语句而强制执行下一次循环,即结束本次循环,跳过循环体中下面尚未

11、执行的语句,接着进行下一次是否执行循环的判定。 说明:continue语句只能用在循环语句中,且一般都是与if语句一起使用。 举例:,把100200之间的不能被3整除的数输出。 #include void main()int n;for( n=100; n=200; n+)if (n%3=0) continue;printf(“%5d”,n); ,B,#include void main() int k=0;char c=A;doswitch(c+)case A:k+;break;case B:k-;case C:k+=2;break;case D:k=k%2;continue;case E:

12、k=k*10;break;default:k=k/3;k+;while(cG);printf(“%d“,k); ,B,break,continue主要区别,continue语句只能用于for、while、do-while中,只终止本次循环,而不是终止整个循环结构的执行;break语句只能用于for、while、do-while、switch中,终止循环,不再进行条件判断。,应用举例,例:从键盘上连续输入字符,并统计其中大写字母的个数,直到输入“换行”字符时结束。,循环控制,goto语句称为无条件转向语句。 格式:goto 语句标号; 功能:无条件转移到语句标号指定的代码行执行。 例如: got

13、o label; 说明: (1)语句标号用标识符表示,命名规则与变量名的命名规则相同。 (2)由于goto语句可以灵活跳转,如不加限制,会破坏结构化程序设计风格,经常带来错误或隐患。所以要限制使用goto语句。 (3)Goto语句和跳转目标只能位于同一个函数中。 (4)一般而言,goto语句有两种用途: 与if语句一起构成循环,这是goto语句最常用的用途。 从多层循环中跳出。,循环控制,exit()函数 终止程序的执行,循环结构循环嵌套,当一个循环体内又包含另一个完整的循环体时,称为循环嵌套。其中被嵌套的循环称为外层循环,在其它循环体中嵌套的循环为内层循环,或者内嵌循环。如果内嵌循环的循环体

14、内又有一个完整的循环结构,则构成了多层嵌套。C语言提供的三种循环控制语句可以互相嵌套,也可以自己嵌套。,循环嵌套例,输出如下图形: * * * * *分析:由于要输出5行,第i行由i个“*”组成(i=1,2,3,4,5),所以我们可以使用外层循环来控制输出的行数,而使用内层循环控制每行输出的星号个数。需要注意的是,内层循环的循环次数等于外层循环的循环变量的值。,#include void main()int i,j;for (i=1;i=5;i+)for (j=1;j=i;j+)printf(“*“);printf(“n“); ,循环嵌套例,绘制余弦曲线:在屏幕上用”*”显示0度到360度的余

15、弦曲线。,问题分析与算法设计对一般显示器来说,只能按行输出,即输出一行后,只能向下一行输出,不能再返回到上一行,()。因此,画图过程应该是给定y(从大到小)求x的值, 同时一行输出两个”*”。cos是左右对称的,0-180和180-360是对称的。设屏幕的一个字符宽度画一个”*”。定义行方向为x方向,列方向为y。必须离散化。定义图形总宽度为62(3.1415*2*10)列,高位1到-1共20行。计算出x为0-180的y的坐标值m,那么同一行180-360的坐标值就为62-m。,#include #include void main() double y;int x, m;printf(“n“)

16、;for(y = 1; y = -1; y-=0.1)printf(“ “);m = acos(y)*10;for(x = 1; x m; x+)printf(“ “);printf(“*“);for(; x 62 - m; x+)printf(“ “);printf(“*n“);printf(“n“); ,百钱买百鸡问题,“百钱买百鸡”是我国古代的著名数学题。问题是这样描述的:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?,百钱买百鸡问题,解法1:假设i、j、k分别代表公鸡、母鸡和小鸡的数目,注意到一百文钱最多可以

17、买33只公鸡、50只母鸡和300只小鸡,所以0=i=33,0=j=50,0=k=300。,#include void main() int i,j,k;for (i=0;i=33;i+)for (j=0;j=50;j+)for (k=0;k=300;k+)if (3*i+2*j+k/3=100 ,百钱买百鸡问题,解法2:在第一种实现方法里面,i、j、k构成了三重循环,if语句总共需要被判断3350300495000次。上个程序完全可以变为二重循环,因为i、j、k都是整数,当i、j的值被确定后,k=100-i-j。,#include void main() int i,j,k;for (i=0;

18、i=33;i+)for (j=0;j=50;j+)k=100-i-j;if (3*i+2*j+k/3=100 ,百钱买百鸡问题,解法3:在第二种方法里,i、j构成二重循环,if语句总共被判断:33501650次。更进一步分析,我们发现当i确定时,j的范围可以更进一步确定为:0=j=(100-3*i)/2。,#include void main() int i,j,k;for (i=0;i=33;i+)for (j=0;j=(100-3*i)/2;j+)k=100-i-j;if (3*i+2*j+k/3=100 ,循环控制举例,猜数游戏:注册用户才能玩,分析可以分成身份证实(登录)和猜数两个子程

19、序,循环控制举例1,登录:输入学号和密码,如果不正确,最多可重复输入三次。,1、问题分析:数据、结构和操作分析(1)要求定义学号和密码:int(2)因为要比较:需要定义真实的学号和密码(3)可以重复输入,需要循环,假设选do-while循环条件:不相等且重复次数小于3(4)操作:比较,如果条件满足退出循环,2、画流程图,定义变量i=1,num=0,pd=0,定义常量NUM=1,PD=1234,输入num、pd,num=NUM & pd=PD,Y,break,N,/,i+,i3,3、编写程序,#include const int NUM = 1; const int PD = 1234; voi

20、d main() int i = 1, num, pd;do puts(“Please input Number: “);scanf(“%d“, ,4、调试,循环控制举例2,猜数:输入一个数,判断与已知数是否相等,并根据远近给出提示,直到猜对为止。,1、问题分析:数据、结构和操作分析(1)要求定义一个数:int(2)因为要比较:需要定义真实的数(3)可以重复输入,需要循环,假设选do-while循环条件:不相等(4)操作:比较,如果条件满足退出循环(5)如果不满足给出提示:大于10:很大大于5:大在5以内:近,2、画流程图,定义变量i=0,num=0,定义常量PRICE=66,输入num,P+10num,Y,N,bigger,P+5num,Y,N,big,Pnum,Y,small big,N,N+5P,Y,small small,N,N+10P,Y,N,small,smaller,Num=PRICE,Y,i=1;,N,i!=1,3、编写程序,4、调试,do puts(“Please input a number between 1 and 100: “);scanf(“%d“,总结,关键字:whiledo-whileforbreakcontinuegoto,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报