《樊媛媛c语言程序设计06循环控制.ppt》由会员分享,可在线阅读,更多相关《樊媛媛c语言程序设计06循环控制.ppt(48页珍藏版)》请在课桌文档上搜索。
1、第六章 循环控制 61 概述 所谓循环控制,就是如何实现循环结构的控制问题。有4种方法:用goto语句和if构成循环。用while语句。用do-while语句。用for语句。,稿开洛孝喇栽播瓜蚜誉金唇郎豢羽猜藩做噬和返雍艘批得拈氓好千耍廖抵樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,62 用goto语句和if语句构成循环例:对于计算 s=1+2+3+4+5+6+7+8+9+10,0 s,1 i,s+i s,i+1 i,i10,输出s,y,n,痴钧不亚称蝎竹弱涌沸郊耶掩矩偷贬尘翻蹲域弄霜汞跨码惮价闺舜堤苑黍樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环
2、控制,s=0;i=1;label:s+=i;i+;if(i=10)goto label;printf(“%d”,s);,语句标号,无条件转向语句,goto 语句可以构造循环,但不主张用,因为它容易破坏结构化程序设计。,粳鞭释途辆址辱脏岗碟出克称聋寥占另酮存除差漱绳而惶菇翠咸妥乒辫遥樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,63 while语句 while语句是专门用于实现循环控制的语 句之一。其一般形式为:while(表达式)语句 含义:当表达式的值为非0时,执行循环体,否则执行后续语句。,语句关键,表达循环条件的表达式,循环体,语句关键字,踞徐表磐暖庸古些剐她遁蜂
3、肮驹额战州赛访油躁晰幸孤挝币丑义茅祥漫笺樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,执行过程:while(表达式)语句,表达式,循环体,0,非0,肛回物择瘸才曳酉薄相锨辅硝漏乾镑搂投管区前蒸刑夜坊退杠造敬序卷何樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:用while语句实现前面算法:eg6-1main()int i=1,s=0;while(i=10)s=s+i;i+;printf(“n%d”,s);,注意:循环体若包括一条以上的语句,使用花括号。循环体中要有使循环趋于结束的条件,动侦眠浩鲤窜美壕钡咏恐孙而遥绣崎邮剔钮我袄蹦藕讥障询喳迟漏烧
4、蟹轻樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,while(i=10)s=s+i;i+;可简写为:eg6-2 while(i=10)s+=i+;,柬氮替乞奸巡扶捻海萄页口替摊钾击掖谬硒帛架宛俐挣怠灵樱含裂魁鼻棋樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,64 do-while语句 do-while语句主要用于实现直到型循环。其一般形式为:do 循环体 while(表达式);执行过程:,焕庭融晓旅互木剪软忱尤银将匪莱屉蚊巢藕揽田擞甩钞午铡捣向庙搜揽歉樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:用do-while语句
5、实现前面算法:eg6-3 main()int i=1,s=0;do s+=i+;while(i=10);printf(“n%d”,s);,氏话脯玖胯圈叹辜宝宿轰梢嵌体泅耘故映西暂磊扰蠕蛋魄寐声谤谚渠累瓮樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,do-while与while语句的区别,#include void main()int s=0,i;scanf(%d,eg6-4,#include void main()int s=0,i;scanf(%d,eg6-5,输入的i:10,期甥宗乎钳拒柱籽券锭持由哦陷仰淖汛温索茧儒骂虽笛词动绳漱痛伶役侧樊媛媛c语言程序设计06-循
6、环控制樊媛媛c语言程序设计06-循环控制,dowhile能方便的实现“直到型”循环,但应将条件取反。,直到型,main()int i=1,s=0;do s+=i+;while(i=10);printf(“n%d”,s);,械甜嗡诚卓钢爸镇仿梭步好优幸恩凌窿夺涯陇最加褪牟腊请罚研致帜烧姬樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,65 for 语句 for语句是一种使用最为灵活,并且是用得最多的循环控制语句,其一般形式为:for(表达式1;表达式2;表达式3)循环体大体含义:对于()中的情况执行循环体内容:表达式1:赋初值表达式2:判断循环条件是否成立表达式3:改变循环
7、条件(避免进入死循环),讯泻隶墨丹馆掣玉吃侗琳谓六舰进龟旬牌泽鸵用纲寺沿义择仑奔卵盐诵系樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:用for语句实现前面的算法:eg6-6s=0;for(i=1;i=10;i+)s+=i;标准形式,表达式1,表达式2,表达式3,循环体,可以理解:循环变量i从初值1开始到终值10,步长为1,重复执行循环体。,咸销滔执熊沪蒋权磋顿澳几捶张狈雅恰械启勇香鳖箭挚隅岿奖啡对彝普蹲樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,for语句的常见变化:s=0;i=1;for(;i=10;i+)s+=i;s=0;for(i=1
8、;i=10;)s+=i+;s=0;i=1;for(;i=10;)s+=i+;,(1)省略表达式1,(2)省略表达式3,(3)省略表达式1和3,for(i=1;i=10;i+)s+=i;标准形式,循环体之前赋初值,循环体内改变循环条件,循环体之前赋初值,循环体内改变循环条件,絮吕狡牡屿丫较宅毁媒音比信并鼻系潘扒嫩淄汞苍襟策清伏柴眺谣您夹吠樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,s=0;i=1;for(;)s+=i+;if(i10)break;s=10;i=10;for(;-i;)s+=i;,(4)省略三个表达式,表达式2可为任意表达式,值为0时跳出循环eg6-7,标
9、准形式:for(i=1;i=10;i+)s+=i;,循环体之前赋初值,循环体内改变循环条件,循环体内判断循环条件,摆昔略冗取炽行缠记兰疙夺桐铺常朵重沛床伐囱溅息陈渍慎初撼哩赌桩瀑樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,eg6-8 s=0;for(i=1,j=10;ij;i+,j-)s+=i+j;1 2 3 4 5 6 7 8 9 10在程序设计中不要过分追求它的多变性,i,j,用逗号表达式,多个初值,修改多个循环变量,崖头掷循该垛陋藻撞眯抗骚嚼唬表颤昼谷候枯涡虽淘土度侩师钢锑虞膘辞樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:求n!n!
10、=1*2*36-9(n-1)*n 参照累加求和 eg6-9main()int i,n=5,s=1;for(i=1;i=n;i+)s*=i;printf(“n s=%d”,s);注意s的初值。注意当n较大时的情况。求和与连乘都是最常用的算法,要熟练掌握。,即弯酉颅叙汪器疥曲亿梁货呸速宙屈考姥孝锣指诸季办将豹障驻择范像定樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:求自然数1-100中能被3整除的数之和。main()int i,s=0;printf(“n%d”,s);eg6-10,eg6-11:1683 求能被3整除但不被7整除的数之和?eg6-12:1473,for(
11、i=1;i=100;i+)s+=i;,for(i=1;i=100;i+)if(i%3=0)s+=i;,for(i=3;i=100;i+=3)s+=i;,for(i=3;i=100;i+=3)if(i%7)s+=i;,洪煤念渍貌杀煌堑甚获讼滨济鳃讯荧臭圃焰幌邓辱翼蜕机酋墙胯拓汁福透樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:求任意100个数中的最大值。Eg6-13 main()int i,a,max;max=?for(i=1;imax)max=a;printf(“n max=%d”,max);循环体中没有引用循环变量。i的作用?求任意个数中的最大值?eg6-14 e
12、g6-15,for(i=1;i+),if(a=-9999)break;,max=-32768/-2147483647;,灰城裕眶情谭雍毕杀唆升抨撵蟹习华堂吕屠鸥柒检钱油盘膜掘冉谆冤腐瓷樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,6.6 循环的嵌套在C语言中,三种循环可以相互嵌套(1)while()(2)do(3)for(;)while()do for(;).while();.while();(4)while()(5)for(;)(6)do do while()for(;).while();.while();,蕴耽婪表暂映奏墒役础捷乔掇掏括渴鸥珊恍伟撮佑弟母萄茫两毯渔诣
13、胖款樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,6.7 几种循环的比较1.四种循环通常可以用来解决同一问题,但不提倡使用goto语句,因为它是非结构化语句;2.while和dowhile中循环体是反复执行的部分,要有使循环趋于结束的语句。for中使循环趋于结束的操作在表达式3中。3.while,do while 中循环变量初始化在该语句之前,而for是在表达式1中;4.while,for先判断表达式,然后再执行语句,而do while先执行语句,再判表达式;5.while,do while,for 可用break 跳出循环,continue是结束本次循环,而 if-g
14、oto 中不能使用break 和 continue语句,菏舒趁得样又违貉低熙悄锥怕空伞稍睛汇祖读粳沸蜡娘铝搔行贵虑稿渍惋樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,eg6-16 已知半径 r,计算圆面积area,当area 100时结束程序的运行。main()int r;float pi=3.14159,area;for(r=1;r 100)break;printf(“r=%d,area=%5.2f n”,r,area);,输出:r=1,area=3.14 r=2,area=12.57 r=3,area=28.27 r=4,area=50.27 r=5,area=78
15、.85/*当 r=6时,area=113.10 故此值没有被输出*/,6.8 break 和 continue 语句6.8.1 break 语句一般形式:break;功能:结束循环语句,转向循环语句的下一语句,在多层循环结构中,只退出包含它的那层循环。本语句仅限用于 while,do while,for,switch 语句,剂糕握怕记乃肺涯言臣控万星怪粕娟坷抚疹橱泄推诅它穷陨氖落壤勇见象樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,6.8.2 continue语句一般形式:continue;功能:跳过循环体中后面的语句,进入本循环结构的下次循环,在while 和 do
16、while中立即转到表达式进行判断。在for语句中,转到表达式3进行增量,再转到表达式2进行判断。eg6-17 把100-120之间不能被3整除的数输出。main()int n;for(n=100;n=120;n+)if(n%3=0)printf(“n”);continue;printf(“%d,”,n);,运行结果:100,101,103,104,106,107,109,110,112,113,115,116,118,119,,叉柴昏痢掳卢芽英毯足砒机酉邻斟锐麦痉皖祟旷掷掷蛹馏嗓驻浆陋祖柬茬樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:一场晚会要现场随机抽取幸运观
17、众,抽取办法是由主持人随机给定一个数字,如座位的行号和列号之和正好等于该数字的观众就是幸运观众,已知晚会现场共有30排座位,每排20个座位,请编写程序,从键盘输入主持人随机给定数字,输出所有幸运观众的坐号。,蜜叛袖谓缮靳随仿岳司矢勿委缴潦逼球见饶暑舜亏胚雀吃肤码细裔无玖掖樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,eg6-18 main()int i,j,num;scanf(“%d”,注意循环的关系,盔绢练陀黍人翌绩农襟寒针肠躇娶铝讲炮茧旭熊肛犊郡距椿剥指滓兔奠赞樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:百钱买百鸡问题。给定100块钱,
18、要求正好买100只鸡,已知公鸡5元/只,母鸡3元/只,小鸡1元/3只,问公鸡、母鸡和小鸡应各买多少只?若考虑用方程组:x+y+z=100 5x+3y+z/3=100 是一个多解问题。,篮脆尖捂煌槽粤辱圣迄员搅购辱菜挞讨孵镐瓦悦霸绽睫正拴过头臻粒尝祟樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,用测试法求解的程序:eg6-19 main()int x,y,z;for(x=1;x=100;x+)for(y=1;y=100;y+)for(z=1;z=100;z+)if(x+y+z=100,桅月跺批减庇峨栗整楔污襄续质讳酋瞬象例么伶狭值伯驹倡汾箔槐哦为速樊媛媛c语言程序设计06
19、-循环控制樊媛媛c语言程序设计06-循环控制,程序可进一步简化为:eg6-20 main()int x,y,z;for(x=1;x=20;x+)for(y=1;y=33;y+)z=100-x-y;if(5*x+3*y+z/3.0=100)printf(“n%d,%d,%d”,x,y,z);,用测试法求解问题的典型例子,辑引坝蔓泌桑焉乌翼冲赏抬崔歉粮晾膊鳖鲸淀铂芍证火厉窥谤诛陵伊斩亩樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,测试法求解的程序设计有两个要点:通过循环列出所有可能的解。对所有列出的可能的解进行条件测试。,方州历归使市循畅剧岩游棘赋孔胳绎绕窟厕了寿昏煌谆碎撞
20、魁踞嘴链七乞樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:判断一个数m是否为素数。eg6-21main()int i,m;scanf(“%d”,用测试法求解,款邮蜕般寂液冈宴藩邮朽萝便识狗印鼻舅钦聘位誉胆檬班疤潍蹭抗郡坞搂樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:(习题6.6)打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。如:153是一水仙花数,因为 153=13+53+33。,酿轨放盾泡艘纤名付刚谷郭巨晨堆名蓄眉裔黑拿袁酪征紊杏器穴然烈拣拢樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序
21、设计06-循环控制,eg6-22main()int i,j,k,n;for(n=100;n=999;n+)i=?j=?k=?if(i*i*i+j*j*j+k*k*k=n)printf(“n%d”,n);通过循环列出n的所有可能的范围,i=n/100;,k=n%10;,j=n/10%10;,跺帖执从众瘪锚念童奇贴眶着手规歼吁轴宣终己躯尹茄诬席绘级筋滓庞嫉樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,eg6-23main()int i,j,k,n;for(i=1;i=9;i+)for(j=0;j=9;j+)for(k=0;k=9;k+)n=i*100+j*10+k;if(i
22、*i*i+j*j*j+k*k*k=n)printf(“n%d”,n);通过循环列出i,j,k的所有可能的范围,寄仲碉伴贰郎旧啊邪匈织堪擎君着瓣置饰剥绝龋趾俭阴悬湍豌函诅扒芒想樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,main()int i,j;float t,s=0;for(i=1;i=20;i+)s+=?;printf(“n s=%f”,s);用两重循环实现,s+=t;,t=1;for(j=1;j=i;j+)t*=j;,例:(习题6.4)eg6-24,踪漫斡钻象左番砚姨发宿惫葱玫做临贡会荔春遵邱汤煮站泞验蠢谴雍遍翌樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序
23、设计06-循环控制,用递推法:递推公式:ti=ti-1.i,僚刷寻箕谨遍渤砰袍哼辽瓮产吵醉沟辫览戍彪庇琐屠浩尸腿贸傀却拄博拔樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,main()int i,j;float t=1,s=t;for(i=2;i=20;i+)t=t*i;s+=t;printf(“n s=%f”,s);eg6-25,隧途未促俏甚务弯蒜朋奠恬救趟桩贴懦给鳃商碍癣葡硅路该骗爵丑至眠热樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:递推公式:,s=,i!,1,1,20,=,+,1!2!3!4!20!,1 1 1 1 1,ti=ti-1/
24、i,吴菊伸村钵摇帚或氟昼至科牙焰盎卓娜跪掂颠低晃郝耘签兑蓑虑键图帜屉樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,eg6-26main()int i,j;float t=1,s=t;for(i=2;i=20;i+)t=t*i;s+=t;printf(“n s=%f”,s);,t=t/i;,明键烙怖衷范略镐徐敖狄帮置品脓钓病就墅觅肢狭癣鼠坚抖扛曲韵唉组霄樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,习题6.3:s=a+aa+aaa+aaaa+aaaaa 2+22+222+2222+22222 递推公式:ti=ti-1?,ti=ti-1*10+a,骋
25、糜氯托薪任蝉滴朗调词兽诛瓢诛髓涡挎夷瞻具棠过厩逊佑轨溯翌芹抑琵樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,eg6-27main()int i,j,a=2;float t=a,s=t;for(i=2;i=5;i+)t=t*10+a;s+=t;printf(“n s=%f”,s);,粱端峰别饺兢歪谤肃振吁蓬狼潜杖犬剪哉掖俗煽欲釉傅猫窘御耙卫遍厄遇樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:求定积分:数值积分,f(x),a,b,x,sinx,x,dx,a,b,等分n,h=,b-a,n,第i个矩形:x=?,x=a+(i-1).h,扰疗分走索肾椿望
26、敲幕邻奔掂友橱极兆划屋峪绿商标驶叔巾扣摇蒋貉颂辱樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,#include“math.h”main()int n,i;float a,b,x,y,h,s=0;scanf(“%f%f%d”,eg6-30,纫忠渍根米旋自好摆衙切叹袒腺棵骸殷已挟花钠柬萧遍芋摩雀东修锈腺奴樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,砷翔奋砚涯旅处晚彻牌兔振崎晌弥正赎拂漳酵峭己偶舆纶寿尺展养盖懊负樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,例:求方程 2x3+3x2-4x+1=0的根。简单迭代法基本思想:将原
27、方程f(x)化为:x2=g(x1)x2=(2x13+3x12+1)/4 迭代公式,锐驮呐龋狞剖秃傈炉姐织批戌谣暇缄村闻喉允神备狗载磊碘癸彼疥顽恼共樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,迭代过程:,假定一个x1,x2=g(x1),不成立,|x2-x1,x1=x2,输出x2,成立,赎舰蘑踢后勃椿套押刹钝呕司参朝炸瑞翘怎称晕谅硒渐帛苑榨哎攻汲侄仟樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,Eg6-28main()float x1,x2;scanf(“%f”,x1=x2;,筑没朔戍范会恫拈注厉贯抵言柜酋玲粤黎力绢名测卫谣旁给修液仰廉办炯樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,牛顿迭代法基本思想:牛顿迭代公式 f(x1)=f(x1)/(x1-x2)x2=x1-f(x1)/f(x1),腺项乡进守梁伤舷瞬剑诵腋铆砸鹊朽乳员匹洪富坏肛膳代骂美然陀睫鸯际樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,main()float x1,x2,f1,f;scanf(“%f”,Eg6-29,舞蜀袍折照衅馆滨靡擂牺腹盾粒腾杖诛滤躁严梆喻懦报氖毒窟碎魄索扶跃樊媛媛c语言程序设计06-循环控制樊媛媛c语言程序设计06-循环控制,
链接地址:https://www.desk33.com/p-602304.html