
全国计算机等级考试实用应试教程二级C语言循环结构.ppt
34页第5章 循环结构本章要点本章要点:Ø5.1 while语句和用while语句构成的循环结构Ø5.2 do-while语句和用do-while语句构成的循环结构Ø5.3 for语句和用for语句构成的循环结构Ø5.4 循环结构的嵌套Ø5.5 break和continue语句在循环体中的作用Ø5.6 程序举例谦仕泞削棕辖巳肄拙吊阁含由寂桅水藩谓夏玲滔摆佬畦丈萧瓦柒乙偏伺而全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.1.1 while循环的一般形式由while语句构成的循环也称“当”循环,While语句的一般形式为:While(表达式) 循环语句;以下是几点说明:1.while是C语言的关键字2.while后的表达式,可以是C语言中任意合法的表达式,通常为关系表达式或逻辑表达式,但也可以是其他运算表达式当表达式的值为零时,表示条件为假;非零时,表示条件为真蛰醋收役运蜂逸膛艺驴宏酪纽粮芯捉僵赎魁茨票谆灭汛胁弓震拾关操篡匈全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构3.循环体可以是一条简单可执行语句,也可以是复合语句。
4.如果第一次计算时表达式的值就为0,则循环语句一次也不被执行,流程直接跳过While语句,执行下一条语句 ※※重点提示:重点提示:while型循环语句中循环体的执行次数可以从0到无穷若第一次计算表达式的值为0,则循环体执行0次;若表达式恒为真,则陷入死循环埋块左罪搂惟汐编阜鳞柴课佬澎招壶九眼娄隔访蓑沧经拍框凡炮脉疚砍争全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.1.2 while循环的执行过程while循环的执行过程是:计算while后表达式的值,当值为非零时,执行循环体中的语句;当值为零时,退出while循环叙糖喝赴坝玲堆鲤登赫灯捅叶翟替摸伶捕寅椰兜艳勿龙男烬漳衅从匹秽粱全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构注意注意:进入while循环后,一定要有能使此表达式的值变为0的操作,否则,循环将会无限制的进行下去,即进入死循环在程序设计中,这个是不允许出现的例如:计算1+2+3+…+100main(){ int i,sum=0; i=1; while(i<=100) { sum+=i; i++; } printf("d\n",sum);}程序运行结果为:5050笔喝卤妆骗厉譬馈铣背垦拨者悼快盐握染洽美暖理瞩癣丛憨筛友看秒边乡全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构(1)循环语句中“sum+=i”相当于“sum=sum+i”,建议读者采用前一种写法,因为它不仅比后一种写法编码短,而且更能体现C语言的特色。
2)注意注意,在循环体中应有使循环趋于结束的语句例如,本例中的“i++;”,每循环一次i的值就增加1,当i>100时,循环条件就不满足,循环到此结束如果无此语句,则i的值一直不变,循环永不结束,这就称为“死循环”在程序设计中,是不允许死循环出现的 ※※重点提示:重点提示:在循环体中应有使循环趋于结束的语句在程序设计中,是不允许死循环出现的圾洱陋黎算识撤长鞋葛盆蜒施漳陪或距磨婉泞敌盔七廉此主满赣耻寄钉过全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.2 do-while语句和用do-while语句构成的循环结构5.2.1 do-while语句构成的循环结构 do-while是另一种循环结构,它的一般形式为: do 循环语句;while(表达式);漓胰踏畸遣蹋诀政孰酣湍狼漫肢虐雪磺拈稀括丁胶共动丝棠席工刻皱脖燎全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构以下是几点说明:1.do是C语言的关键字,必须和while联合使用。
2.在while(表达式)后的分号“;”不可丢,它表示do-while语句的结束3.while后括号中的表达式可以是任意合法的表达式,由它来控制循环是否执行4.do-while之间的循环体可以是一条可执行语句也可以是由“{}”构成的符合语句杰晰勘高勘枣杯逗徐链峦棘段靠贬剥区遮恋窝触字剐肮尖怨偷煮杰霄象柔全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.2.2 do-while循环的执行过程 do-while语句的执行过程是:先执行一次指定的循环语句,然后判断表达式的值,若表达式的值为非0,再返回重新执行循环语句,如此重复,直到表达式的值为0时才跳出循环语句,执行下一条语句;若表达式的值为0,则不再返回重新执行循环语句,直接退出循环语句,执行下一条语句如图5.1(b)所示 do while语句的特点是:先执行语句,后判断表达式的值故do While语句又称“直到型”循环结构由于是先执行后判断,因此do while语句的循环语句至少被执行一次 注意:while圆括号后面有一个分号“;”,书写时不能丢恩丢冈奄摈城骡亦矛傲湘姑芝混榴谭谰量锦辩医割丛儡潍类一陨孰弹海冻全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构例如:用do while循环结构来计算1+2+3+…+100。
main(){ int i,sum=0; i=1; do { sum+=i; i++; } while(i<=100); printf("d\n",sum);}程序运行结果为:5050格桩涸甲澈梦娜谷赊崩隶慨馈收昔蔑耽群聘镜巷亲腥愿沏内钻委吗凸娱胁全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构可以看出,此例的结果与上节的例程结果是完全相同的,也就是说,对同一问题既可以用while语句来处理,也可用do while语句来处理在一般情况下,用while语句和do while语句处理同一问题时,若二者的循环体一样,运行结果也就一样但当while后面表达式的值一开始就为0时,两种循环结构的结果是不相同的※※重点提示重点提示:do-while语句先执行语句,后判断表达式的值故do-while语句又称“直到型”循环结构由于是先执行后判断,因此do-while语句的循环语句至少被执行一次陷叫宣遗活曝蚂浸称拽掘丫禾秀莫饥逼习城仑熏及槐踢溺断捂续希估动硬全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.3 for语句和用for语句构成的循环结构5.3.1 for语句构成的循环结构for语句的一般形式为:for(表达式1;表达式2;表达式3) 循环语句;以下是几点说明:1.表达式1一般为赋值表达式,用于进入循环之前给循环变量赋初值。
2.表达式2一般为关系表达式或逻辑表达式,用于执行循环的条件判定,它与while、do while循环中的表达式作用完全相同3.表达式3一般为赋值表达式或自增、自减表达式,用于修改循环变量的值挠匹鞍葬智垢裴报萎风诊辜邱茎东玲弓舒绒陕淹琶闹揩装洽之哼缓掳像棚全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构for循环结构是几乎所有高级语言都提供的循环控制结构但C语言中的for语句使用最为灵活,它不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,因而它完全可以代替while语句和do while语句※※重点提示:重点提示:表达式1、表达式2、表达式3都必须为for语句规定的合法的表达式籽叭凹陋娘蕴惑息霉昌徘桐誉亮吠讫这葵汽斥掏默闺厩盟艘显贾绪牛勋预全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构for语句的执行过程是:① 先计算表达式1的值② 再计算表达式2的值,若其值为真,则执行循环体一次;否则跳转第⑤步③ 然后计算表达式3的值④ 转回上面第②步⑤ 结束循环,执行for语句下面一个语句。
5.3.2 for循环执行过程击呢庙卵睹害在舀趣义悉放款盾困亿仆丫洪赃装旧桓蚀菜宽共悍铜高曙唱全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构图5.2 for语句的执行流程图※※重点提示:重点提示:在整个for语句中,表达式1只计算一次,表达式2和表达式3则可能计算多次循环体可能多次执行,也可能一次都不执行霓纳斡叙闯哇髓钞耳汽胜久纲黔聘鞍掣攒投烈稍衰淋泣宝你含镣画腐锗或全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.3.3 有关for语句的说明(1)for语句的一般形式中的“表达式1”可以省略,即:for(;表达式2;表达式3) 循环语句;但注意省略表达式1时,其后的分号不能省略此时,应在for语句之前给循环变量赋初值2)如果省略表达式2,即:for(表达式1;;表达式3) 循环语句;则表示表达式2的值始终为真,循环将无终止地进行下去例如:for(i=1;;i++) printf("%d",i);将无限循环输出1,2,3,4,5,6,……纷派淹砾模棘骄肇壁囱徒愈惺节凹屈猴因抄嫡手阜芯谍港蠢畦呆素扰惦盏全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构(3)如果省略表达式3,即:for(表达式1;表达式2;) 循环语句;此时,也将产生一个无穷循环。
因此,程序设计者应另外设法保证循环能正常结束,可以将循环变量的修改部分(即表达式3)放在循环语句中控制例如:for(i=1;i<=100;){ sum+=i; i++;}上述for语句中没有表达式3,而是将表达式3(i++)放在循环语句中,作用相同,都能使用循环正常结束注意表达式2后面的分号不能省略4)也可以同时省略表达式1和表达式3,即:for(;表达式2;) 循环语句;也即省略了循环的初值和循环变量的修改部分,此时完全等价于while语句亮研娄闽糜也侈迪悸颗犯姥厅沸溺硫升咸论暖党遥曾希连酬坑背绽贤引挎全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构(5)同时省略表达式1、表达式2和表达式3,即:for(;;) 循环语句; 相当于赋循环变量的初值,循环控制条件始终为真,不修改循环变量,故循环将无终止地进行下去6)在for语句中,表达式1和表达式3不仅可以使用简单表达式,也可以使用逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。
在逗号表达式内按自左至右求解,整个表达式的值为其中最右边的表达式的值例如: for(i=1;i<=100;i++,sum=sum+i) 相当于 for(i=1;i<=100;i++) sum=sum+i;(7)在for语句中,表达式一般为关系表达式或逻辑表达式,但也可以是其他表达式(如字符表达式、数值表达式)逮奴裔扳迅糊磕入钒财瘦陋肇女薛划鞋增苦惰磁之沪险烃汇铡蔡攀逗扼议全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构(8)for语句的循环语句可以是空语句空语句用来实现延时,即在程序执行中等待一定的时间如下为延时程序的例子:for(i=1;i<=1000;i++);注意以上语句最后的分号不能省略,它代表一个空语句例如:用for循环结构来计算1+2+3+…+100main(){ int i,sum=0; for(i=1;i<=100;i++) sum+=i; printf("%d\n",sum);}程序运行结果为:5050知坊裸佬敖换丝畜宵里沃鸽菜岿聂鹊牟凡友尝顷誊剃洗杉虏拢捌幽耿教矮全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构 可以看出,此例的结果前两例是完全相同的。
显然,用for语句简单、方便 ※重点提示:for语句中的表达式可以部分或全部语句中的表达式可以部分或全部省略,但两个分号不能省略,且三个表达式均省略省略,但两个分号不能省略,且三个表达式均省略时,循环将会无限制执行,而形成死循环时,循环将会无限制执行,而形成死循环因此,编写程序时,在for后面的一对圆括号内,应只含有能对循环进行控制的表达式,其它的操作尽量放在循环体内完成帅涡帝缀忧哈邑澈时嫉郎蜗逢恍花爽呜蛰肮并徊鸡息沤畸蒋蛾斯脊铰较办全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.4 循环结构的嵌套1.循环嵌套的形式 在一个循环体内又完整地包含了另一个循环,称为循环嵌套循环的嵌套可以是多层,但每一层循环在逻辑上必须是完整的例如以下几种形式的二重嵌套① while与while二重嵌套太负墒骨醇远点贪湖妇陀铸余借这遂废竭瞎署跳斌姨蒂虐蠢会脖抖奎次们全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构while() {… while() {…} }② do while与do while二重嵌套do{…do{…} while(); } while();③ for与for二重嵌套for(;;){…for(;;){…} }① while与while二重嵌套痊避茎峻铰庆茅瓷沛歌橇南蜡闹俞头萝烘佬赶蝎傍澈甩代聊轰泄仍傅澎崔全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构2.关于循环嵌套的几点说明(1)三种循环语句不仅各自可以嵌套,而且还可以互相嵌套。
例如:① while与do while二重嵌套while() {… do {…} while; }嚷津心挨腻滞截蜡滤馒郝足小凋弧帧卓煎疹瑰掌乙瘟寓郸通讲抗举岔弓托全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构② while与for二重嵌套while() {… for(;;) {…} }③ do while与for二重嵌套do{… for(;;) {…}}while();消摸会篙稿醉锰资超头后薯证纠稳渺事碗吟褪血役酚析蓉瞳佬辊监备紧屿全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构(2)使用嵌套时,应注意一个循环结构应完整地嵌套在另一个循环体内,不允许循环体间交叉例如以下循环结构是不正确的:while() {… do {…} } while();(3)除了上述二重嵌套外,还可以有三重嵌套、四重嵌套等多层嵌套。
4)嵌套的外循环和内循环的循环控制变量不得同名,但并列的内、外循环允许有同名的循环控制变量例如以下为合法的循环结构:for(j=1;j<=10;j++) { … for(i=1;i<=10;i++) {…} for(i=1;i<=10;i++) {…} …}共府滩缺考堪挨热菏瘫四刊答貌游代甫俊桔啡滓太揣雍槽瞩垛瘩夕膀巳击全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构3.循环嵌套程序举例利用双层for循环结构打印出9×9乘法表main() { int i,j; for(i=1;i<10;i++) printf("%5d",i); printf("\n"); for(i=1;i<=46;i++) printf("-"); printf("\n"); for(i=1;i<10;i++) { for(j=1;j<=9;j++) printf("%5d",i*j); printf("\n"); } }程序运行结果为: 1 2 3 4 5 6 7 8 9-------------------------------------------------------------------- 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81肥整少侈辜翻驶宝值蹈拇弦沼负壤椭红者傣伤趴鼠凝沸胞油互傈嗜蔼款宾全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构(1)第4~5行和第7~8行为两个并列的for循环结构,作用是输出运行结果的第1行和第2行。
2)第6行和第9行的“printf("\n");”语句作用是输出一行后进行换行处理3)第10~14行为二重嵌套for循环结构,作用是打印乘法表,其中第14行的作用是每次退出内循环之时,即每次输出一行完毕后进行换行处理※※重点提示重点提示:在循环嵌套中,内嵌的第一个for循环的结束条件和外循环的控制变量是有关的,而最里面的for循环的循环结束条件是固定不变的欺茵灸咋青滩捧胞戒狠粮坏葵邹右蹭荤俭戳弟憋盂蕉篱捆芜破陆睫屡糠锭全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.5 break和continue语句在循环体中的作用5.5.1 break语句 在第四章中我们介绍过,使用break语句可以使流程跳出switch语句体,在循环结构中,也可以使用break语句使流程跳出本层循环体,从而提前结束本层循环 break语句的一般形式为: break;叁噪钱引栖荣窟影哦火纹扼虎潘隅龟遂袄架饭逢厨向蔗位爷志即眩闹绕稠全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构关于break语句有以下几点说明:(1)break语句不能用于循环语句和switch语句之外的任何其他语句中。
2)break语句只能用于循环体内,不能用在循环语句上如for(i=1;i<10;break,i++)是不正确的3)break语句只能跳出一层循环,即从当前循环层中跳出如果要跳出多层循环,可使用goto语句匡灾稍仰保牲级橙绸粟营崖庙眉篡孰嘶霹彰倍龙戴世于诈苗涛曰爸筹苍锨全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构例如:设计一个程序,求能同时满足除以3余1、除以5余3、除以7余5、除以9余7的最小正整数main() { int i; for(i=1;;i++) if(i%3= =1&&i%5= =3&&i%7= =5&&i%9= =7) break; printf("%d\n",i); }程序运行结果为:313由于此题无法确定循环的条件和循环次数,因此应采用无限循环配以break语句的方法※※重点提示:重点提示:当break语句出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体,当break语句出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环。
抉虎睡娩兴耳昨睡贼兢吊泊竟漳怀孵垛蓬搀贞辱展见缉峪园风和熄噬釜邻全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.5.2 continue语句1.continue语句的一般形式continue语句的作用是结束本次循环,即不再执行循环体中continue语句之后的语句,而是跳转到循环的开始处,进行下一次是否执行循环的判定它的一般形式为:continue;2.关于continue语句的几点说明(1)continue语句只是结束循环结构中的本次循环,并非跳出整个循环过程具体说:对while和do~while语句,遇continue语句后,转向执行while之后圆括号内的条件表达式的判断;对for语句,遇continue语句后,转向执行表达式32)执行continue语句并没有使整个循环终止3)continue语句与break语句有本质的区别:continue语句只是结束本次循环,而不终止整个循环的执行;而break语句的作用则是强制终止整个循环过程缓匣掘长重琅猪悠竹寐弧糖哩秉瓜菩娇驻发廷阳肛紧狞犯侣权胶颇一鞋刑全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构3.continue语句与break语句的区别例如:打印出数字0~10,但跳过(即不输出)数字5。
main() { int i; for(i=0;i<=10;i++) { if(i==5) continue; printf("%5d",i); } }程序运行结果为:0 1 2 3 4 6 7 8 9 10镑曹疡根低排鞋吃千悬钡痈奏渺妒枫虫乔羊稻币弓霹律唤嚏硷岭办色救相全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构(1)当i等于5时执行continue语句,它的作用是终止本次循环,即不再执行continue后面的语句,故不输出5,而是转转向执行for语句的表达式3,继续进行下一轮循环2)实际上,在程序中完全可以不用continue语句,如本例中可以去掉第6、7两行,而用下面的语句来代替: if(i!=5)(3)如果在本例中将第7行的“continue;”语句,改为“break;”语句,则输出结果为: 0 1 2 3 4 可以清楚地看出break语句是终止整个循环过程,它与continue语句作用是截然不同的。
※※重点提示:重点提示:当break语句出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体,当break语句出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环豁鸡培蹄瘴招卒衰功鸟褪扛缄竣梗遮驮义善于渠扬峪泄簇铱峪诊力舞烩悯全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构5.6 程序举例例1 求两个正整数m和n的最大公约数 例2 输入两个整数m和n,求m~n范围内的所有素数例3 试设计一个程序,将输入的数字逆序输出 例4 用下列公式求π的近似值,直到最后一项的绝对值小于10-4为止 π/4=1-1/3+1/5-1/7+1/9……爬问渣鲤饿烘日灸赚暂钝天龋贾森剪镍辉睹井叮洱食阁四委巷枉鳃羊署罚全国计算机等级考试实用应试教程二级C语言循环结构全国计算机等级考试实用应试教程二级C语言循环结构。
