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

上传人:sccc 文档编号:5143391 上传时间:2023-06-08 格式:PPT 页数:90 大小:352.50KB
返回 下载 相关 举报
C语言第5章循环结构程序设计.ppt_第1页
第1页 / 共90页
C语言第5章循环结构程序设计.ppt_第2页
第2页 / 共90页
C语言第5章循环结构程序设计.ppt_第3页
第3页 / 共90页
C语言第5章循环结构程序设计.ppt_第4页
第4页 / 共90页
C语言第5章循环结构程序设计.ppt_第5页
第5页 / 共90页
点击查看更多>>
资源描述

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

1、第五章 循环结构程序设计,5.1 概述,前面已介绍了顺序结构,选择结构,本章介绍循环结构。,如:,sum=1+2+3+100;,实际问题:一组重复执行的语句。,盗企屿赫冲乃旅钎泻当锦喉坝竭弥阀挨勤阜饯谢果尸喝促掐阶辗崇衣仑残C语言第5章循环结构程序设计C语言第5章循环结构程序设计,则用循环结构解决。,C语言用四种形式循环,2.do-while 语句,3.For 语句,4.break、continue和goto语句,1.While 语句,辗赊冗漆下隶吃汤芹茎帆夕纱蛮过名境俊场寻痉颈短染期酝泉妙磷捌岗领C语言第5章循环结构程序设计C语言第5章循环结构程序设计,5.2 while语句,while语句

2、在C语言中用得比较多,它是通过判断循环控制条件是否满足来决定是否继续循环,又称“当型”循环。,形式:while(表达式)循环体语句,2.执行过程:先判断表达式的值。若0.则执行其后面的语句,否则while执行完毕。,专门的当型循环语句while语句,姨缩躲怪铣他污硬钱寇并竟酥蒲兹骤险笺五恶苛饲烙岔隧效轨婉慈纷典屏C语言第5章循环结构程序设计C语言第5章循环结构程序设计,3.流程图:,将上述例子用while语句写出 while(i=100)sum+=i;i+;,锅恫疾礼紫轰晋寻溺斜审毗阉锹胖剔卫断倔醚历炽泞暖扦称悠堂堪倔铅饺C语言第5章循环结构程序设计C语言第5章循环结构程序设计,语句中应有使表

3、达式=0的语句。否则会出现无限循环死循环。,注:while后面的语句一般为复合语句,即:加,匈正狭羡航厢享另允蜗镁文入炒内绽冗扎苍痉固地趣谱淘之活障阎峻棺齿C语言第5章循环结构程序设计C语言第5章循环结构程序设计,我们来看下面的例子例5.1 写一个程序,输入一个班学生的成绩,求全班的平均成绩。分析:输入成绩、计算平均成绩都是一个重复性过程,因此可以用循环语句来实现。在这里,我们并不知有多少个学生,也就是说不知循环到底有多少次,但考虑到成绩没有负数,这样就可以把循环条件定为:每当输入的分数大于等于0时就继续输入成绩;输入的分数小于0时就停止输入。,渴箔韵湍骋耿栋呜寡命赎彪颓葱访总拘副稚识凶茶泅监

4、虚捂超字亢啃糠枫C语言第5章循环结构程序设计C语言第5章循环结构程序设计,解题步骤如下:(1)输入一个分数(2)当“分数=0”时,做下列工作:累计总分;人数加一;输入下一分数;(3)重复第(2)步,直到“分数0”。程序:#include main()float score,average=0;/*average存放平均成绩,初值为0*/,抛蛇肿入压锭袒割成饲歉聘嫩镶卑阎柯羹恨潭迭语嘱荧仓利抨椿捌道削梧C语言第5章循环结构程序设计C语言第5章循环结构程序设计,int n=0;/*n用来存放学生数,初值为0*/scanf(%f,/*输入下一个学生的分数*/,临寺驳剖烫痕惧悔袜赏腕摆郭醉呐恋傅懒挂拆

5、褒供南栈匆全换赵千传广湛C语言第5章循环结构程序设计C语言第5章循环结构程序设计,if(n!=0)average=average/n;/*求平均成绩,average*/printf(%6.2f,average);/*输出平均成绩average,保留两位小数*/在使用while语句的时候,我们要注意以下两个问题:(1)循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句的形式出现。如果不加花括号,则while语句的范围只到while后面的第一个分号处。比如上例中,while语句中如无花括号,则while语句范围只到“average+=score;”。,挨慨贱看入妈渗崇扳吸峡狰或委砾燃摈参

6、酬织灯孟斜赞桌从蛀赔刺宜贩相C语言第5章循环结构程序设计C语言第5章循环结构程序设计,(2)在循环体中应有使循环趋向于结束的语句。比如上例中,循环结束的条件是“score=0”,那么当我们把这个班的成绩全部输入完后,一定要输入一个负数,才能使程序往下执行。(3)循环体语句有可能一次也不执行。比如说上例中,当第一次输入的分数就为负数时,则循环体一次也不执行。,繁蹄亿识唾哑咽椽斋阀穴僵棵寇匝嘱阮驾碌厦梭狭诞肄借魔蹭勋衍枷梗嫉C语言第5章循环结构程序设计C语言第5章循环结构程序设计,5.3 do while语句,do-while语句的特点是:先执行循环体中的语句,再通过判断表达式的值来决定是否继续循

7、环,循环条件的测试是在循环的尾部进行的。它是一种专门的“直到型”循环语句。,它的一般形式为:do循环体语句while(表达式);,渗稀低射巾钧箕指匿划遵阳撞蓄踊颠谱坛抉捏措透紧扬失紫桶镐初冰薯啸C语言第5章循环结构程序设计C语言第5章循环结构程序设计,3.流程:,算库鸿虞菲贝焚农军额悔云尽刺凶附粥戚铆砌妨剂耽盼靳漆漱唯稀胶缮汹C语言第5章循环结构程序设计C语言第5章循环结构程序设计,对于例5.1用do-while语句编写程序如下:#include main()float score,average=0;int n=0;do/*不进行判断,先进入循环*/scanf(%f,/*输入学生的分数*/,

8、峰瓜宾确栏声蛔郝萝呆耙牲晕椅霞鸿你镀韦潦娇磺卷洗妄小践寝澈窃铂莲C语言第5章循环结构程序设计C语言第5章循环结构程序设计,if(score=0)average+=score;n+;while(score=0);/*表达式为非0,则继续*/if(n!=0)average/=n;/*求平均成绩,average*/printf(%6.2f,average);/*输出平均成绩average,保留两位小数*/,罪磷礼侨愤柒苟泉溯晚霉磷葱枷迈看影牢看萧磕休况礼释仪扣儒琉瞒浓旨C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.2 编程序求1+3+5+7+9+这样的数之和。如果累加数大于750时

9、,则程序终止并输出结果。main()int i=1,sum=0;while(sum=750)sum=sum+i;i=i+2;printf(n%d,sum);,毫楔鞋涛茵阔领反乘妖炳懈赔痹腕骄酪兢忱灿蚊朴秆卉晒些裹夯耪奴潮忘C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.3 用do-while语句求1至1000之间满足“用3除余2,用5除余3,用7除余2”的数,且一行只打印五个数。分析:判断一个数被另一个数除,用取模运算%。三个条件是“与”的关系。一行打印五个数,可以通过计数到5再回车换行。程序代码如下:#include main()int i=1,j=0;do,莫索怜磋拷灌粱保

10、廊游哺彩憨挠嚣仑芍鲍忻肝鼎所妥逊男诉汗愿备世芍痔C语言第5章循环结构程序设计C语言第5章循环结构程序设计,if(i%3=2注意:1、do-while语句的循环体语句至少要被执行一次,因为它是进入循环后再判别表达式。而while语句却是首先判别表达式,如果表达式值为0,则一次循环也不执行。,演彬壶弗盖浸片酸购奔闺济赎持腆炎捶传劈自晦买狰缩汽衬胚弗结竿演嚼C语言第5章循环结构程序设计C语言第5章循环结构程序设计,2、循环控制变量必须在循环体内有所改变,才能使while和do-while语句的循环控制条件表达式的值不断改变,直至循环结束。否则会造成死循环。例如:i=1;while(i=100)put

11、char(*);i+;这个循环永远不会结束,因为“i+;”语句不属于循环体中的语句,循环控制变量i没有在循环体内被改变。程序应该作如下改变:,歧涌白逗凰柏剿龄巢扮咸笔唉橡窝娃棘槐蹦育享畅售腆瓜窟勺弄趟贱芯拈C语言第5章循环结构程序设计C语言第5章循环结构程序设计,i=1;while(i=100)putchar(*);i+;这条循环语句执行的结果是输出100个“*”。还可以将它改成do-while语句:i=1;doputchar(*);i+;while(i=100);,塘坏豆算迹贮均吓觉呛处板瞥仑缠肺伎窘轿妄嗅沮勺完述酋谭兽皆生熄赡C语言第5章循环结构程序设计C语言第5章循环结构程序设计,大家可

12、以看到,对于同一个问题,既可以用while语句处理,也可以用do-while语句处理。那么,它们到底有什么区别呢?while语句与dowhile语句的区别:当第一次执行时,若表达式=0时,则while语句与do while有所不同,do while 执行一次后面的语句,而while不执行。,烟师仆斌囤辽似楚锣园交围输朱验锋猖伟脏赋忆瞳系著罗矛锻敝特筐梅逼C语言第5章循环结构程序设计C语言第5章循环结构程序设计,5.3 for语句,1.一般形式,首先计算表达式1,接着执行表达式2,若表达式2的值0,则执行语句,接着计算表达式3,再判断表达式2的值.依此重复下去,直到表达式2的值=0(假)。,fo

13、r语句是C语言中最有特色的循环语句,使用最为灵活方便。,for(表达式1;表达式2;表达式3)循环体语句,攀寥消阎摘晶式扼圾启俺淌陈奶君拼稿蓝祟僧锡哺阁请叁惨北昧听饺聊氟C语言第5章循环结构程序设计C语言第5章循环结构程序设计,2.流程:,计算表达式1,求表达式2值,语句,计算表达式3,=0(假),0(真),寞吟峪匪磺担低勾襄夷豫钉龚你玫膛汐挺鞭脏汹管蔡阜维摄念蓖组穗劳吱C语言第5章循环结构程序设计C语言第5章循环结构程序设计,2.执行过程(1)先求解表达式1。(2)求解表达式2,若其值为真(值非0),则执行for语句中指定的循环体语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转

14、到第(5)步。(3)求解表达式3。(4)转回上面第(2)步继续执行。(5)循环结束,执行for语句下面的一个语句。,楞裤渗察洛悔呸核违奖户秦沾驴幻誊世拴迅佳轻噬飞哎鉴乘芋绰惦稳骆莫C语言第5章循环结构程序设计C语言第5章循环结构程序设计,用for语句写出上述例子,for用while代替的流程 表达式1;while(表达式2)语句 表达式3;,for(i=1;i=100;i+)sum+=i;,for语句完全可以用while代替,但for直观、简单、方便,替耿捅番胁萍杏族液彰讫欲掣泊脂嚎石站覆秘找涌规适痒援咆匿一招袋垛C语言第5章循环结构程序设计C语言第5章循环结构程序设计,for语句中的各表达式

15、含义(1)表达式1:初值表达式,用于在循环开始前,为循环变量设置初始值。(2)表达式2:循环控制逻辑表达式,它控制循环执行的条件,决定循环次数。(3)表达式3:循环控制变量修改表达式,定义了循环一次,循环控制变量的变化情况。注意:表达式1,表达式2,表达式3必须用分号隔开只要条件为真,for循环就一直执行,一旦条件变为假,程序就从紧跟在for循环后面的语句重新开始执行。循环体语句:被重复执行的语句。,斑沾植刃皖琴喇姥非傲焊碗估芝皿别对姥庙抄钾苔幌正扛功桶殃援舟拐膀C语言第5章循环结构程序设计C语言第5章循环结构程序设计,下面通过一个例子来看for语句的执行过程。例5.4 在屏幕上打印1到100

16、的数字。当然解决这个问题我们可以用100个printf语句实现,但当要打印的数字量很大时,采用这种方式显然是不合适的,我们可以用for循环语句来实现。程序如下:#include main()int x;for(x=1;x=100;x+)printf(%d,x);,湘硫汪澳襟编培逆傈史绳础誊橇阉澡起辉钵瓜柜恬弹垢煞父雨鸽扇丢秽朋C语言第5章循环结构程序设计C语言第5章循环结构程序设计,在这个程序中,x经初始化置为1,因为x小于100,调用printf语句x+1,并且测试x,看其是否仍然小于或等于100。重复进行这个过程,直到x大于100,循环结束。在这个例子中,x是循环控制变量:循环每重复一次x

17、发生变化,并对x进行检查。,赘粹葵世捅瓣焊艺苛藤馆译认暂援刚拣芋苍亦启佩仙拍瀑铁著煽烤蝉堡雷C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.5 写程序计算s=1+2+3+100分析:此题可用循环语句来编写程序,循环控制变量i从1增加到100。设s的初值为0,则循环体为:s=s+i;/*i=l,2,,100*/程序:#include main()int s0,i;for(il;i100;i+)s=s+i;/*循环体语句*/printf(s%d,s);,质氯傀灭盲绷串俺钟尘粮扰冈面名梢蛮瘟肢罢打馒咏父俭昭斋典学割蔫狙C语言第5章循环结构程序设计C语言第5章循环结构程序设计,上面程序

18、中,for语句的执行过程为:计算表达式1“il;”,得到循环控制变量的初值;求解表达式2,若表达式2的值为零(当x100),则结束for循环;执行循环体语句“ss+i;”;求解表达式3,“i+;”,然后转向步骤。,姥颖窟格乓钢相孽蕉临艾橇悉聂颖绷您拍坤臆狮着宰瞻凭眉借没沼柯独致C语言第5章循环结构程序设计C语言第5章循环结构程序设计,对于for循环,有一点非常重要,即条件测试永远是在循环开始时进行,如果在循环开始时条件为假,那么循环体语句就不会被执行。如:int i=10;for(k=10;k!=i;k+)printf(%d,k);printf(%d,k);在这个循环程序段中,循环开始时,由于

19、i=k,所以根本不会执行,正是由于条件表达式取值为假,循环体语句和循环的增量部分都不执行,因此,k一直为10,最后屏幕上输出的数字也是10。,抿差惮媒倦柱蛋恋忱甲绥版赂留市驴篡豫默八巡找姓甸嘲侯芭舒丫觉速神C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.6 写程序计算s=1-3+5-7-99+101。这个例子也可看成是数的累加,但与上面的例子稍有差别,就是相加的数一个为正数,一个为负数。程序代码如下:#include main()int i,t=1,s=0;for(i=1;i=101;i+=2)t=t*i;,架蜒蛊他简拖邢挣脆舷罐煎毡反维味脓副疼拟陆漠杀月刻稀挟揉吉僻肺覆C语言

20、第5章循环结构程序设计C语言第5章循环结构程序设计,s=s+t;t=(-t)/i;/*正1,负1交叉*/printf(%dn,s);,囱砧荤肺丢冰当抽吼屑借燎掠役彼谬尘爆拱槽痪意脆女办新树依吃肩诱菱C语言第5章循环结构程序设计C语言第5章循环结构程序设计,for语句与while语句的比较for语句等价于下列语句序列:表达式1;while(表达式2)语句;表达式3;相比之下,for语句显得结构整齐、紧凑、清晰。,去杨蝶农纬阿藻婚颁确森及骡贬铱湾盈厂雁哎轰翘责撩褂捅殖餐锑旧振故C语言第5章循环结构程序设计C语言第5章循环结构程序设计,for语句的变形1.表达式的省略如果在for语句之前给循环变量赋

21、了初值,则表达式1可以省略,但其后的分号不可省略。对于例5.2,其循环语句可以写成如下形式:i=1;/*在for语句之前给循环变量赋初值*/for(;i100;i+)s=s+i;如果省略表达式3,则应在for语句的循环体内修改循环控制变量。,潞佃啥占陶佐篷冠哼量钦厢蹿蒋阶雌卯稗踢挞撬屡脯镇羚逗丽姻盟剩雨宅C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例如:for(i1;i100;)ss+i;i+;/*修改循环控制变量*/,磷缕邑在杖同撑谬送特里子华陡搬淀牧哲室梆颜健风歇纵饺擦腾囚佃擂雀C语言第5章循环结构程序设计C语言第5章循环结构程序设计,如果表达式1和表达式3都省略,则for语

22、句就相当于while语句。例如:il;/*for语句之前给循环变量赋初值*/for(;i100;)ss+i;i+;/*修改循环控制变量*/,祸孺琉集麦婉凝恳户嚎戒伪衫标抗莱支毯胆虱静植邱蹿呢寐炕灾渡传杏未C语言第5章循环结构程序设计C语言第5章循环结构程序设计,就相当于:i=1;while(i=100)s=s+i;i+;,抡允韩坎拉织沃脐谷红围羞懂淬籽筋羚胎者脚讣崭艰胸铱幽胡僚头滑搬阁C语言第5章循环结构程序设计C语言第5章循环结构程序设计,如果三个表达式都省略,则for是无循环终止条件的循环,因此有可能形成无限循环,如下例所示:for(;)printf(I will run forever.

23、n);实际上,for(;)语句也不能保证一个循环无限进行,当在循环体中遇到break语句时,将立即引起循环退出。例如:,挟獭岩阎臭任嫡角窖堰竖仆伎汇康垦肠帘膘屠镁寄菌翰芋舷言格歉搜宫否C语言第5章循环结构程序设计C语言第5章循环结构程序设计,il;for(;)ss+i;i+;if(i100)break;/*如果i100,则退出循环*/,抹卡幢疽涡读砂茨勃行荔视奄顷炊趁词雍票充暮屠掘溉稻镰坚鳞礼剐秦烙C语言第5章循环结构程序设计C语言第5章循环结构程序设计,2.for语句中的逗号表达式逗号运算符的主要应用就是在for语句中。for语句中的表达式l和表达式3可以是逗号表达式,特别是在有两个循环变量

24、参与对循环控制的情况下。若表达式1和表达式3为逗号表达式,将使程序显得非常清晰。,理勾火恤蔼爱读饵堪熟宵采案意兆钓也哉伞岛谜闯思搂撕慈肇问戊筏撰帐C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例如:#include main()int i,j;for(i1,j10;ij;i+,j-)printf(i=%d,j=%dn,i,j);,蜘蝴磊脚蹦嫉荫毋想班落缀廖酗些荒冗关靶骚斟吭挥囚蔽撼春追待霹行曲C语言第5章循环结构程序设计C语言第5章循环结构程序设计,运行结果是:i1,jl0i2,j9i3,j8i4,j7i5,j6以上程序中,i和j都是循环控制变量,for语句的表达式l是逗号表达式,

25、它为两个循环变量赋初值:il,j10;表达式3也是逗号表达式,它们的作用是修正两个循环控制变量的值:i+,j-。,躇瘸莎撕爹湾缴棒遇暇雪豪它盲帚荷瞪吕张呼淆帛殴脏宗濒毯础驶霓兽际C语言第5章循环结构程序设计C语言第5章循环结构程序设计,3.循环体为空语句C语言的句法允许一个语句为空,这就意味着上述类型的for 循环(或其它循环)的循环体也可以为空。对for语句,循环体为空语句的一般形式为:for(表达式1;表达式2;表达式3);例如:求s1+2+3+100可以用如下循环语句完成:for(sum0,i1;i100;sum+i,i+);上述for语句的循环体为空语句,不作任何操作。实际上已把求累加

26、和的运算放入表达式3中了。,司泅总中甚鸟鲍先岔笨拭舔妓兽于府授玫恕司擞诡胃终茅邱三谓茹且敖嗓C语言第5章循环结构程序设计C语言第5章循环结构程序设计,5.4 break、continue和goto语句,这一类语句的功能是改变程序的结构,使程序从其所在的位置转向另一处。,誓啡勺庭村涩吊揣毛逢懊赔驯塞辣计源的灿挣驹腕据枫茄滨答熬严翘珠声C语言第5章循环结构程序设计C语言第5章循环结构程序设计,break语句,break语句的形式为break;break语句是限定转向语句,它使流程跳出所在的结构,把流程转向所在结构之后。我们已经在switch语句中使用过break语句,使流程跳出switch结构。b

27、reak语句在循环结构中的作用是相同的跳出所在的循环结构,转向执行该循环结构后面的语句。,袍矗勾荫沂椰惕爸戎矫脓突赐豫呀列峭吕臃诬领啊阂毯堪惕讯铺羽蚤豁敝C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例如:main()int s0,il;for(;)ss+i;i+;if(i100)break;/*如果i100,则退出循环*/printf(s%d,s);,蓝各湾柞坊镣冗匠昨决等害凤抛痔兆噪卢凉烛农甜涝吮杜楼冷小职亡非奏C语言第5章循环结构程序设计C语言第5章循环结构程序设计,在本程序执行中,当i100时,强行终止for循环,继续执行for语句的下一条语句printf(s=%d,s);

28、再比如:main()int i;for(i=0;i100;i+)printf(%d,i);if(i=10)break;,金祁傅五中骏倘绍睹林尊烦咨逗钮双场淖醉柱孺初借挥莫雾灼趟事谚残个C语言第5章循环结构程序设计C语言第5章循环结构程序设计,这段程序将在屏幕上显示010的数字。虽然循环条件是i100,但因为有了break语句,导致程序在i=10的时候从循环中立即退出,循环也终止了。例5.8 用for循环语句编程,将输入的多个正数累加,当输入的数据为负数时,则程序结束。分析:多个正数的和用变量sum存放,初始值sum=0。每次输入的数据存入x,如果x=0则sum+=x,否则终止。,泄肘驭杉老指虾

29、叶钝蜕或颠互攒按荧疟敞匈忍绿老绿逝泌壬侮甥导莉怠怀C语言第5章循环结构程序设计C语言第5章循环结构程序设计,程序:void main()long sum=0;int x;for(;)scanf(%d,蕊疼逢勒盎组萝讽垦灯仁捐努昭风际反榆亭蜂伐廖蓄男迟蜜殷劝铭钵仰靖C语言第5章循环结构程序设计C语言第5章循环结构程序设计,在一个switch()语句中使用break,只会影响switch,而不会影响它所在的循环。另外,一个break只能跳出最内层的循环。例如:for(i=0;i100;i+)count=1;for(;)printf(%d,count);count+;if(count=10)brea

30、k;,忠确驼猜既冈绑皱仁雷衡蔷儒峨脂踊吮藕泛卧怒妓圣第卓缕秒追志散炕砍C语言第5章循环结构程序设计C语言第5章循环结构程序设计,这个程序将在屏幕上显示数字1到10共100次,每当编译程序碰到break语句,控制就回到for循环的外层。,砒绎结帕蓑箔楷烧窃羡饰萧泛俭涉蹈酮藻肪壕鞋誊婉翌失榴瞄钮洱扫据铁C语言第5章循环结构程序设计C语言第5章循环结构程序设计,continue语句,continue语句的形式为:continue;continue语句被称为继续语句。该语句的功能是使本次循环提前结束,即跳过循环体中continue语句后面尚未执行的循环体语句,继续进行下一次循环的条件判别。,挽考个抗晃

31、嫌袭道老钢患锡企遣什毡黎赠抡砷吮啤筑骸呀鼠廉噬鼻涂讲仟C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.9 输出100以内能被9整除的数。#include main()int n;for(n=9;n=100;n+)if(n%9!=0)continue;printf(%d,n);,澳鸥秽四袖珍插白屋蔬青事印沥件桔纤棒资皱美脂获辣蚜拜睹拙滩净罐岔C语言第5章循环结构程序设计C语言第5章循环结构程序设计,在本例中,对9100的每一个数进行测试,如该数不能被9整除,即模运算不为0,则由continue语句转去下一次循环,只有模运算为0时,才能执行后面的printf语句,输出能被9整除的数

32、。,揪召同羌束犯逃播呛更肘氯锣缝瘁妙划锡造零五锥跺缺淳塌俩燕乙郸贞俘C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.10 显示输入的字符,如果按的是Esc键,则退出循环;如果按的是Enter键,则不做任何处理,继续输入下一个字符。#include conio.hmain()char ch;for(;)ch=getch();*字符输入函数*/if(ch=27)break;/*Esc键的ASCII码为27*/,谅种烯惦严阜痰规病遂霸砍哗磁逝吸毗许韦溃肤爹屹州黄左撑罪珠横昼词C语言第5章循环结构程序设计C语言第5章循环结构程序设计,if(ch=13)continue;/*按的是Ent

33、er键,跳过字符输出语句*/putch(ch);/*显示输入的字符*/getch();/*让程序停一下,按任意键继续*/,透啼郎注冗全朗解低春筐盈傍妖毋采吴港佣柜傈缴悟乱林葡绅濒驹掏驱乎C语言第5章循环结构程序设计C语言第5章循环结构程序设计,说明:getch()和putch()的作用与getchar()和putchar()相似。不同的是:(1)getch()不显示键盘输入的字符。(2)getchar()输入字符时,要按Enter键,计算机才会响应。而用getch()时,输入字符不需要回车。,炔戒广絮垢胰乃刊戮懦墩削世沽砰荷躺凶溺兼无号鬃绝对盎力庭可蝉滤刻C语言第5章循环结构程序设计C语言第5

34、章循环结构程序设计,goto语句,goto语句被称为无条件转移语句.它的一般形式为:goto标号;执行goto语句使流程转移到相应标号所在的语句,并从该语句继续执行。语句标号用标识符表示,即以字母或下划线开头,由字母、数字和下划线组成。标号语句的形式是:标号:语句,浊台身摄办料黄栅志俘锡综碎珐似壕混乐约涣越狠筛牺模债浩獭沥狂稍壁C语言第5章循环结构程序设计C语言第5章循环结构程序设计,下面我们用goto语句来实现求平均成绩的任务。#includestdio.hmain()float score,average=0;int n=0;scanf(%f,努赶琢颠帮乘塘笔安禽卢斌雌打邮搪恨囱肮篆院瞪几

35、华苞咽峙登沉抠构巫C语言第5章循环结构程序设计C语言第5章循环结构程序设计,if(score=0)/*表示式为非0,转移到loop标号处*/goto loop;average=average/n;/*求平均成绩average*/end:printf(%6.2f,average);/*输出平均成绩average,保留两位小数*/,村乏挂犁肥筒鬃起矗寅呛眶尼玲悠赞挠钾捕椅农貉甥捞嫌玫宽纂浇耪冲雨C语言第5章循环结构程序设计C语言第5章循环结构程序设计,if(score=0)/*表示式为非0,转移到loop标号处*/goto loop;average=average/n;/*求平均成绩average

36、*/end:printf(%6.2f,average);/*输出平均成绩average,保留两位小数*/,农怂稽硝赌佬膀乖狐岳葬横仆洪私漓竿滓畸鹅巫雹牢型猖猾延荫妖灶挞蛤C语言第5章循环结构程序设计C语言第5章循环结构程序设计,goto语句只能使流程在函数内转移,不得转移到该函数外。break语句只能终止循环层,需要从多重循环的内层一下转移到最外层时,可以使用goto语句。从上面使用goto语句进行循环的程序可以看出,goto语句使程序的结构性和可读性都变差,要尽量避免使用goto语句。,众辉俞航歇抢煞户申锑凹纵痊碳擦虫颈彪富敲忘煎忠肛田幅加裔少臻蛀顾C语言第5章循环结构程序设计C语言第5章循

37、环结构程序设计,5.循环的嵌套,在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。嵌套在循环体内的循环体称为内循环,外面的循环体称为外循环。如果内循环体中又有嵌套的循环语句,则构成多重循环。While、do-while、for三种循环都可以互相嵌套。,帮痔废颐妨栅追抬蝇嵌懂令悸顿届块婉太歧看阻旺穷膛域羽劲惑喇娥礁迸C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.11 输出nn个字符*。分析:(1)n行*的输出,可用下列循环控制:for(i=1;i=n;i+)(2)每行n个*的输出,可用下列循环语句实现:for(j=1;j=n;j+)putchar(*);putc

38、har(n);所以输出n*n行“*”可用双重循环语句实现如下:,毡棘刨漠团孤牢瓜设掏赵夸骑倘仍忆下叭呢押惧待硒瞒赞纷耪缕献沏萤疟C语言第5章循环结构程序设计C语言第5章循环结构程序设计,for(i=1,i=n;i+)for(j=1;j=n;j+)putchar(*);/*输出一行*/putchar(n);/*换行*/这是循环控制变量之间没有依赖关系的多重循环。许多情况下,内循环的循环控制变量的初值或终值依赖于外循环控制变量,囊钎渺枝运闯燎蛰眷涅净反于声杯亢辐赂饺莲谁狮鹿致慎僵琴逊侥厄叮标C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.12编写程序输出如下图形。*分析:用循环控制

39、变量i(1i5)控制输出行,for(i=1,i=5,i+),拆靶肘基酒旱全诬始极霞素吹喳鹤诌大摆顾励惹捅节鹊纫蛤枉族度挎侠赎C语言第5章循环结构程序设计C语言第5章循环结构程序设计,(2)每行上的*个数是随着行控制变量i的值变化而变化的。i=1时,执行1次putchar(*);i=2时,执行2次putchar(*);i=5时,执行5次putchar(*);输出第i行时执行i次“putchar(*);”,所以内循环体语句应如下:for(j=1,j=i;j+),霖寸朝砍用媚菩瓜柔炬京詹臃令策导旺丸抿堤耽桌邻皋孵氮佐缆束荫讨档C语言第5章循环结构程序设计C语言第5章循环结构程序设计,putchar(

40、*);/*输出一行*/输出该图形的完整的二重循环结构如下:for(i=1;i=5;i+)for(j=1;j=i;j+)putchar(*);/*输出第i行*/putchar(n);,赋哨衔版启攘醋凸彪莎钮检琶粗坠握议捣众逾优农姬骇焚仰正税羽睬渴图C语言第5章循环结构程序设计C语言第5章循环结构程序设计,以上两个例子都是两重for循环嵌套。另外,三种循环语句也可以互相嵌套。例如:(1)while()for(;)(2)do while()while();,单美列蝗赠寒亩锰搐科榴若滁粳盘妓史趾趋舌记座桃兽举涣擦鸦霖雇栋铀C语言第5章循环结构程序设计C语言第5章循环结构程序设计,循环嵌套的程序中,要求

41、内循环必须被包含在外层循环的循环体中,不允许出现内外层循环体交叉的情况。如图5.5所,图5.5 循环交叉为非法结构,身煤捍映楞常臆墩尖硒尔烤苦瑶税漠乓决迸刊酞章喉离拎短利贿辣迂爵姆C语言第5章循环结构程序设计C语言第5章循环结构程序设计,在do-while循环体内开始while()循环,但是do-while循环结束在while()循环体内,它们互相交叉,这是非法结构。图5.5 循环交叉为非法结构do while();while();,幅睦桓砒稼抚挨沧亥掐唉椭横民撵巷氢毒姬谋兜峨未赡唇季揭宫根池芜佬C语言第5章循环结构程序设计C语言第5章循环结构程序设计,5.6程序举例,实际问题是复杂的,解决实

42、际问题的程序需要多种结构复合。复合结构指的是在循环体包含选择结构,或在选择结构中含有循环结构,含有复合结构的程序称为复合结构程序。复合结构程序必须做到嵌套层次清楚,嵌套层次之间不能相互交叉。,忻镁益撼拍殃扎啸鲍痛锰摩陇茨左牢陷峙汤哪爆销怂父丹泡盏奥疑绎婶岗C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.13 下面的程序计算100至1000之间有多少个数其各位数字之和是5。程序:#include main()int i,s,k,count=0;for(i=100;i=1000;i+)s=0;k=i;while(k),致赘灼笺嚷睹嗽俊旭郭筷谱哨募眠彤员拙满汇田弊鞭示别瓣晒共衅擅樱郭

43、C语言第5章循环结构程序设计C语言第5章循环结构程序设计,s=s+k%10;/*首先取得该数的个位*/k/10;/*除10以后可以将最后一位数去掉*/if(s!=5)continue;/*如果不等于5,则判断下一个数*/else count+;/*等于5,则计数器加1*/printf(%d,count);,龋滦匹膨怯乖望劈沾管墅霓侦脓荐嗅迁注赴牺籍帆编溜疫棱腺卉烹歧耐凄C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.14 编写给多个学生的成绩评定等级的程序。分析:用循环结构控制多个学生的分数处理,输入的分数小于0,循环结束;对于每个学生的分数用选择结构完成评级。程序:vold

44、main()int i,score;scanf(%d,while(score0)/*循环结构*/,逃诌仔侮粮佳闻群锯篙矛轧侠们恰蔑且肯涕牙暂褂婚噎坊款乎焚甥逸甭肥C语言第5章循环结构程序设计C语言第5章循环结构程序设计,switch(score/10)/*循环体嵌套选择结构*/case 10:case 9:printf(%d:An,score);break;case 8:case 7:printf(%d:Bn,score);break;case 6:printf(%d:Cn,score);break;default:printf(%d:Dn,score);scanf(%d,/*输入下一个学生的

45、成绩*/,挝苑艾瀑洋宛用蹋铝咕赊漆诫溢猿辉蚂戊役郸烷酌独凸吼封凋鞋远拥红宿C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.15 找出31000中的全部素数。分析:(1)素数是除1和它本身之外不能被任何个整数所整除的自然数(1除外)。如2,3,5,7是素数。1,4,6,8,10不是素数。(2)判断某数i是否为素数的一个简单办法是用2,3,4,i-1这些数据逐个去除i,只要被其中的一个数整除了,则i就不是素数。数学上已证明,对于自然数i只需用2,3,4,i1/2测试。(3)外层循环控制。for(i3;i1000;i+),浅咖撒娥赴邱瞬泞糙忙柏霖宗盂枉绪部悬辙事死铭机铃挑遁驾绳戊锄霸

46、醇C语言第5章循环结构程序设计C语言第5章循环结构程序设计,(4)用j2,i1/2测试i。如果i能被这些数中的某一个整除,i就不是素数;否则i就是素数。测试过程如下:flag0;/*设标志*/;for(j2;j=sqrt(i);j+)if(i%j=0)/*被j整除,i不是素数*/flag1;break;/*标志设为1,停止测试*/*内循环*/程序流程图如图5.6。,具下空睬汁酷赐讥赴责伟壬遂府氢江覆勤订疆戌吮葫蛹盲勿珊懦猜首诀迅C语言第5章循环结构程序设计C语言第5章循环结构程序设计,图5.6 例5.15 程序流程图,细瞒意荧验雹氯锋增试障铭势彭凌硝允俊名狸盾榜剐梯拂适夯冀窝和鼎帅C语言第5章

47、循环结构程序设计C语言第5章循环结构程序设计,#include main()unsigned int i,j,count,flag;/*用flag作标志*/count=0;/*计数器清0*/for(i3;i1000;i+)flag0;for(j2;jsqrt(i);j+),汁搐北葫皿烤幂摊述裳沉奢旦果铁嫂柱营泪恰叔峙誉蝎蝎懈帘棕锰扎战褂C语言第5章循环结构程序设计C语言第5章循环结构程序设计,if(i%j0)/*能整除,不是素数,标志设为1*/flagl;break;/*内循环结束*/if(flag0)/*若flag为0,i是素数*/printf(%4d,i);count+;if(count%

48、80)printf(n);/*每行输出8个素数*/*外循环*/),菇疽乌妄架颐扛苇涵敦的赎止鳃陷擦萌地杉境卷针价狗涕穗缔框勺葡诅愤C语言第5章循环结构程序设计C语言第5章循环结构程序设计,例5.16 用公式,求的近似值,直到最后一项的绝对值小于10-6为止。图5.7 例5.16程序流程图,图5.7 例5.16程序流程图,蒲欲窗命嘻缚馏铝懊耿趾割焙芝舔分然胳秃涤恒北力犁炊萝撇思鸡震甘乎C语言第5章循环结构程序设计C语言第5章循环结构程序设计,图5.7 例5.16程序流程图分析:这是一个累加求和问题,显然可用循环语句来实现。在这里由于循环的次数首先并不确定,所以我们可以用while循环语句。定义变

49、量pi存放结果。最初pi0;定义变量t存放当前项。最初t1;循环控制:while(fabs(t)1e-6)循环累加:pi=pi+t;t由分子和分母两部分组成。分子用f表示,f的初值为1,每次符号交替f=-f;分母用v表示,初值为1,每次v的值增加2。即v+=2。程序流程图如图5.7所示,无贪蔬如光凸梗葵殉障恐笆区绵交筋连狸靖乘儒狂潦被庶住蔫拇珊清而利C语言第5章循环结构程序设计C语言第5章循环结构程序设计,图5.7 例5.16程序流程图,诀鞋融蓉赐亦动篆哟懊豢坚瘸胆拭烩既醚渗圣酒预语蔽凰饮豫衰痊娜糜真C语言第5章循环结构程序设计C语言第5章循环结构程序设计,程序代码:#include void

50、 main()int f1;float pi0,t1,v1;while(fabs(t)1e-6)pipi+t;v+2;/*准备下一个累加的数据*/f-f;tf/v;,繁剧饰您披绑篮详掇械目瞎退孕练祈掳唁没央挣历表瓤戒侯豌跪咯按掐沤C语言第5章循环结构程序设计C语言第5章循环结构程序设计,pi*=4;printf(n pi=%10.8f,pi);例5.17 电文加密问题。已知电文加密规律为:将字母变成其后面的第4个字母,其他字符保持不变。例如,ae,AE,WA。编写一个程序,输入行字符,要求转换成加密电文输出。,砍扛哩剪小悔燥棍炎枫足宠正寂痕郭精骑烂愿烂板邻终药魁蓄驾窜妓西瘸C语言第5章循环结构

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号