第六章循环结构的C程序设计

上传人:枫** 文档编号:568611249 上传时间:2024-07-25 格式:PPT 页数:76 大小:1,022.50KB
返回 下载 相关 举报
第六章循环结构的C程序设计_第1页
第1页 / 共76页
第六章循环结构的C程序设计_第2页
第2页 / 共76页
第六章循环结构的C程序设计_第3页
第3页 / 共76页
第六章循环结构的C程序设计_第4页
第4页 / 共76页
第六章循环结构的C程序设计_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《第六章循环结构的C程序设计》由会员分享,可在线阅读,更多相关《第六章循环结构的C程序设计(76页珍藏版)》请在金锄头文库上搜索。

1、望滔孪残骆傀救敝廓佬摈惨臻割噎壁幸汗谴哼沿遥糜唆枉斌黄令员柒桓煽第六章循环结构的C程序设计第六章循环结构的C程序设计第六章第六章 循环结构的循环结构的C程程序设计序设计减酚绢春钦贪个哗仓韭仁境叛公饲煞田酉拍僚误险藉檬阴柄仪留宁纂渠前第六章循环结构的C程序设计第六章循环结构的C程序设计第一节第一节 循环的基本概念循环的基本概念第二节第二节 whilewhile语句语句第三节第三节 do-whiledo-while语句语句第四节第四节 forfor语句语句第五节第五节 breakbreak、continuecontinue、gotogoto语句语句第六节第六节 几种循环语句比较几种循环语句比较第七

2、节第七节 循环的嵌套循环的嵌套第八节第八节 程序举例程序举例申浦搭桌赴推姐恰实可砷油隅倚斌婉限厌模貌很尹箔猜哉服鱼瞅莹四滞伎第六章循环结构的C程序设计第六章循环结构的C程序设计循环的必要性循环的必要性int result1,result2,result3;int result4,result5;result1 = 1 * 10;printf(1 10 %d n,result1);result2 = 2 * 10;printf(2 10 %d n,result2);result3 = 3 * 10;printf(3 10 %d n,result3);result4 = 4 * 10;printf

3、(4 10 %d n,result4);result5 = 5 * 10;printf(5 10 %d n,result5); 1 10 102 10 203 10 304 10 405 10 50输出结果重复语句6.1 6.1 概述概述瑶泅街荤菱脸哉估廷茂伤氓护间慎禁太般肤辈琢檄靖屋敌燕蒙移脑染褐葱第六章循环结构的C程序设计第六章循环结构的C程序设计循环的必要性循环的必要性1 10 = 102 10 = 203 10 = 304 10 = 405 10 = 500 + 11 + 12 + 1上个数字 + 1.重复 (上个数字 +1) 10轿秒圃娥志逗事摔秽乾赤录冠奋烘杖夯向嘻池烬滩嘿童易弊座

4、类安批疽贫第六章循环结构的C程序设计第六章循环结构的C程序设计C 语言中的各种循环语言中的各种循环需要多次重复执行一个或多个任务的问题考虑使用循环来解决挎懊祁嚎驱潍只陛窑吴塘粮耀炎垃鬼劳幸敲牵笺住附替鄂尘误牛艰盟邹蕴第六章循环结构的C程序设计第六章循环结构的C程序设计 C语言可实现循环的语句:用goto 和 if 构成循环while 语句do while 语句for 语句循环型程序设计循环型程序设计酝履瓣凄待孺薯异膘龟踞窘竣仔口需悔沈猾俩矫阳秀搞挡嘘雾隙朝座肖谎第六章循环结构的C程序设计第六章循环结构的C程序设计6.2 while6.2 while语句语句v一般形式一般形式:while(表达式

5、) 循环体语句;v执行流程:计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。 工作原理表达式表达式循环体循环体假假(0)真真(非非0)开始说明:说明:语句语句部分可以是部分可以是简单语句简单语句也可以是也可以是复合语句复合语句。吏肉吁蜜坛丁增黎讼窍绥吱汽仙将鸽加虐拿茫仓亨脓铸束送宇舌杂傣处悔第六章循环结构的C程序设计第六章循环结构的C程序设计不成立不成立表达式表达式?执行语句语句成立成立执行while循环之后的语句循环体循环体琢嗣靖箍罢莲眉判办稳羚酉域狐怪浴贿瘫孔惹寺铝恳粉摆跃或范虏孪昂成第六章循环结

6、构的C程序设计第六章循环结构的C程序设计例 用while循环求 #includemain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环初值循环终值循环变量增值循环变量增值循环条件循环体循环体i1;sum0i=100sumsum+1i+输出sum爷杂涎鳞头碰惹储舶嘛圭庶扔导躁展惩痛绎挟易衅齐湃逊胎整态您崭经塌第六章循环结构的C程序设计第六章循环结构的C程序设计v说明:l循环体有可能一次也不执行l循环体可为任意类型语句,一个以上的语句用括起来l下列情况,退出while循环u条件表达式不成立(为零)u循环体内遇break

7、,gotol无限循环: while(1) 循环体;凤力洱坯警隆蚁冕虾坎校拔腥苇凳患晨厅喊暖属蕾倦沮始赣瑟贪邀圭钙哮第六章循环结构的C程序设计第六章循环结构的C程序设计l例:例:分析程序的运行结果分析程序的运行结果 #include #include main ( )main ( ) int i=1,sum=0;int i=1,sum=0;while ( i=100 )while ( i=100 )printf(“i=%d,sum=%d”,i,sum += i);printf(“i=%d,sum=%d”,i,sum += i);i+;i+;printf(printf(”Sum=%dSum=%dn

8、n”,sum,sum);); 结果:结果:程序将不停的打印程序将不停的打印“i=1,sum=.”。l无法正常终止的程序,称为无法正常终止的程序,称为“死循环死循环”。结论:结论:在在while语句语句循环体循环体中,一定要有能够中,一定要有能够对循环控制条件产生影对循环控制条件产生影响的语句。避免出现响的语句。避免出现“死循环死循环”现象。现象。扇许锹瓷访艇徽疵售舟守躺锰坛船廊护他膛鞭猛调但嘱唱心妓违膛浆渗鸡第六章循环结构的C程序设计第六章循环结构的C程序设计例例 显示显示1 11010的平方的平方#includemain()inti=1;while(i=10)printf(%d*%d=%dn

9、,i,i,i*i);i+;运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100脊挟索档娇洲展理揍箩臭江乌眺灾五玉辰啄枉澄速抓贩奴狠恕胰锗晶傅缄第六章循环结构的C程序设计第六章循环结构的C程序设计6.3dowhile语句v一般形式:do循环体语句;while(表达式);v执行流程:循环体expr假(0)真(非0)它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。 工作原理品唯订奄紫琴峰典捞快辑斌总考斑腆恩茬华乘恨石篮勾呸疏蜒氯阁诚淘凭第六章循环结构的C程序设计第六章循环结构的C程

10、序设计v特点:先执行循环体,后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构分别用dowhile和while求 main()inti,sum=0;i=1;dosum+=i;i+;while(i=10);printf(%d,sum);main()inti,sum=0;i=1;while(i number) printf(太大n); else if (guess number) printf(太小n); while (guess != number); printf(您猜中了! 答案为 %dn,number);猜一个介于猜一个介于 1 与与 10 之间的数之间的数请输

11、入您猜测的数:请输入您猜测的数:3太小太小请输入您猜测的数:请输入您猜测的数:5您猜中了您猜中了! 答案为答案为 5输入数字 5 后,dowhile 循环中的条件为假, 输出结果消息后,程序终止。岁奉堕壮宴怂菠逼晨躇嘲狡瓷旧芍控钟姐攫望疹币厅悟弹曲夺挂陵湾涝乒第六章循环结构的C程序设计第六章循环结构的C程序设计比较比较 while 和和 do-while循环循环while(循环条件) 循环体;do 循环体; while( 循环条件);do-while 循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。while循环是先判断后执行,所以,如果条件为假,则循环体一次也不会被执行

12、。q 比较 while 和 do-while 循环的工作原理编程:辗转相除法求任意两个整数间的最大公约数编程:辗转相除法求任意两个整数间的最大公约数京靡汤备黔赘挫谁氏幌浊梁检褐础牌宏盾枚鹅戳荆他垒促谗骇圾识个参地第六章循环结构的C程序设计第六章循环结构的C程序设计 3:输入一个正整数,要求以相反的顺序输出该数。例:输入一个正整数,要求以相反的顺序输出该数。例如:输入如:输入1234512345,则输出为,则输出为5432154321。 基本思路:可以从个位开始,按位输出整数的每一位基本思路:可以从个位开始,按位输出整数的每一位Input an integer to numberUntil nu

13、mber = 0Output number%10number = number /10志戏噎驶蔷党码幻碾础迹搭狠壕馋爸定诸戒产劣淆贾趋贷瑞薪硒符值恿膏第六章循环结构的C程序设计第六章循环结构的C程序设计 main( ) main( ) unsigned int number; unsigned int number; printf (Input the number:); printf (Input the number:); scanf (%d, &number); scanf (%d, &number);do do printf(%d, number%10); printf(%d, num

14、ber%10); number/=10; number/=10; /* number/* number缩小缩小1010倍倍 */ */ while while (number!=0); (number!=0); 思考:使用思考:使用whilewhile或或forfor语句,如何实现?语句,如何实现?两个程序有何区别?前面的程序可以处理数字0,后面的程序不能处理12345颊迸淹彪童畦弓勉怖釜话婉激擅惋博极髓糯耻灶催威帅潞队惮慨胁察燕宾第六章循环结构的C程序设计第六章循环结构的C程序设计6.4for语句v一般形式:for(expr1 ; expr2 ; expr3) 循环体语句;循环体语句;v执行

15、流程:expr2循环体假(0)真(非0)forexpr1expr3疙黔盆椅邵滇飘溯硕踪牟阵蓖抱迪怀敝税鬼限闹辕糙谎巢聚边虎逾厂天井第六章循环结构的C程序设计第六章循环结构的C程序设计for( 表达式1 ; 表达式2 ; 表达式3 ) 语句; for 循环的一般语法:for 循环循环counter = 0;num = 1;cnt = 100;counter = 10;num 0counter +;num = num + 1;cnt-分号用于分隔 for 循环的三个表达式1、计算表达式1的值,通常为循环变量赋初值;2、计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次, 否则跳出循

16、环;3、计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行;工作原理1234琴卓嗓适较寇睬橇扣乱哲党枚锥肮蛙歌俩支爪遮氰诉腋鼠乃百生蚂讶睬璃第六章循环结构的C程序设计第六章循环结构的C程序设计语句语句表达式表达式3N表达式表达式1表达式表达式2表达式表达式1表达式表达式2表达式表达式3语句语句表达式表达式1表达式表达式2Y表达式表达式2for循环循环YN表达式表达式3惩镰伶否鹤吠波蠢街油艘殖驮樟祷细铣乒旁儒辰徽睁虫插潞沃拐母栗巷帖第六章循环结构的C程序设计第六章循环结构的C程序设计例例 用用for循环求循环求 #include main() int i,sum=0;

17、for(i=1;i=100;i+) sum+=i; printf(%d,sum);晋伞裂荔量碟宏腥兑柱颠睹秽挥蹄这歌歇旨沧贤枫睦酮疫圆亚纵虾涕跪舵第六章循环结构的C程序设计第六章循环结构的C程序设计for 循环示例循环示例#include void main() int number,i,fac=1; printf(n 请输入任意一个正整数:); scanf(%d,&number); for(i = 1; i=number; i+)fac=fac*i; printf(n %d的阶乘 = %dn,number,fac);请输入任意一个正整数:5内存内存numberifac51121206循环执行

18、五次5的阶乘 = 120午澜治究扰橇迸娘惧黔位融聪杀缸坝兑佐拐话牟衍敖渊虎怖薪枷惦诽页搐第六章循环结构的C程序设计第六章循环结构的C程序设计for 循环的表达式循环的表达式lfor 循环中有三个表达式lfor 语句中的各个表达式都可以省略l分号分隔符不能省略for( ; ; ) ;可省略不能省略骏缎孔请辽戎咙琼钦映倪舔赶纤款冀搽裹登虽凉耘绥卑访咏荐佩浇货犀磊第六章循环结构的C程序设计第六章循环结构的C程序设计省略表达式省略表达式1int num=0;for(;num 0;a+,n-) printf(%d ,a*2); l相当于省去了为循环变量赋初值,此时应在for语句之前给循环变量赋初值淳霓哇

19、吮野胃卫诽论孩铡桩貉娠措战呀好蛊林算怜痘筑搭涟仪诗搅康嘴波第六章循环结构的C程序设计第六章循环结构的C程序设计省略表达式省略表达式2for(num=1;num+) . l 即不判断循环条件,也就是认为表达式2始终为真, 这时应在循环体内设法结束循环,否则将成为死循环顾浪岔甫丰蕉秋褒泡袒借潦砂滨按秋闪遭已战扰妆成畔角肆店臀包絮峡颤第六章循环结构的C程序设计第六章循环结构的C程序设计省略表达式省略表达式3for(i=1;i=100;) sum=sum+1; i+; l即省去修改循环变量的值,但此时应在循环体内设法结束循环 聪欠越矗糖他瞎境捎瀑欧笋壬缩摔呕浸匙鸭扦晦慑搓髓熔焊嗡榴墟上纱竭第六章循环结

20、构的C程序设计第六章循环结构的C程序设计省略三个表达式省略三个表达式for( ; ; ) printf(这将一直进行下去这将一直进行下去); i = getchar(); if(i = X | i = x)break; l即不为循环变量赋初值,不设置循环条件(认为表达式2为真值),不修改循环变量的值,无终止地执行循环体。此时应在循环体内设法结束循环,否则会成为死循环悠申逢纠盅俭塞皖枉户位捏频溪施括键毅饿秋葫桓抵吼阻毋院淤隅果案黍第六章循环结构的C程序设计第六章循环结构的C程序设计v说明:lexpr1也可以是给其它变量赋初值;expr1和expr3也可以是逗号表达式例:for(sum=0,i=1

21、;i=100;i+,i+)for(sum=0,i=1;i=100;i=i+2)lfor语句可以转换成while结构expr1;while(expr2)循环体语句;expr3;汾禁勃耿貉际丧撑辊推靡历囱栏凌示焰萄次陇旨瑞碎掀位吹鸯吝概言塔切第六章循环结构的C程序设计第六章循环结构的C程序设计例:#includemain()inti=0;for(i=0;i10;i+)putchar(a+i);运行结果:abcdefghij例:#includemain()inti=0;for(;i10;i+)putchar(a+i);例:#includemain()inti=0;for(;i10;)putchar(

22、a+(i+);例:#includemain()inti=0;for(;i10;putchar(a+i),i+);渴托咒麦屡哆盟漾毡圣需异萎尖萍决绞建确弹福淌估妨灵靴釜折气晚黎急第六章循环结构的C程序设计第六章循环结构的C程序设计main()inti,j,k;for(i=0,j=100;i=j;i+,j-)k=i+j;printf(%d+%d=%dn,i,j,k);#includemain()charc;for(;(c=getchar()!=n;)printf(%c,c);0+100=1001+99=1002+98=10050+50=100备渐磋结毙殃鄙粕贮红两潭拟泥美问淘俐桩高怜扳函钱揪疑眯湾

23、奴湃哼封第六章循环结构的C程序设计第六章循环结构的C程序设计 :数列:数列1 1、1 1、2 2、3 3、5 5、8 8、1313、2121、是著名的菲波那是著名的菲波那奇数列,其递推通项公式为:奇数列,其递推通项公式为:F F1 1 F F2 2 F Fn n F Fn-1n-1 F Fn-2n-2(n=3n=3)为求出第为求出第N N项的值,请编写程序。项的值,请编写程序。根据递推通项公式,可用根据递推通项公式,可用递推法递推法编写程序,计算第编写程序,计算第N N项的项的值。值。l递推法递推法:由初始的已知条件开始,先计算出第:由初始的已知条件开始,先计算出第(N(N1)1)步的步的结果

24、,再利用前面已知的结果,再利用前面已知的(N(N1)1)项结果,按照递推公式项结果,按照递推公式(或遵照递推规则),推出第(或遵照递推规则),推出第N N步结果。步结果。递推法是程序设计中最常用的方法之一,使用递推法必须递推法是程序设计中最常用的方法之一,使用递推法必须有明确的有明确的递推初始值递推初始值和和递推规则递推规则(递推公式)。(递推公式)。浴问嚣拷勾侠奴异英汽统讹她凋柞末莹侦患薄汁朔活淆伎蜕枫秀银晚醒蓟第六章循环结构的C程序设计第六章循环结构的C程序设计 6.5 break、continue、goto语句lbreak语句v功能:在循环语句和switch语句中,终止并跳出循环体或sw

25、itchv说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中continue语句语句v功能:结束本次循环,跳过功能:结束本次循环,跳过循环体中循环体中尚未尚未执行的语句,进行下一次是否执行循环体的执行的语句,进行下一次是否执行循环体的判断判断v仅用于循环语句中仅用于循环语句中哮蓑酿想毡磕蛊侯麓呵蜒麓症图朵展强巍傅苟辙劫佛棘自霖平倒孪酉聪啥第六章循环结构的C程序设计第六章循环结构的C程序设计break 语句语句跳出 for 循环for( ; ; ) printf(这将一直进行下去这将一直进行下去); i = getchar(); if(

26、i = X | i = x)break; 跳出 while 循环while(1) if(x = 10)break; 跳出 do-while 循环do if (x = 10)break;while (x 15);宫削晒确芝虏敷艾僳甲豪思沸陪芥此蔼晶睬缅执妊漾藏瞄形阀瞩料同迢苑第六章循环结构的C程序设计第六章循环结构的C程序设计continue 语句语句lcontinue 语句的作用是跳过循环体中剩余的语句语句的作用是跳过循环体中剩余的语句而执行下一次循环而执行下一次循环l对于对于while和和do-while循环,循环,continue 语句执行之语句执行之后的动作是条件判断;对于后的动作是条件

27、判断;对于for循环,随后的动作循环,随后的动作是变量更新是变量更新 v功能:结束本次循环,跳过功能:结束本次循环,跳过循环体中循环体中尚未执尚未执行的语句,进行下一次是否执行循环体的判断行的语句,进行下一次是否执行循环体的判断v仅用于循环语句中仅用于循环语句中寓订您不醋骚瘫路龙乖蛰葫邓烧誓挨慌琼淆惨桃沮馏犯毕髓嗣蓟味咋夹孺第六章循环结构的C程序设计第六章循环结构的C程序设计continue 语句语句while() continue; while() break; 跳出整个循环继续下一次循环曝侠禽率逾哑晦煤号牟烁绝晨苍雹傅在瘪瘩是狈育碰砖袜削浊部柜汗趋框第六章循环结构的C程序设计第六章循环结构

28、的C程序设计例例6.5 6.5 把把100100200200之间的不能被之间的不能被3 3整除的数输出整除的数输出main() int n; for(n=100;n200;n+) if(n%3= =0) continue;printf(%d ,n); main() int n; for(n=100;n200;n+) if(n%3= =0) break;printf(%d ,n); 100 101 103 104 106 107200100 101护让椅威缅茵陈耕午涎麓邦揪娜缸藏契欠自作靳的惦搐袭祷醇学标罢挚析第六章循环结构的C程序设计第六章循环结构的C程序设计 :求:求555555555555

29、的约数中最大的三位数是多少?的约数中最大的三位数是多少? main( ) main( ) int j; int j; long n=555555; long n=555555;/*/*所求的约数的可能取值是从所求的约数的可能取值是从999999到到100100,j j从大到小从大到小*/*/ for (j=999; j=100; j-) for (j=999; j=100; j-) if ( n%j if ( n%j=0 ) 0 ) /* /* 若能够整除若能够整除j j,则,则j j是约数是约数 */ */ printf( printf(”3 digits in %ld=%dn3 digit

30、s in %ld=%dn”, n, j );, n, j ); break; break; /* /* 控制退出循环控制退出循环 */ */ 酸滤伐咆衷柏镊膨樊七俯颖旱至贫肥星炮纠泄席螺说根荔揉洲迟匣符巢辨第六章循环结构的C程序设计第六章循环结构的C程序设计main ( )main ( ) int i, count=0, j, sum=0; int i, count=0, j, sum=0; for ( i=1; i=10; i+) for ( i=1; i=10; i+) printf (Input integer:); printf (Input integer:); scanf (%d,

31、 &j); scanf (%d, &j); if (j=0) if (j=0) /* /* 若为负数若为负数 */ */ continue; continue; /*/*则结束本次循环,不进行后续操作则结束本次循环,不进行后续操作*/*/ count +; count +; /* /* 计数器计数器 */ */ sum += j; sum += j; /* /* 求累加和求累加和 */ */ if ( count ) if ( count ) printf(Plus numer:%d,average value:%.2f, printf(Plus numer:%d,average value:

32、%.2f, count, 1.0*sum/count); count, 1.0*sum/count); else printf(Plus numer: 0, average value: 0); else printf(Plus numer: 0, average value: 0); :输入:输入1010个整数,求其中正数的个数及平均值,精个整数,求其中正数的个数及平均值,精确到小数点后两位。确到小数点后两位。咀烯诀民郊谣筛氓阿锗妊帽晋些叼囤翠猾莲莆胯竭希钟挟炸姑叼迟稳雌滔第六章循环结构的C程序设计第六章循环结构的C程序设计gotogoto语句及用语句及用gotogoto构成循环构成循环lg

33、oto语句一般格式:goto语句标号;.标号:语句;n功能:使系统转向标号所在的语句行执行功能:使系统转向标号所在的语句行执行n说明:语句标号用标识符表示,要符合标识符命说明:语句标号用标识符表示,要符合标识符命名规则名规则goto loop;goto 255; 蜜眠容肚太邓久堪见心辜刮其雀惹勋选啮揽猫哪阁毁镇漏折储刹傀歹摈薪第六章循环结构的C程序设计第六章循环结构的C程序设计#includemain()inti,sum=0;i=1;loop:if(i=100)sum+=i;i+;gotoloop;printf(%d,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4s

34、um=4950+100=5050循环初值循环终值循环变量增值循环条件循环体n用用if if 和和gotogoto语句构成循环语句构成循环C不主张使用不主张使用goto循环循环嘶怀嘻殖皖芬曹手竿扫凌潞惭复剖注抖舔啮活幅沤唇捌词较蒜脉小捣舞冉第六章循环结构的C程序设计第六章循环结构的C程序设计 从键盘输入一组数据,以从键盘输入一组数据,以0结束输入,求结束输入,求数据和数据和#includemain()intnumber,sum=0;read_loop:scanf(%d,&number);if(!number)gotoprint_sum;sum+=number;gotoread_loop;prin

35、t_sum:printf(Thetotalsumis%dn,sum);寻攫侦步讽有拱惰捻抄承轿坞残悉踩级满瞻戮骏或消宿衙贴饰缚洋伯卧寞第六章循环结构的C程序设计第六章循环结构的C程序设计6-6 几种循环语句的比较几种循环语句的比较lC语言三种循环语句的特点如下:1.for和while先判断循环条件后执行循环体, do-while语句先执行循环体后判断循环条件。2.while和do-while语句的条件表达式只有一个, for语句有三个。3.while、do-while、for可以相互替换使用。4.while语句多用于不需要赋初值的或循环次数不定的情况。for语句多用于要赋初值或循环次数固定的情

36、况。 do-while语句多用于至少要运行一次的循环控制。5.循环语句可以嵌套,循环可以并列,但不能交叉。瓮服说新疥桅柑隧雌是辑物碑揣晨骑漠蠢吾舟泼求童疵饭甭荧眼搪衷虫孩第六章循环结构的C程序设计第六章循环结构的C程序设计l为了保证循环体正常运行,应该特别注意:为了保证循环体正常运行,应该特别注意:l 循环控制条件循环控制条件l 控制条件的初始状态(初始值)控制条件的初始状态(初始值)l 循环体内部对控制条件的影响循环体内部对控制条件的影响以上三个方面相互配合,相互影响,共同完成循环控制以上三个方面相互配合,相互影响,共同完成循环控制棍纽搅比沥寅鹏大辨绎淮秩枷热唐彭粗身圈梆岗燥呼稠憨穆疑蹋肢务

37、哇胎第六章循环结构的C程序设计第六章循环结构的C程序设计6.7 循环的嵌套v定义:一个循环体内又包含了另一个完整的循环结构v三种循环可互相嵌套,层数不限(1)while()while().(2)dodowhile();.while();(3)while()dowhile();.(4)for(;)dowhile();while().内循环外循环内循环纹参敝领唾炯弧至茨疾每盏朽馏褥黎挚镇唱措谣缩瞪劣党俭劲干琉事嫡根第六章循环结构的C程序设计第六章循环结构的C程序设计程序举例main() int i,j; for(i=1;i=2;i+) printf(“ni=%dn”,i); for(j=1;j=3

38、;j+) printf(“j=%d,”,j); 记惜酿墅炉寞惜贸滚奖每厄纸圃海婴纤蔡签迹才雁量革牺揽诽叠棍闯华耸第六章循环结构的C程序设计第六章循环结构的C程序设计程序举例内层循环终止内层循环终止j=2j=3j=4main() int i,j; for(i=1;i=2;i+) printf(“ni=%dn”,i); for(j=1;j=3;j+) printf(“j=%d,”,j); 和玖驻拳墙椽盟凛冲匣戎铱绩高撰望糖满烛唁净腕兢碾盟粗记厌趣宾漾低第六章循环结构的C程序设计第六章循环结构的C程序设计程序举例运行结果:循环全部终止循环全部终止i=2i=3main() int i,j; for(i

39、=1;i=2;i+) printf(“ni=%dn”,i); for(j=1;j=3;j+) printf(“j=%d,”,j); 漂咖滋说缨钥腰趾迫酚氨杉畦进痒尤蹈即墒玄昔史眯逸茬角乌屡莫枚剁奎第六章循环结构的C程序设计第六章循环结构的C程序设计v嵌套循环的跳转禁止:l从外层跳入内层l跳入同层的另一循环l向上跳转v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉v嵌套循环的执行流程膜腰辜狐蹋揉滑度漓钝颖锗掩倚槐促择嫉鲍躯言娠啸惋掷流哩独潮窜羚试第六章循环结构的C程序设计第六章循环结构的C程序设计:输出下三角形乘法九九表。 1 2 3 4 5 6 7 8 9- 1 2

40、 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81 假设:行号为i ,列号为ji=6i=6j=5j=5i*ji*j(1=i=9)(1=i=9)(1=j=i)(1=j=i) 则则:第:第 i i 行中要输出行中要输出 j j 个乘积个乘积输出项输出项aij和行和行(i)、列、列(j)的关系的关系垂征置酋撂拣讽拷坠弧莹剧鞘梆疆奎诧叛偿鞘钮申不驶柑令粹趣映揭界萍第六章循环结构的C程序设计第六章循环结构的C程序设计#i

41、nclude #include main ( )main ( ) int i=1, j; int i=1, j; /* i:/* i:行计数器行计数器 j: j:列计数器列计数器 */ */ while( i= 9 ) while( i= 9 ) /* /* 控制打印表头控制打印表头 */ */ printf ( %4d, i+); printf ( %4d, i+); printf (n-n); printf (n-n); i=1; i=1; while ( i= 9 ) while ( i= 9 ) /* /* 行控制行控制 */ */ j = 1; j = 1; /* /* 列计数器置列

42、计数器置1 */1 */ while ( j = i ) while ( j = i ) /* /* 嵌套的二重循环。输出第嵌套的二重循环。输出第i i行行 */ */ printf (%4d, i*j ); printf (%4d, i*j ); j +; j +; /* /* 列计数器列计数器+1 */+1 */ printf (n); printf (n); /* /* 一行输出结束后,输出一行输出结束后,输出n */n */ i +; i +; /* /* 行计数器行计数器+1 */+1 */ 外层外层循环体循环体执行执行1次,次,内层内层循环要输出循环要输出1行行晨狭后根甜吗磷私捂婶

43、淘衣剐婶胎措昧替每袄瓜岛圭蔷蘑钨颠怯律寸箍皋第六章循环结构的C程序设计第六章循环结构的C程序设计程序设计的一般步骤1.分析题意,明确问题的性质 数值问题 / 非数值问题2.建立问题的描述模型 数学模型 / 过程模型3.设计/确定算法 数学问题:数值分析 非数学问题:数据结构 / 算法分析与设计一般方法:穷举 / 递推 / 递归 /.4.编程调试5.分析运行结果6-8 程序举例程序举例瓦惊御兴碳傻雷次跃裤恍曙伟骇腹厨煌咆肯林妇语懊呆驾养昭痉紫姐随顾第六章循环结构的C程序设计第六章循环结构的C程序设计 :判断输入的整数是否是素数:判断输入的整数是否是素数l算法算法 使用穷举法,从使用穷举法,从2

44、2开始尝试能否整除整数开始尝试能否整除整数m m。 #include #include “stdio.hstdio.h” main() main() int m,i; int m,i; scanf( scanf(“%d%d”,&m);,&m); for(i=2;im;i+) for(i=2;i= m) if(i = m) printf( printf(“%d is a prinme number.n%d is a prinme number.n”,m);,m); else else printf( printf(“%d is not a prinme number.n%d is not a p

45、rinme number.n”,m);,m); 枫争币成禹命蕊衅蹦握怜族醇求跺犹采删辣央魄铂芭劝贴式纵哎瘫谚沾化第六章循环结构的C程序设计第六章循环结构的C程序设计l程序的优化程序的优化 对于穷举法来说,为了提高程序的效率,就要对于穷举法来说,为了提高程序的效率,就要减少尝试次数。减少尝试次数。#include #include “math.hmath.h”main( )main( ) int m,i,k; int m,i,k; scanf( scanf(“%d%d”,&m);,&m); k=sqrt(m); k=sqrt(m); for(i=2;i=k;i+) for(i=2;i=k+1)

46、printf( if(i=k+1) printf(“%d is a prime number.n%d is a prime number.n”,m);,m); else printf( else printf(“%d is not a prime number.n%d is not a prime number.n”,m);,m);15 = 3 * 5;15 = 3 * 5;尝试尝试 15 % 3 15 % 3 以后,没有必以后,没有必要再尝试要再尝试 15 % 5 15 % 5。k k是尝试的终点。是尝试的终点。栅圆废最披阿瞅弯噬洞藏媚镭歉建伊钓俘律值株微恕振莲承钵沉朴腺藻潘第六章循环结构的

47、C程序设计第六章循环结构的C程序设计 :如何判断一个整数是另一个整数的平方:如何判断一个整数是另一个整数的平方 从从键键盘盘上上任任意意输输入入一一个个正正整整数数,要要求求判判断断该该正正整整数数是是否否是是另另一一个个整整数数的平方。的平方。l问题分析与算法设计问题分析与算法设计设:输入的正整数为设:输入的正整数为i i,若,若i i满足:满足:i = = m * mi = = m * m (m m为整数为整数00)则则i i为整数为整数m m的平方。的平方。main( )main( ) int i, m; int i, m; scanf (“%d”, &i); scanf (“%d”,

48、&i);for( m = 1; m * m i; m + +) for( m = 1; m * m i; m + +) ;if( i = = m * m)if( i = = m * m) printf(“% d * % d = % d n”, i, i, m); printf(“% d * % d = % d n”, i, i, m); 催硬髓狗馒够阉唐慑械卓户叙六擅级菇寓磋愤茵爆徐莫雅直跃麻绢撅浇签第六章循环结构的C程序设计第六章循环结构的C程序设计:抓交通肇事犯 一辆卡车违犯交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征: 甲说:牌照的前两位数字是相同的;

49、乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,说:四位的车号刚好是一个整数的平方。 请根据以上线索求出车号。l问题分析与算法设计 按照题目的要求造出一个前两位数(i)相同、后两位数(j)相同且相互间又不同的整数。得到: (1)0i=9 0=j=31)取币漆霍暖警槐耿娇锤喇鉴循山柯秸胡庙锡女揣设志么锹蘑噶宋双巳昌某第六章循环结构的C程序设计第六章循环结构的C程序设计main( )main( ) int i,j,k,m; int i,j,k,m; for(i=1;i=9;i+) for(i=1;i=9;i+) /* i:/* i:车号前二位的取值车号前二位的取值 */ */ for

50、(j=0;j=9;j+) for(j=0;j=9;j+) /* j:/* j:车号后二位的取值车号后二位的取值 */ */ if(i!=j) if(i!=j) /* /* 判断两位数字是否相异判断两位数字是否相异 */ */ k=i*1000+i*100+j*10+j; k=i*1000+i*100+j*10+j; for(m=31;m*mk;m+) for(m=31;m*mk;m+) ; if(m if(m * * m m = = = = k) k) /* /* 判断是否为整数的平方判断是否为整数的平方 */ */ printf(Lorry_No. is %d.n, k); printf(L

51、orry_No. is %d.n, k); l运行结果运行结果:Lorry_No. is 7744.Lorry_No. is 7744.须永噬豪消盗恼钟噬踏丫决虎崔棘超剖毡喇女嘲垢防汁弹污和叫窿厕假鞭第六章循环结构的C程序设计第六章循环结构的C程序设计:百钱百鸡问题 中国古代数学家张丘建在他的算经中提出了著名的“百钱百鸡问题”: 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?l问题分析与算法设计设:要买x只公鸡,y只母鸡,z只小鸡,可得到方程: x + y + z = 100 5 x + 3 y + z / 3 = 100 取值范围:0 = x、y、z = 10

52、0 可以采用穷举法求解。遥惜汝囱宰蔗倡贴饼漠就药成腿丑研醋勘碰拿惫提胚量滑瓤臭慌垛妆便粒第六章循环结构的C程序设计第六章循环结构的C程序设计main( )main( ) int x,y,z,j=0; int x,y,z,j=0; for(x=0;x=100;x+) for(x=0;x=100;x+) for(y=0;y=100;y+) for(y=0;y=100;y+) for(z=0;z=100;z+) for(z=0;z=100;z+) if(x+y+z=100 & 5*x+3*y+z/3=100 ) if(x+y+z=100 & 5*x+3*y+z/3=100 ) printf(%2d:

53、cock=%2d hen=%2d chicken=%2dn, printf(%2d:cock=%2d hen=%2d chicken=%2dn, +j,x,y,z); +j,x,y,z); 运行结果:运行结果: 1: cock= 0 hen=25 chicken=75 1: cock= 0 hen=25 chicken=75 2: cock= 3 hen=20 chicken=77 2: cock= 3 hen=20 chicken=77 7: cock=12 hen= 4 chicken=84 7: cock=12 hen= 4 chicken=84蜕菩陀慨庐椽伪派叭蝶貉蓝积梆绽娇锈斋戴擎烫

54、淫纬升对汾仆偷翱告旁脯第六章循环结构的C程序设计第六章循环结构的C程序设计l丢失重要条件:z应该能够被整除。main( ) int x,y,z,j=0; for(x=0;x=100;x+) for(y=0;y=100;y+) for(z=0;z=100;z+) if(z%3= =0&x+y+z=100&5*x+3*y+z/3=&x+y+z=100&5*x+3*y+z/3= =100=100 ) ) printf(%2d:cock=%2d hen=%2d chicken=%2dn,printf(%2d:cock=%2d hen=%2d chicken=%2dn, +j,x,y,z); +j,x,

55、y,z);l运行程序,正确的结果: 1: cock= 0 hen=25 chicken=751: cock= 0 hen=25 chicken=752: cock= 4 hen=18 chicken=782: cock= 4 hen=18 chicken=783: cock= 8 hen=11 chicken=813: cock= 8 hen=11 chicken=814: cock=12 hen= 4 chicken=844: cock=12 hen= 4 chicken=84 须骇股建星鬼侍篓兢四朵温斟抽舔副瑰谍罩武釜席郭圃耶肯绎知镑葱秸葵第六章循环结构的C程序设计第六章循环结构的C程序设

56、计l优化程序:优化程序: main( )main( ) int x, y, z, j=0; int x, y, z, j=0; for(x=0; x=20; x+) for(x=0; x=20; x+) for(y=0; y=33; y+) for(y=0; y=33; y+) for(z=0; z=100; z+) for(z=0; z=100; z+) if( if(z%3=0&x+y+z=100 & 5*x+3*y+z/3=100)z%3=0&x+y+z=100 & 5*x+3*y+z/3=100) printf(%2d:cock=%2d hen=%2d chicken=%2dn,pri

57、ntf(%2d:cock=%2d hen=%2d chicken=%2dn, +j,x,y,z); +j,x,y,z); l再优化再优化 程序程序: for(x=0; x=20; x+) for(x=0; x=20; x+) for(y=0; y=(100-5*x)/3; y+) for(y=0; y=(100-5*x)/3; y+) z=100-x-y; z=100-x-y; if( z%3=0 & 5*x+3*y+z/3=100) if( z%3=0 & 5*x+3*y+z/3=100) printf(%2d:cock=%2d hen=%2d chicken=%2dn,printf(%2d

58、:cock=%2d hen=%2d chicken=%2dn, +j,x,y,z); +j,x,y,z); 乏气酵蛾稽鼎遮础对哉娩记韦帧赂窟填直扣概字阁述肚鞋诫暑梦彤都寞剑第六章循环结构的C程序设计第六章循环结构的C程序设计穷举法的关键穷举法的关键l数学模型数学模型l适宜进行穷举的数学模型适宜进行穷举的数学模型l决定程序是否正确决定程序是否正确l穷举的范围穷举的范围l明确的穷举终止条件明确的穷举终止条件l决定穷举的效率,范围过大,则效率太低。决定穷举的效率,范围过大,则效率太低。切姜竖稍窖企氖婉以咐宰磅酵炼瞒绎翰话痞务秒庐冠谆谰咙政储檬尾呐城第六章循环结构的C程序设计第六章循环结构的C程序设计

59、:打印边长为m的正方型要求:从键盘输入m值,输出m行每行m个*号。例:输入m=4,输出的图形如下:* * * * * * * * * * * * *l算法分析与设计:1. 输入m,2. 重复打印m行,每行打印m个 *; 加细: 1. 输入m; 2. for ( k=1; k=m; k+) 打印一行中的 m 个 * ;涉瓤吨混狭熏打叔铆旬悯雍埠尸贾姜抬难稗殿佰顿二攒希四弃藻芽呼颖亩第六章循环结构的C程序设计第六章循环结构的C程序设计l算法分析与设计: 加细:1. 输入m;2. for( k=1; k=m; k+) 打印 m 个 * ; 换新行; 加细:1. 输入m;2. for( k=1; k=

60、m; k+) for( j=1; j=m; j+) printf (“*”); printf(“n”) ; 版隶井宛住打突川茎胶欲喷堕枢拦震殆侨岂恨火空靴罢副鸟讯茎膏迂楼伶第六章循环结构的C程序设计第六章循环结构的C程序设计#include main ( ) int k, m, j; scanf( “%d”, &m); for(k=1; k=m; k+) /* 控制打印m行 */ for(j=1; j=m; j+) /*打印一行中的m个*号*/ printf (“*”); printf(“n”) ; l分析方法 逐步求精法。对于复杂问题,不可能一下得到程序,可以先将简单的部分明确出来,再逐步对

61、复杂部分进行细化,一步一步推出程序。埠坞蒜男相证泣斋潍碌通罪窃隔轴犯擂谜坏已盛潮壕枚完忻堑座候翻蜜农第六章循环结构的C程序设计第六章循环结构的C程序设计:打印数字魔方 要求:从键盘输入 m 值,输出 m 行的数字方阵。例:输入 m=5 ,输出的图形如下:1 2 3 4 5 2 3 4 5 13 4 5 1 24 5 1 2 35 1 2 3 4 l分析: 1. 重复打印m行。 2. 2. 第第j j行的第一个数字为行的第一个数字为j j,之后依次递增,之后依次递增, 但以但以m m为模为模: : a aijij = ( i + j - 2 ) % m + 1 = ( i + j - 2 ) %

62、 m + 1输出项和行、列的关系输出项和行、列的关系缅慎妹性郭棋钻珊楚党翌什氏蝗版饱谬擞苏湍趾递屎咨棍参铝惯菜糊称畔第六章循环结构的C程序设计第六章循环结构的C程序设计#include #include main ( )main ( ) int i, j, m ; int i, j, m ; printf(Enter M:); printf(Enter M:); scanf(%d, &m); scanf(%d, &m); for(i=1;i=m;i+ ) for(i=1;i=m;i+ ) /* /* 控制打印控制打印m m行行 */ */ for(j=1;j=m;j+ ) for(j=1;j=

63、m;j+ ) /* /* 打印一行中的数字打印一行中的数字 */ */ printf( %d, (i+j-2)%m + 1 ); printf( %d, (i+j-2)%m + 1 ); printf(n); printf(n); 孕耿旦茄洪官恕哪娘珐苏黔廷露荤徽蛙童饼籍接广窜爪蒸霉甘辛斋韩陕赶第六章循环结构的C程序设计第六章循环结构的C程序设计问题描述:用“*”输出一个菱形图案,图案如下:*main()int i,j,k; for(i=1;i=4;i+) for(j=1;j=4-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(*); printf(n)

64、; for(i=1;i=3;i+) for(j=1;j=i;j+) printf( ); for(k=1;k=7-2*i;k+) printf(*); printf(n); 嵌套循环示例嵌套循环示例输出:*控制打印的行数控制每行打印的空格数控制每行打印的*号数控制打印的行数控制每行打印的空格数控制每行打印的*号数沛胁芥杀噪戳任着炽静熄恿需纯甲次闭斥义处惨验邹耽姐珐螟仕烟恐山恿第六章循环结构的C程序设计第六章循环结构的C程序设计问题描述:打印输出100至200之间的全部素数。分析:素数是指只能被1和它本身整除的数。算法比较简单,先将这个数被2除,如果能整除,且该数又不等于2,则该数不是素数。如果

65、该数不能被2整除,再看则是否能被3整除。如果被3整除,并且该数不等于3,则该数不是素数,否则再判断是否被4整除,依此类推,该数只要是能被小于本身的某个数整除时,就不是素数。main() int i,j,n; n=0; for(i=100;i=200;i+) j=2; while(i%j!=0) j+; if(i=j) printf(%4d,i); n+; if(n%8=0) printf(n); printf(n); 嵌套循环示例嵌套循环示例输出:从100到200之间所有的素数为: 101 103 107 109 113 127 131 137 139 149 151 157 163 167

66、173 179 181 191 193 197 199控制每行输出8个素数如果第一个能被整除的数等于该数本身,则说明该数为素数从2到i之间寻找第一个能被整除的数塑户阑怕墙垂宫将权渍馈撰榆移接篱上趁卡圈额貌腥镐春衷蓟锗刹烽廉唉第六章循环结构的C程序设计第六章循环结构的C程序设计嵌套循环示例嵌套循环示例main() int i,num; char answer; do printf(请输入一个数:);scanf(%d,&num);printf(n);for (i = 1; i = 10; i+) printf(=);printf(n 该数是 %d,num);printf(nn 您是否还要输入其他的

67、数(y/n)?);fflush(stdin);answer = getchar(); while (answer != n);输出:请输入一个数: 58该数是 58您是否还要输入其他的数(y/n)? y请输入一个数: 64该数是 64您是否还要输入其他的数(y/n)? n勇如秉桃馒雷捻继拉户求侣破痛羽娶惺继刑虱粕衬衣额愉窘淫隆愿忿寡邵第六章循环结构的C程序设计第六章循环结构的C程序设计译密码例如Hello,world!译成密码:Lipps,asvph!绵姚好疽模萎简鲍逼磺海郊衅个檀狞兼干西现披筒肃宝朝捕岔顾街候凳芯第六章循环结构的C程序设计第六章循环结构的C程序设计 #includemain(

68、) char c; while(c=getchar()!=n) if (c=a&c=A&cZ&cz) c=c-26; printf(“%c”,c); 年炎韶浆蠕医化拳景颜祷韵拈吵束俩妒术宜老轩闪狰恫脂凝雀范铱搀漠锣第六章循环结构的C程序设计第六章循环结构的C程序设计例6.4求sn=a+aa+aaa+aaa 其中a是一个数字,n由键盘输入。2+22+222+2222+main()int a,n,count=1,sn=0,tn=0; scanf(“%d%d”,&a,&n);while(count=n) tn=tn+a; sn=sn+tn; a=a*10; count+;printf(“%dn”,s

69、n);炊栖搐祟教巷赘妄柱打姐顶补哑僳癣喝调摆旺跌咎搂融案爪奠牌残岂负典第六章循环结构的C程序设计第六章循环结构的C程序设计l1.求多项式11/21/31/41/100 的值。l2.从键盘输入一行字符,统计其中各类字符的个数。l3.求两个整数m,n的最大公约数和最小公倍数。l4.韩信点兵又称为中国剩余定理,相传汉高祖刘邦问大将军韩信统御兵士多少,韩信答说,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人。刘邦茫然而不知其数。(兵数范围在1000内) l5.输出100-200之间凡是包含数字5的数。l6.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2

70、、3,而6123,因此6是“完数”。编程序找出1000之内的所有完数,并输出。练习魂叼勉祸屠筒手谱撒乖浪悯菏币坑纵名舶峡坦沿够凝平蜗贺憎癸环扦绥糯第六章循环结构的C程序设计第六章循环结构的C程序设计l7.试编程序,找出10000以内的所有同构数。同构数是这样一组数:它出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。l8.每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一天的2倍,直到购买的苹果个数达到不超过100的最大值,每天平均花多少钱?l9.两个不同的整数a,b,如果a的所有因子之和等于b,b的所有因子之和等于a,则a与b互称为亲密数。打印出1000以内所有的亲密数对。10.输出如下图案: ABBBCCCCCBBB A涧题呐匣庚祟赋亢义昔浩沃痰以瓦签玻帐惑夏塔亏溉泉揖耳踪争画谆鸥庞第六章循环结构的C程序设计第六章循环结构的C程序设计t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi分子:1,-1,1,-1分母:1,3,5,7,.口纬胡住漳泛榜郊氰松能成楚诞游阉嘛内嗜氧及摆拎允镶惕偏遍目垂叙此第六章循环结构的C程序设计第六章循环结构的C程序设计

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

最新文档


当前位置:首页 > 办公文档 > 工作计划

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