06第六章(循环控制)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第6章循环控制浙江理工大学计算机技术教研部2007年4月2学习内容6.1概述6.2goto语句及用goto语句构成循环6.3while语句6.4do……while语句6.5for语句6.6循环的嵌套6.7几种循环的比较6.8break语句,continue语句6.9程序举例3§6.1概述循环控制的应用范围非常广泛,并且循环结构是结构化程序三种基本结构之一,熟练掌握循环结构和循环结构的概念是程序设计的基本要求。4§6.2goto语句及其循环一般形式:goto语句标号语句标号用标识符表示,由字母、数字、下划线组成,第一个字符必须为字母或下划线,不能用整数作标号.Eg:goto123(×)应用举例:5goto语句应用举例Intmain(){inti,sum=0;i=1;loop:if(i=100){sum=sum+i;i++;gotoloop;}printf(“%d”,sum);}冒号是标号的标志6§6.3while语句while(表达式)语句特点:先判断,后执行.反复执行,直到表达式为假时结束.表达式语句非00while流程图非0表达式语句0if流程图而if语句是执行一次,接着往后执行.7While循环举例voidmain(){inti,sum=0;i=1;while(i=100){sum=sum+i;i++;}printf(“%d\n”,sum);}i=1,sum=0当i100sum=sum+ii=i+1循环体NS图8循环体的构成编写循环体时,应注意:(1)循环体若包含一个以上的语句,应用花括弧括起来,以复合语句形式出现(2)应有使循环结束的语句,如上例中的“i++”。9§6.4do—while语句do-while流程图:语句表达式非00形式:Do循环体语句While(表达式)10先执行语句,后判断表达式(先斩后奏)当表达式的值为非零时,循环执行;当表达式的值为零时,结束循环。注意:循环体内要有使循环结束的语句.比较:while语句与do—while语句一般情况二者相同,但在while后面的表达式一开始就为假(0值)时,两种循环结果不同。do—while的执行特点11voidmain(){intsum=0,i;scanf(“%d”,&i);while(i=10){sum=sum+i;i++;}printf(%d”,sum);}当i值小于或等于10时,二者结果相同,而当i10时,二者结果不同。因为此时对while循环,不执行循环,而对do—while循环,要执行一次循环体。voidmain(){intsum=0,i;scanf(“%d”,&i);do{sum=sum+i;i++;}while(i=10);printf(%d”,sum);}whileDo--whileWhile与do—while的区别注意这个分号严进宽出宽进严出12例:打印1~5voidmain(){inti=1;do{printf(“%d”,i);i++;}while(i=5);}打印的不同要求:(1)改写成while循环(2)5个数紧挨着打在同一行(3)打在同一行,但每个数之间有一定的空隙,如有2个空格(4)打在同一列(5)5个数字全部输出后换行(6)交换循环体中两个语句的位置,怎样为i赋初值?13阅读程序,写出执行结果#includestdio.hvoidmain(){inti=10;do{printf(%d,i);i++;}while(i=5);printf(%d,i);}14程序举例(1):P129习题6.4求1!+2!+3!+……+20!15程序(2)举例计算1/(1*2)+1/(2*3)+…+1/(n*(n+1)),其中n=201/(1*2)-1/(2*3)+1/(3*4)-1/(4*5)…+1/(n*(n+1)),其中n=2016程序(3)举例计算e=1+1/1!+1/2!+1/3!+1/4!+…+1/n!+…直到某一项的值小于0.00000117程序举例(4):P129习题6.6水仙花数:指一个3位数,其各位数字的立方和等于该数本身。例如153就是水仙花数。18程序举例(8):P130习题6.14*************************打印如下图案:19程序(6)举例已知x,y,z分别是0~9中的一个数,求x,y,z的值,使得下式成立:xxz+yzz=532。(其中xxz和yzz不表示乘积,而是由z,y,z组成的三位数)。20程序(5)举例有一阶梯,如果每步跨2阶,最后余一阶;每步跨3阶,最后余2阶;每步跨4阶,最后余3阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶,正好到达阶梯顶。问阶梯至少有多少阶?21程序(7)举例百钱买百鸡。公元前5世纪,我国数学家张丘建在《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡。问鸡翁、鸡母、鸡雏各几何?22程序举例(9):P129习题6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。23程序举例数列第1项为81,此后各项均为它前1项的正平方根,统计该数列前30项之和24§6.5for语句一般形式:for(表达式1;表达式2;表达式3)语句执行过程:求解表达式1表达式2语句求解表达式3for语句的下一语句真假相当于:表达式1;While(表达式2){语句表达式3;}25voidmain(){inti,sum;sum=0;for(i=1;i=100;i++)sum=sum+i;printf(sum=%d\n,sum);}voidmain(){inti=1,sum;sum=0;while(i=100){sum=sum+i;i++;}printf(sum=%d\n,sum);}两种写法的比较26例:用for求i=1;i=100sum=sum+i;输出sum真假1001ii表达式1表达式2表达式3语句i=i+1;27例:用for求1001ii#includestdio.hvoidmain(){inti,sum=0;for(i=1;i=100;i++)sum=sum+i;printf(%d\n,sum);}可以没有表达式3,设法使循环结束:for(i=1;i100;){sum=sum+i;i++;}可以没有表达式1和表达式3:i=1;for(;i=100;){sum=sum+i;i++;}如果没有表达式2,循环将无限进行下去:for(i=1;;i++)sum=sum+i;可以没有表达式1:i=1;for(;i=100;i++)sum=sum+i;28For循环的变种(1)表达式1省略而分号不能省略.例子例子例子例子(5)表达式1既可以设置循环变量初值的赋值表达式,又可以是同循环变量无关的其他表达式。表达式3也可以是与循环控制无关的任意表达式。另外,表达式1和3可以是简单表达式,也可以是逗号表达式,如:For(i=0,j=100;i=j;i++,j--)k=i+j(4)同while语句等同的情况.(2)表达式2省略,即不判断循环条件.(3)表达式3省略的情况.例子29For循环的变种实验6_2(6)表达式2一般是关系表达式或逻辑表达式;也可以是字符表达式或数值表达式。只要其值为非0,就执行循环体(7)表达式1,2,3全部省略,即for(;;)相当于while(1)注:从上面的叙述可以看到,for循环的功能非常强,完全可以取代while循环。与循环控制无关的操作可以出现在表达式1和表达式3中。但不宜过分利用这个特点,因为这样会使for语句显得杂乱,可读性不强。举例306.6循环的嵌套循环的嵌套:一个循环体内又包含另一个完整的循环结构;内嵌的循环中还可以再嵌套循环,构成多重循环。三种循环(while循环、do—while循环、for循环)可以互相嵌套1.While(){…while(){…}}4.While(){…do{…}while()}3.for(;;){…for(;;){…}}2.do{…do{….}while()}While()316.7几种循环的比较(1)四种循环可以相互替代,用来处理同一问题。但一般不提倡使用goto语句。(2)在while循环和do…while循环中,whlie紧跟的括号内指定循环条件。为了使循环能正常结束,应在循环体中包含使循环趋向结束的语句。for循环可以在表达式3中包含使循环趋向结束的语句。(3)使用while循环和do…while循环时,变量的初始化操作应在循环开始之前完成。for循环可以在表达式1中实现变量的初始化操作。(4)break语句和continue语句不能用于goto语句和if语句.32§6.8break,continue语句break语句:用于退出循环。注意:break语句只能用于循环语句和switch语句。Continue语句用于结束本次循环。33for(r=1;r=10;r++){area=pi*r*r;if(area100)break;printf(“%f”,area);}While(表达式1){语句If(表达式2)break;语句}break表达式1表达式2While循环的下一语句ynoynobreak语句:用于退出循环。34break语句只能结束break语句所在的循环要全部结束多层循环,可以设置一个标志变量逐层结束。……;flag=0;while(){while(){……if(){flag=1;break;}//在结束本层循环之前设置标志}……if(flag==1)break;}//跳出外层循环。标志flag起了接力棒的作用35作用:结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下次是否执行循环的判定.While(表达式1){语句If(表达式2)continue;语句}Continue语句表达式1表达式2While循环的下一语句ynoyno36voidmain(){intn;for(n=100;n=200;n++){if(n%3==0)continue;printf(“%d”,n);}}将100~200的不能被3整除的数输出37continue语句应用将1~1000中不能被7整除的数进行求和#includestdio.hvoidmain(){inti,sum=0;for(i=1;i=1000;i++){if(i%7==0)continue;sum+=i;}printf(sum=%d\n,sum);}//能被7整除,本次循环不执行,继续下一次循环例38打印九九乘法表一共要打9行,循环控制:for(i=1;i=9;i++)每行要打i个表达式,循环控制:for(j=1;j=i;j++)打印:printf(%d*%d=%d,j,i,i*j);进行下一行时要换行:printf(\n);39打印金字塔解题要点:1.金字塔层数:n循环控制:for(i=1;i=n;i++)2.每层前的空格数:k循环控制:for(k=1;k=??;k++)3.每层个数:j循环控制:for(j=1;j=??;j++)40判断一个数是否是素数break;n能被整除的最大数是ni循环正常结束,用break是提前结束循环。由此得到是否素数的结论。也可以利用标记变量的方法得出结论。n41[例6.8]求素数#includemath.h#includestdio.hvoidmain(){intm,i,k,sum=0;for(m=101;m=200;m=m+2){k=sqrt(m);for(i=2;i=k;i++)if(m%i==0)break;if(i=k+1){printf(%d\n,m);//怎样实现每10个素数打印一行??sum=sum+m;}}printf(100~200之间的素数和为%d\n,sum);}42课堂练习5编程一个猜数游戏:计算机自动产生一个随机整数(两位数);从键盘输入整数猜这个数;若输入的数太小,则计算机给出“太小了!”的提示,若输入的整数太大,则给出“

1 / 45
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功