第5章循环结构设计程序设计.ppt

上传人:京东小超市 文档编号:6048435 上传时间:2020-08-29 格式:PPT 页数:50 大小:486.50KB
返回 下载 相关 举报
第5章循环结构设计程序设计.ppt_第1页
第1页 / 共50页
第5章循环结构设计程序设计.ppt_第2页
第2页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章循环结构设计程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章循环结构设计程序设计.ppt(50页珍藏版)》请在三一文库上搜索。

1、第5章 循环结构程序设计,晃池斩溺频谨绢臃磷就盼毅体浮殖泉乖凿名停曹枚氛散增客毁码赡映把夏第5章循环结构设计程序设计第5章循环结构设计程序设计,学习目标,理解循环结构的概念。 掌握如何用while语句构成循环结构。 掌握如何用do-while语句构成循环结构。 熟练掌握如何用for语句构成循环结构。 掌握循环结构的嵌套使用。 理解break和continue语句应用于循环体时的区别。,确隧硬挝牙刘佰女吵肠协熊抄倡苍坝血腮翌存钓生吨晓宴愁铃莆力丸侈阑第5章循环结构设计程序设计第5章循环结构设计程序设计,在C语言中可以用以下语句来实现循环: 1)while语句。 2)do-while语句。 3)f

2、or语句。 4)goto语句和if语句。,循环 是一种对同一程序段有规律的重复 被重复执行的部分叫循环体。,5.1 引言,饲慨贡疤储衍痢火跌蛤蛰雌奈谜墨盯散咳伙忌耕用撼岁室童壕啸积辱怂筑第5章循环结构设计程序设计第5章循环结构设计程序设计,n! =123n,用fac来存放结果:,初始化值为1,fac,1,2,n,fac1,fac,fac2,fac,facn,fac,faci,fac,累乘器,计数器,例如,求阶乘,翌灼闰凭汝甥捂悼箱育俊慰嘎淳刚伍蚌纳负鹅秩磐曙徽呀做泣锐策腹胃偿第5章循环结构设计程序设计第5章循环结构设计程序设计,5.2 while语句,真(非零),循环体,假(零),while

3、语句的形式: while (表达式) 循环体;,while 语句常称为“当型”循环语句。,绑逐镐葱农胞录誓舱脉齐袱贿吭馋变枷陵铀浆吠劳洲胯邦烦尾枚索普街淋第5章循环结构设计程序设计第5章循环结构设计程序设计,【例5-1】用while语句构成的循环结构求n!,算法: step1:定义初始化变量。 本程序需要三个变量,一个用来接收n,一个用来表示求阶乘过程中数据从1到n的变化,还有一个保存计算结果 step2:输入n,需要考虑输入数据合法性的问题 step3:计算n!就是一个循环累乘求积的过程 n!= 1*2* 3* . (n - 1)* n,秤勿六牲鲁扰粳赃甘挑闲殷驻挟瑰锅姨翻昔漓遍锭低冗戒尺肄

4、轮鼠仪迪湾第5章循环结构设计程序设计第5章循环结构设计程序设计,【例5-1】 n!的C语言程序,#include void main ( ) int n,i=1; long int fac; printf(please input n(n=0):); scanf(%d, ,循环变量的初始化,累乘器的初始化,循环控制条件,求阶乘,修改循环变量,肘捧臻钥摈眩巾托怜行首泊鬃麦剥试笆词这椭戌腮猩柜德贮朔衬煽钥唬激第5章循环结构设计程序设计第5章循环结构设计程序设计,注意:,先判断表达式,后执行语句。,表达式同if语句后的表达式一样,可以是任何类型的表达式。,循环体多于一句时,用一对 括起。,while

5、循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。,奔甥羊内噶桐挎齿痕欧恬债暗贷雨羡标赁吧援甲灼屡样仰讳背圆较舟斡淌第5章循环结构设计程序设计第5章循环结构设计程序设计,#include stdio.h void main() float n; scanf( %f ,例:输入一系列实数,判断每个数的正负,输入0时,结束循环,输入数据,为第一次判断做准备,while(n!=0),判断是否结束, if(n0) printf( + ); else printf( - ); scanf( %f , ,判断正负号,继续输入下一个数,偏糙忌绅膛原已塑堪谍莽秋曳佳录筷矣伊蕉善皇拜魂碱锌关

6、厘障牡艇传厩第5章循环结构设计程序设计第5章循环结构设计程序设计,#include stdio.h void main() char ch;int num=0; ch=getchar();,例:统计从键盘输入的一行字符的个数(以回车键作为输入结束标记),while(ch!=n),判断是否输入结束, num+; ch=getchar(); ,printf(num=%dn,num); ,碍豪世集沛苔铲譬晕摊碴凯悄歇谜话糙莎凝锻皑厕棒霖蔬弟赖蕉苇突某庶第5章循环结构设计程序设计第5章循环结构设计程序设计,注意:,表达式在判断前,必须要有明确的值。,循环体中一般有改变条件表达式的语句。,while (

7、表达式)后面没有分号。,略兹计蛆级迭弯淬辗令垒勿浩棵刽猪括吠育缓炒急趁茫埃胶务祈袭扶按巳第5章循环结构设计程序设计第5章循环结构设计程序设计, 5.3 do-while语句,do-while的形式: do 循环体; while (表达式);,do-while语句形式与与直到型循环相似,但它仍然是当型循环。条件为真时执行循环,真(非零),循环体,假(零),壕妻泡喧职痛阶昔悦蕉漆舱哪绥厦候聂蚤橡哪改假绰么拷败彝易孩诞支敦第5章循环结构设计程序设计第5章循环结构设计程序设计,【例5-2】用do-while语句构成的循环结构求n!,do fac*=i; i+; while(i=n);,说明:,先执行语

8、句,后判断表达式。,第一次条件为真时,while,do-while等价; 第一次条件为假时,二者不同。,while(i=n) fac*=i; i+; ,泽耸塔厂饮氨刻怜犹拘拒哎熬年搪喇逛朔胜排给熙骡胳驱瓜宿负逸缆镁拘第5章循环结构设计程序设计第5章循环结构设计程序设计,注意:,在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。,do-while和while语句相互替换时,要注意修改循环控制条件 。,辜棒探棋练缩脂空聚瓦扳谊惧雄掀宏磷艘亮殿戏潘疟佬樟粥卉霸恋狞鸣眨第5章循环结构设计程序设计第5章循环结构设计程序设计,5.4 for语句,for的形式

9、: for(初始表达式1;条件表达式2;循环表达式3) 循环体;,表达式1:用于循环开始前为循环变量设置初始值。,表达式2:控制循环执行的条件,决定循环次数。,表达式3:循环控制变量修改表达式。,循环体语句: 被重复执行的语句。,嘱聊硫担瞒雨肚钩季怂临捻骗车驯金佳密亭拨给仿畏浚挚什刮敲儡薪西芳第5章循环结构设计程序设计第5章循环结构设计程序设计,表达式3,计算表达式1,循环体,假(零),真(非零),for的下一条语句,执行流程:,钎密在禄馆寡刊部艇剐漠穷斋供歌患亡毋舞疵夷召恭指莆柒蒜嗡吝天久参第5章循环结构设计程序设计第5章循环结构设计程序设计,for(fac=1,i=1; i=n; i+)

10、fac*=i;,例如:,它相当于以下语句: fac=1;i=1; while (i=n) fac*=i; i+; ,表达式1;,while(表达式2),表达式3;,均舷柯泣煮僧羹球谍逆坟趣稻憨布淄妓杭晃业载挽槽顾筹逝丫昏芥鲸澄脏第5章循环结构设计程序设计第5章循环结构设计程序设计,说明:,三个表达式都可以是逗号表达式。,三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符不能省略。,赢宴突寝稻汹翌孜察岸荣省段钟搓瓷师增衔天耿河绵孕勿凹箩被妙歉鸡帕第5章循环结构设计程序设计第5章循环结构设计程序设计,for语句中表达式省略的几种情况:,(1)for语句一般形式中的“表达式1”可以省

11、略; 如:fac=1; i=1; for ( ; i=n;i+) fac*=i;,放侦鸳套炒鬃浆南翘匣物贮败咙蕴貌明姜桐柔等饭淌彰绩署桓锹咙泄涉塑第5章循环结构设计程序设计第5章循环结构设计程序设计,(2)表达式2省略,即不判断循环条件,循环会无终止地进行下去,所以此时循环体中要保证循环能正常结束; 如: for(fac=1,i=1;i+) if(in) break; fac*=i; ,屉等锨蜗药盗赦褐甩暑陷远烬疏涣逼椭砌家酋急妆捶玩朔亲柴薛郁踌廷秆第5章循环结构设计程序设计第5章循环结构设计程序设计,(3)表达式3也可以省略,同样此时循环体中要保证循环能正常结束; 如: for(fac=1,

12、i=1;i=n;) fac*=i; i+; ,辩铅德拱瞄嫩叔氮葫播翁紧拖比陵都滞德蛇橇着辰降蜡锡旗织巫楞睫碱题第5章循环结构设计程序设计第5章循环结构设计程序设计,(4) 可以省略表达式1和表达式3,只有表达式2 如: fac=1; i=1; for (;i=n;) fac*=i; i+; ,i=1;fac=1; while (i=n) fac*=i; i+; ,相当于,却刹情伦戒擦荆乓臭仕孤巾讨狰靳卑似谁频掐劈路称概鹅粕逗赂绎垄岩蛊第5章循环结构设计程序设计第5章循环结构设计程序设计,fac=1,i=1; while (1) if(in) break; fac*=i; i+; ,(5)三个表

13、达式都可省略,同样此时循环体中要保证循环能正常结束;,fac=1;i=1; for(;) if(in) break; fac*=i; i+; ,相当于,条件始终为真地执行循环体。,如 :,缩墅角烛嫁展元炭驹斡控灼账哄卧二苔瞥透茬砚囱酱介串始毋蔼远濒刀撮第5章循环结构设计程序设计第5章循环结构设计程序设计,(6)循环体为空语句 对for语句,循环体为空语句的一般形式为: for (表达式1;表达式2;表达式3) ; 如:,在显示器上输出输入的一串字符,输入的字符为*时, 结束循环。 输入abcd* 输出abcd* while( putchar(getchar( ) )!=* ) ;,for(fa

14、c=1,i=1;i=n;fac*=i, i+) ;,螟硼乓仟茫酸峦冲聪熔芋耿彼谎副熔橇鼻市棺普绣袄墒稻限俏于搜烯功泳第5章循环结构设计程序设计第5章循环结构设计程序设计, 5.5 continue语句和break语句在循环体中的应用,5.5.1 continue语句在循环体中的应用 continue语句的一般形式为: continue; 其作用是结束本次循环,即跳过本次循环体中continue 语句之后的语句,转入下一次循环条件的判断,决定循环是否继续执行。,朋辙未抿拯簧要抢淬镐戴林蒙荆缺怎乒局驮泵门其倦篱暴龟崔扣聊独阉硅第5章循环结构设计程序设计第5章循环结构设计程序设计,注意:,执行con

15、tinue语句并没有使整个循环终止 在while和do-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分 在for循环中,遇到continue后,跳过循环体中余下的语句,而转去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试,最后根据“表达式2”的值来决定for循环是否执行。,才邑停钦曙镐惧搞柏紫袁削义得库钮奠牲皂雹尼春拎恒端几洛漾腮汀拥尔第5章循环结构设计程序设计第5章循环结构设计程序设计, 5.5.2 break语句在循环体中的应用,语句形式: break;,用break语句可以使程序执行流程跳出switch语句体, 从而构成多分支选择结构。,b

16、reak语句只能使用在循环体和switch语句内。 作用:,break出现在循环体中时,用于结束当前循环, 跳出break所在的循环结构。,急钦撤铣汽岸把貌律根炕魄肘君常导女止炽慎尸诵腾诈掠盘岸洽缺扰异匆第5章循环结构设计程序设计第5章循环结构设计程序设计,break语句和continue语句的区别:,break语句是完全从循环中跳出 continue语句只结束本次循环。,彦腆哦宠匣汗铅肆位脑绵唤弃树锤豺隘她豫哦陵叔挚涝酶蓉徽卑疗钾票试第5章循环结构设计程序设计第5章循环结构设计程序设计,while(条件) 语句A; break; 语句 B; ,真,语句B,条件,语句A,break,假,结束循

17、环, break语句与continue语句的区别,至此位置,捆抄拎操氦簿逞奏佯觉窥鲍燎坍汰叫饰见瓜资罕空雷虐农号塔胀饼耍嘱原第5章循环结构设计程序设计第5章循环结构设计程序设计,while(条件) 语句A; continue; 语句 B; ,真,语句B,条件,语句A,continue,假,结束循环,至此位置,苏韶福吕姻傻仆蓑釉融愈朽骑崭宣牧焊因争窒洒抨戒灾活肚患烘望蹦吹聂第5章循环结构设计程序设计第5章循环结构设计程序设计,【例5-3】编程实现如下要求:找出1到100之间的前10个偶数并输出。,while(n100) n+; if(count=10) break; /判断偶数个数 是否已满10

18、个 if(n%2!=0) /判断当前数据是否奇数 continue; /是奇数结束本次循环 printf(“%dt”,n); /打印偶数 count+; /统计偶数个数 ,程序运行结果:,2 4 6 8 10 12 14 16 18 20,骨股裤龄图淬霸径奴琉商翘囱判旺屎传挠除堕絮瑶晾鄂暴蔡挽蚤验简儿诅第5章循环结构设计程序设计第5章循环结构设计程序设计,在一个循环体内又包含有另一个完整的循环结构, 称为循环嵌套。, 5.6 循环的嵌套,嵌套时,每一层循环在逻辑上必须是完整的。,前面介绍的三种类型的循环:while 、do-while、for三种都可以互相嵌套。,澜站软曾乾苞坤斤章铸歇昌撰迭宰

19、颗垒郡呜治缘邪唤笺沙伶河辰国嘉所雹第5章循环结构设计程序设计第5章循环结构设计程序设计,循环嵌套时正确和错误的逻辑关系,for(.) . for(.) . ,并列循环,嵌套循环,交叉循环,for(.) . for(.) . ,错误,腾砰始擦劳池货酸腥姐缔凋僻蓄和销缝拎卧怖氮诫料傲很撕瓤缨冕缸酶厨第5章循环结构设计程序设计第5章循环结构设计程序设计,真,真,外循环初始条件,内循环初始条件,内循环体,外循环条件,假,内循环条件,假,内循环循环条件,外循环循环条件,循环结束,二重循环嵌套结构执行流程,谁课拢展尽疲祭困菜栖涎掘阅阀酵阳鼻淳匆佣巳再务彤涵扭耸当弦僻疡贼第5章循环结构设计程序设计第5章循环

20、结构设计程序设计,程序范例,使用双层循环输出下面的图形 * * *,多遵公忠评彰晴触丧写枕肛圾胖诸里茫哩茵辕丁昧蔫疲酪陵变至虑杉瞧奇第5章循环结构设计程序设计第5章循环结构设计程序设计,#include stdio.h main( ) int i, j, k; for(i=0;i=2; i+ ) for(j=0;ji;j+) printf( ); for(k=0;k=3;k+) printf(*); printf(n); ,程序代码如下:,摘易迹逢缔兵今逞鞠渡扣详博忍港畦羚榔誉唐竭膳盛摆棘炸弓揪缉牡厘蒲第5章循环结构设计程序设计第5章循环结构设计程序设计,由i控制的外层for循环中内嵌了两个平

21、行的for循环 由j控制的for循环体用来输出空格 由k控制的for循环体用来输出“*”号 当i等于0时,由j控制的循环,因为j的值为0,表达式ji的值为假,循环体一次也不执行,接着执行由k控制的循环,连续输出四个“*”号;当i等于1时,由j控制for循环体执行一次,输出一个空格,这就使得接着输出的四个“*”号右移一个字符位置 第三行续依次类推,代码分析:,郴米玲饶翔充啄触猖氮讼慕开踌眯鬃超寂纳遁恼嘉避仅咨等翘沿纬妨琼踊第5章循环结构设计程序设计第5章循环结构设计程序设计,注意: 以上内嵌的第一个for循环的结束条件和循环的控制变量i有关; 第二个for循环结束条件是固定不变的。 下面给出了以

22、上双重循环中i,j 和k值的变化规律。,i的变化j的变化k的变化 000,1,2,3,4 10,10,1,2,3,4 20,1,20,1,2,3,4 3,衔瑞充跑严黔罚虹尾眩驹佰讳衫鬼测剩淘跋泄昭仟意梨帐乔醉远漫排吵竣第5章循环结构设计程序设计第5章循环结构设计程序设计, 【例5-4】打印九九乘法表,算法分析: 采用双重循环,逐行输出。 外层循环控制行数,九九乘法表共有九行,因此外层循环次数为9 每一行的具体输出一般分为3步: 1)确定起始打印位置。本例每行左对齐。 2)输出该行数据,因为有多项数据,需要嵌套一个内层循环完成对本例,若行号用i表示,每一行有i个数据项式子,所以内层循环次数与行号

23、相关,从1变化到i。 3)每输完一行进行换行操作。,娠囚表翟诌卞蓉瓣据萝哟啪峰叹始闰驭沮凸逊盅魔尾斗斡难昧由蓟司搭愚第5章循环结构设计程序设计第5章循环结构设计程序设计,具体程序如下:,#include void main() int i,j; for (i=1; i=9; i+) for (j=1; j=i; j+) printf (%d*%d=%-4d, i,j,i*j); printf(n); ,舶性盖豹系伺颂泞峭片烯恐儿惶朴诞绅百口奥钠坦市婉歪蛙虹尹戏炕醋殴第5章循环结构设计程序设计第5章循环结构设计程序设计,5.7 goto语句与标号,goto 语句一般形式: 语句标号: goto

24、语句标号;,作用:无条件转向“语句标号”处执行。,“语句标号”是一个标识符,它表示程序指令的地址。 语句标号仅仅对goto 语句有效,对其它语句不影响。,无条件转向使程序结构无规律、可读性差。 所以goto语句不符合结构化程序设计准则, 一般应避免使用goto语句, 除非能在很大程度上提高程序的执行效率, 才适当使用它。,瘤掳笺秃咀仇嘱钨剪离馆天赐尝丈跺醋墅狗赖叹逼唯赫郭渤腺想忿拆射靳第5章循环结构设计程序设计第5章循环结构设计程序设计,5.8 应用举例, 【例5-6】判断一个数是否为素数 算法分析: 素数是指那些大于1,且除了1和它本身以外不能被其他任何数整除的数。 为了判断某数x是否为素数

25、,采用最简单的方法:用2、3、4、x-1这些数逐个去除x,只要能被一个数整除,x就不是素数; 否则,x就是素数。,烂棠闺晶貌橱染雹敢晓钧昭序巫分渠砖啄觉际恰藤鸟敷趣色绽鞘来颇半遇第5章循环结构设计程序设计第5章循环结构设计程序设计,程序代码:,#include #include void main() int x,k; int flag=1; scanf(%d, ,循环部分可优化化为如下形式:,for(k=2; k=sqrt(x);k+) if(x%k=0) flag=0; break;,泉招架式咐懒估苞唆之酝草脑桩进离挫着葬讫坷于苑俯港汰彦赚苯族市缀第5章循环结构设计程序设计第5章循环结构设

26、计程序设计, 【例5-7】计算裴波那契数列的前十项,算法分析: 斐波那契数列的变化规律是: 第一项和第二项为1 从第三项开始,每一项的值为前两项的和 可以用递推算法来求出斐波那契数列中每项的值 用变量f1和f2存储第一个数和第二个数,f3保存第三个数,以后只要改变f1,f2的值,即可求出下一个数,循环过程:,咱故截饼近巫鞘袒紧浙辜峙旭举屉津沮思拌挖卿旭智瀑倾凌坪槽曙任干挥第5章循环结构设计程序设计第5章循环结构设计程序设计,程序源代码如下:,#include void main( ) int count=3; long int f1,f2,f3; f1=1; f2=1; printf(f1=%

27、dnf2=%dn,f1,f2); while(count=10) f3=f1+f2; printf(f%d=%ldn,count,f3); f1=f2; f2=f3; count+; ,述耕腿鹤悼敌毛燎艰剥菊缉屁砂倒慨凉甫坟野琉确翟嫡来诽兰珐痊肋溪刘第5章循环结构设计程序设计第5章循环结构设计程序设计,【例5-8】计算a+aa+aaa+aaaa+aa.a总共n项的值,算法分析: 关键是计算出每一项的值 每一项与前一项tn的对应关系为:tn=tn+a*10n-1;,程序源代码如下: #include void main( ) int a,n,count=1; long int sn=0,tn=0

28、; printf(please input a and nn); scanf(%d,%d, ,住节稽吃账复鸿辣肆名判赘敦委哈岳咖响掉润欧餐桌蛤般箍疤合抱零幅践第5章循环结构设计程序设计第5章循环结构设计程序设计,例:输入任意一个整数,将其逆序输出,例如输入1234,输出4321。,include stdio.h void main() long y,n; scanf(%ld, ,正驳悦广域蒲咋帧乍矽缠彤倡娄烦究冷及明圣姿圃瓦涤镀啼叫小棍奠园你第5章循环结构设计程序设计第5章循环结构设计程序设计,例:猴子第一天摘下若干个桃子,吃了一半,又多吃了一个。以后每天早晨猴子都吃掉前一天剩下的一半多一个。

29、到第10天时,猴子再去吃桃子时发现只剩下1个桃子。问第一天猴子摘了多少个桃子?,#include stdio.h void main() int sum=1,n; for(n=10;n=1;n-) sum=(sum+1)*2; printf(%d,sum); ,枚吹坞牛冷仲静廊嘱与螺遵越哉橡淀竹蚕气夏意架诺搔匿选诲柜捍继尹怪第5章循环结构设计程序设计第5章循环结构设计程序设计,小结,重点讲解了语言的三种循环语句: while或do-while语句主要用于循环次数及控制条件要在循环过程中才能确定的循环 for语句主要用于给定循环变量初值,步长增量以及循环次数的循环结构。 在循环程序中应避免出现死

30、循环。 三种循环结构都可以相互嵌套组成多重循环,循环之间可以并列但不能交叉。 可以用continue语句和break语句控制程序流程的方向,两个语句的主要区别是:break语句是完全从循环中跳出,continue语句只结束本次循环。 需要掌握累加、连乘、判断素数、斐波那契数列计算等典型循环应用算法,钳尚调窑敌蚤搅距蜀宝艾诺纱沽瓤啮铃迸乾肇异议兴孽演稀圆铺热峪恃领第5章循环结构设计程序设计第5章循环结构设计程序设计,第一次 P6263: 5.4、5.7 第二次 P6263: 5.1、5.3、5.8 第二次 P6263: 5.5、5.10,作业,紧馋柏汉沉贼抿卵僵壕虏传怒捻陈上寐然捏追妙桐厌子鹊俐咯旬销倔程峰第5章循环结构设计程序设计第5章循环结构设计程序设计,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1