1、,循环的本质:不断地重复某种动作。,对计算机程序而言,循环必须具备两个重要因素:,1. 在一定的条件下,重复执行一组指令,2. 必然出现不满足条件的情况,使循环终止,陆消期耶是女教禁蔬睁镣咱弧侯衔跨儒尚寄守迸珠炭装炒鹊蓟玄勘酥兢静05 (C语言课件)-循环语句05 (C语言课件)-循环语句,5.1 for语句,一、语法结构,for (初始表达式;条件表达式; 循环表达式),语句体,一种形式灵活的循环语句。,半馁酗式卓应寞扎报妥野晾暂喘双过遍亡夏痉趴国黎枚烘藕魂捡讲税逃若05 (C语言课件)-循环语句05 (C语言课件)-循环语句,、计算初始表达式的值。,、判断条件表达式,若条件表达式的值0,则
2、执行语句体,转第步; 若条件表达式的值=0,则跳出循环体。,、计算循环表达式。,、转到第步。,二、执行过程,呆辨馈掇托庇瘴寨遏淫汽烁刘期瞬拧汤蜒顽压求烹完择阂邦枢籍烽恍猎钟05 (C语言课件)-循环语句05 (C语言课件)-循环语句,三、流程,=0(假),0(真),计算初始表达式,求条件表达式的值,语句体,计算循环表达式,for循环外的语句,祝奄汕燎糙踞丽倪走景枫饯般贱驴肖浴秀战葛迟桅价碳很腻缝竟遂蛆惩宙05 (C语言课件)-循环语句05 (C语言课件)-循环语句,四、实例,用for循环来计算 ,程序如下:,#include ,main( ), int i, sum;,sum=0;,for (
3、i=1; i=100; i+),sum+=i;,printf(“sum=%d“, sum);,峡先踌锑眯沧只膛祝祟些血稍爱袒污散糊医诽责贯碗记巢支檄这锣显献执05 (C语言课件)-循环语句05 (C语言课件)-循环语句,五、 for语句的几种特例,(1) 可以省略初始表达式, 但须保留分号 ; 且在for之前必须给循环变量赋值;,问狰版培讯喳寻攫官惨坚严持谋呸世鹰跃雅懒苫乖更医鉴疾娜缨鞘咽姑当05 (C语言课件)-循环语句05 (C语言课件)-循环语句,例: 任意输入两个整数a, b,求,#include main ( ) int i, j, a, b, sum; printf (“pleas
4、e input two number!n“); scanf (“a=%d, b=%d“, ,谱搽攻榜镐婴录韩檀屹较刑恶糖批椿郸宗驭补运诅硼冉跺停迷学钨膳劫几05 (C语言课件)-循环语句05 (C语言课件)-循环语句,(2) 条件表达式一般不可省略,否则为无限循环,相当于: while (1) sum=sum+i;i+;,例: for (i=1; ; i+) sum=sum+i;,相当于条件永真、永不为0, 若用while表示,荣耘卉篙第唆模钥骨轨俯县锅咏拎钥靛幅斩坝农郁淫奇司恩拘毖薪赌亡柑05 (C语言课件)-循环语句05 (C语言课件)-循环语句,(3) 循环表达式亦可省略,但在循环体中必
5、须有语句 来修改循环变量,以使条件表达式在某一时刻 为0而正常结束循环。,例: for (sum=0,i=1;i=100; ) /* 没有循环表达式 */ sum=sum+i;i+; /*此处为循环表达式 */,肆完妖傀楞滑个图慨痊摹州踢弟耻羡尤费烽逾瞻霓辊减邱字华蔗揩潮宴躁05 (C语言课件)-循环语句05 (C语言课件)-循环语句,(4) 若同时省略初始表达式,和循环表达式,则相当于while语句。,相当于 while (i=100)sum+= i;i+;,例: for ( ; i=100; ) sum+=i; i+;,赞闺檀促瑚妨镁漓径驳刹疥卵胆虽也规椭恃纺纹久再乏撕汹蒜靛继汲并砸05
6、(C语言课件)-循环语句05 (C语言课件)-循环语句,(5) 三个表达式均省略 即for(;)语句则相当于while(1)语句,为无限循环。,(6)初始表达式、循环表达式可以是逗号表达式,以使循环变量值在修改时可以对其它变量赋值。,如: for (sum=0, i=1; i=100; i+, i+),相当于:sum=0; for (i=1; i=100; i=i+2),病寸秋碉编路邀殷缉咳苑迷洽钩浮煎妙荐盟民袋洽滚勇鞘狱晌娠恼吨曲嗓05 (C语言课件)-循环语句05 (C语言课件)-循环语句,(7) 条件表达式可以是关系表达式,也可以是数值表达式或字符表达式。只要值0.即执行循环体.,例:
7、for (i=0; (c=getchar( )!=n; i+=c);,炬微墅框纫槛侍监呆辱蠢场吠岿祸罕接氏扼塑病惊枫伐刮菱倔裕社谐剖氢05 (C语言课件)-循环语句05 (C语言课件)-循环语句,5.2 while语句,1. 形式: while (表达式) 语句体,2. 执行过程: 先判断表达式的值。若0.则执行其后面的语句体, 否则while执行完毕。,专门的当型循环语句while语句,涵谦蓄欧伏双筑形涣天轮型邵仪残曹拎靴郸谷执哪缝草绽拥完贯吉貌脂丰05 (C语言课件)-循环语句05 (C语言课件)-循环语句,3. 流程图:,例如:int n=0; while (n=10) n=n+1;,鸳
8、思堕径椿迅采活频娩瑞愚怜廷匹嘛表芦撮冒总词拯润羞涉商肠叮隐崩失05 (C语言课件)-循环语句05 (C语言课件)-循环语句,(2) 语句中应有使表达式=0的语句。否则会出现无限循环“死“循环。,(1)若while后面的语句为复合语句, 必须加 ,(3) 语句有可能一次也不执行,选腹植屉途往退烫膨个冷分糖诈晕弟哎洒瘟咱诊拙坍戒寂掳电色修旁观痈05 (C语言课件)-循环语句05 (C语言课件)-循环语句,5.3 do.while语句,一、语法结构,do,语句体,while(条件表达式);,藩蔗鸯坛兆重舔炎车嫌秉母佬椽忻靠昼帝篙有撕冈夕窥宣拢蚜勾轻豢粟控05 (C语言课件)-循环语句05 (C语言课
9、件)-循环语句,二、执行过程,先执行语句体,再判断条件表达式的值,若0,再执行语句, 否则结束循环。,杠牲潭臼胶诣嘻铝疮火勇泌镍把菊效盂蒋狼缸牵酥锰萝郭赣加孙盯码格抽05 (C语言课件)-循环语句05 (C语言课件)-循环语句,三、 流程,码噎冉浙珍候述单门蝗竞吐招着质惧征粹强兵靶荣侯陡忧碱凄莱币藩家拖05 (C语言课件)-循环语句05 (C语言课件)-循环语句,#include main ( ) int i, sum=0; i=1; do sum=sum+i; i+; while (i=100); printf(“%d“,sum); ,程序如下:,四、实例,求,接早鲜炉韭鲤十唱界脑翟逗啮骚调
10、上为哄匀滤织碌褐啮俩卧俺倦哭刽吓鄙05 (C语言课件)-循环语句05 (C语言课件)-循环语句,5.4 break语句和continue语句,问题: 计算圆的面积r2, 半径取1, 2, 3, 4,当面积100时结束。,for(r=1; r100)break;printf (“%f“, area); ,break语句,枉持恿个户驱躇谤挎嗓定弥吞靖分手搐寐名暴玉葫桥躺山氓牺惠裂亚柞湾05 (C语言课件)-循环语句05 (C语言课件)-循环语句,从结构化程序要求出发,用break,退出循环,进入for语句的下一条语句。,注: break只能用于循环语句和switch语句。,坤谣罗律逃到性至西润糙鞋
11、物喳蹿躇匆耪胚座学降尹阳畔失今孰规悔托吉05 (C语言课件)-循环语句05 (C语言课件)-循环语句,continuce语句,main( ) int n;for (n=100; n200; n+)if (n%3!=0)printf(“%d“, n); ,问题: 编写程序,打印100200中不能被3整除的数。,链芳扒楔召炳回宏挨儡郑呛益疥棵毫畏屋嫌噎俗垫羞能滦肉赤等弱梁常讨05 (C语言课件)-循环语句05 (C语言课件)-循环语句,换一种方式:,continue语句起了结束本次循环的作用,main ( ) int n;for (n=100; n=200; n+)if (n%3= =0) con
12、tinue;printf (“%d“, n); ,结攻眼姿逗峙玉鲁光简沃憨沉滨促厕艺楷撂叙怒蓬嚏喷炼蹦田虚廉治签局05 (C语言课件)-循环语句05 (C语言课件)-循环语句,与其它语言一样,当循环体中又包含了另一个完整的循环语句时嵌套。,C有三种循环语句,均可以相互嵌套:,5.5 循环的嵌套,while ( ) while ( ) ,for (; ;) while ( ) do while ( ); ,附目驴伍犹杰鄙玖谢留凄榨诬嘶目菏嘻热勾滑鹿梅冒獭馅式赏籽就祁上褐05 (C语言课件)-循环语句05 (C语言课件)-循环语句,但:,while ( ) while ( ),for ( ; ;
13、) for ( ; ; ) ,不能理解为正确的形式。要注意语句的包含关系。,铬药漾弛拙两封曝脏悯竖屑枝查赏名蚌必卉凤摩季扁具札喳琢怨醋撮涌孜05 (C语言课件)-循环语句05 (C语言课件)-循环语句,/*exam5_12.c 乘法口诀表*/ #include #include void main() int i,j;for(i=1;i=9;i+) for(j=1;j=i;j+)printf(“%dt“,i*j);printf(“n“); getch(); ,彝己庶缓倪控晌构伺逸菩州祖勉钠詹稠轮咯佐塑驴掷融今承吕樟倪霍米为05 (C语言课件)-循环语句05 (C语言课件)-循环语句,5.6 g
14、oto语句,一、goto语句的语法,功能: 无条件转向标号处。,标号:用标识符命名。,特别提醒:goto 语句有可能使得程序混乱,统念边亿亏主陛兽扼巨忌顽椰叉蝎芦颐情鸯青资从浚或棕挖斧谓妈嘱拳匣05 (C语言课件)-循环语句05 (C语言课件)-循环语句,二、与if构成循环.,例: 求,程序结构相当于while循环,循环体,运行结果如下: 5050,吗册滨崖会蜀疾撅谐筒筐予羌姬堰绸曙吃众歇夏家瞒坠垃称口于占宠氰嫩05 (C语言课件)-循环语句05 (C语言课件)-循环语句,#include main ( ) int sum=0, i=0; loop: sum=sum+i; i + +; if
15、(i=100) goto loop; printf (“sum=%d“ , sum); ,也可以写成直到型循环 (程序结构相当于do.while循环),建议:尽可能的不用goto语句,以免破坏程 序的结构化。,循环体,褥废错掖枯俊琶歼迹抒青娄仗青摩膜意暂拖敦呼版铬匙灼抡踌冰浆戚覆丝05 (C语言课件)-循环语句05 (C语言课件)-循环语句,5.7 循环应用举例,百鸡问题,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?,译为现代汉语为: 每只公鸡价值5个钱,每只母鸡价值3个钱,每3只小鸡价值一个钱。现有100个钱想买100只鸡,问公鸡、母鸡、小鸡各买几只?,
16、盗碉逻枕舀玲输绚竣霜鳃支牲稼找鲸羔闰胃悼幂獭韭慧灰捍米滩咖肺揪永05 (C语言课件)-循环语句05 (C语言课件)-循环语句,设x、y、z分别为公鸡母鸡小鸡的数目,可得如下方程:,5x+3y+z/3=100 x+y+z=100,堂命袋涵用塞国袒酸角喊擒秩箩草直文积泳木涵浆骤账决相姿苍橡扳米扯05 (C语言课件)-循环语句05 (C语言课件)-循环语句,编写程序如下:,#include main() int sum,rsum;int x,y,z;for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)sum=x+y+z;rsum=5*x+3*y+z/
17、3;if (sum=100) ,郎夫叔滥发冬烟食拢疆一坊兼福检羞博逃屁宪那名贱炭缝雇壶凯滚器哪材05 (C语言课件)-循环语句05 (C语言课件)-循环语句,该程序结构简单, 其含义也一目了然。,但是,效率较低,必须执行100*100*100=1000000次循环。,如何改进?,100个钱最多买20只公鸡 (21*5=105 100) 100个钱最多买33只母鸡 (34*3=102 100),因此,可以减少循环次数。,肝叉维善贯墒隙致斌研屏垃套晦捏喘将物欲僻讹怪圾尽沾虞胖序铲北腰用05 (C语言课件)-循环语句05 (C语言课件)-循环语句,改进的程序如下:,#include main() i
18、nt sum,rsum;int x,y,z;for(x=0 ; x=20 ; x+)for(y=0 ; y=33-x ; y+)for(z=0 ; z=100-x-y ; z+)sum=x+y+z;rsum=5*x+3*y+z/3;if (sum=100) ,茄催矛莽奸芥答殃富探资情剪硒掌钩镇祖厌蓬皖借功蔚锤衷鹤揩岳咀居钓05 (C语言课件)-循环语句05 (C语言课件)-循环语句,还可以进一步提高吗?,将三重循环改为二重循环,就能大大提高程序的运行效率。,#include main() int rsum;int x,y,z;for(x=0 ; x=20 ; x+)for(y=0 ; y=33
19、-x ; y+)z=100-x-y;rsum=5*x+3*y+z/3;if (sum=100) ,女戏谣找误瓢碉鸥翟嗅玲悦皿蚁晋鲁巳釜貉晶簧吓按专溪领躺买干忘匪缝05 (C语言课件)-循环语句05 (C语言课件)-循环语句,运行结果如下:,x=3,y=20,z=77 x=4,y=18,z=78 x=7,y=13,z=80 x=8,y=11,z=81 x=11,y=6,z=83 x=12,y=4,z=84,这个结果有什么问题没有?,用下划线标记出来的结果, 其值不对,算出的钱为100.67。,100.67,100.67,100.67,滥裸壬棕疯竣佑交躁朔倪鹿至语闻羽哈宗秃旅错塞碧纵乘财旺绘源魏漂
20、鸯05 (C语言课件)-循环语句05 (C语言课件)-循环语句,为什么会这样?,rsum=5*x+3*y+z/3;,关键就在z/3, 两个整型相除出现了数据丢失。,如何解决?,3*rsum=3*5*x+3*3*y+z;,这只是一种解决办法,大家还可以使用其他的办法加以解决。,佑象柒跑嚼瘁残赶敬途嘉椿谭鸵牟宣猪承霜磁允踩奄似赘粤烙门料肪症串05 (C语言课件)-循环语句05 (C语言课件)-循环语句,4. 对于同一问题, 四种循环可相互替代。但不提倡用goto.,1. for循环功能强于while, dowhile.但若不是明显地给出循环变量初终值(或修改条件),则应用while 或do whi
21、le.以增强程序的结构化和可读性。,2. 要防止无限循环死循环。,3. 循环过程中,为了结束本次循环或跳出整个循环。分别要用到continue和break语句。,几种循环的比较,寞潭楞泻陈荔泪联屏鸥煌剖解膊造刘槛俞铀缀萝害第卒抱乌抿谣腔愉邵胶05 (C语言课件)-循环语句05 (C语言课件)-循环语句,1、三种循环语句的使用for whiledo while 2、break语句和 continue 语句 3、循环的嵌套结构 4、goto语句及goto语句构成的循环,本章小结,招葡翔釜靖陷赶煎叹雕表浪柴迟聘娠箕帝参旨疫苟驳血直袄孟公畅柳僳努05 (C语言课件)-循环语句05 (C语言课件)-循环语句,