资源预览内容
第1页 / 共60页
第2页 / 共60页
第3页 / 共60页
第4页 / 共60页
第5页 / 共60页
第6页 / 共60页
第7页 / 共60页
第8页 / 共60页
第9页 / 共60页
第10页 / 共60页
亲,该文档总共60页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
本章导读本章导读本章从实例分析着手,使读者了解并掌握C语言三种基本流程控制结构:顺序、选择、循环结构,加深对C语言程序开发设计过程的感性认识,强化培养编程思路,为进一步进行C语言程序设计打下基础。 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本书目录返回本书目录第第第第3 3章章章章 结构化程序设计结构化程序设计结构化程序设计结构化程序设计本章主要知识点本章主要知识点(1)顺序结构及程序设计。(2)选择结构及程序设计。(3)循环结构及程序设计。(4)结构化程序设计方法、编程思路与综合实训啦秘纬拯烛逸嘶备捎粟暑惕店婉河井某挽谩义漱超玻注苯南悄韶缅慢篓倘结构化程序设计结构化程序设计第第第第3 3章章章章 结构化程序设计结构化程序设计结构化程序设计结构化程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本章导读返回本章导读3.2 选择结构程序设计选择结构程序设计3.3 循环结构程序设计循环结构程序设计3.4 结构化程序设计方法与综合实训结构化程序设计方法与综合实训3.1 顺序结构程序设计顺序结构程序设计匿次鸥诬墅粥拓太箱邀膀飘漂肩企鹤哼壤友瞄鹏熊历音崩风硅垒洱耘眨畴结构化程序设计结构化程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本章目录返回本章目录3.1.2 顺序结构语句顺序结构语句3.1.3 程序实训程序实训3.1.1 顺序结构的顺序结构的C程序实例程序实例3.1 3.1 顺序结构程序设计顺序结构程序设计顺序结构程序设计顺序结构程序设计嗣括置负功连摈疼忌痰艘叫狐恩醛研校榨砰辙带牟郊雀杭承捡窗滨瑶讣石结构化程序设计结构化程序设计3.1.1 C3.1.1 C程序实例程序实例程序实例程序实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录C程序实例【例3.1】编程实现:输入一个长方形的二边长,求长方形的面积并输出。/*程序名为l3_1.cpp。*/#includestdio.hmain()floata,b,s;scanf(%f%f,&a,&b);s=a*b;printf(Theareaofrectangleis%5.2f.n,s);各肌诌灿魔宠爱尔诀士傲跟蚤稗狰骂郝着字嘿冈锥瘟遏万燃衫凋搪吵扇侵结构化程序设计结构化程序设计返回本节目录返回本节目录程序运行情况如下:输入:3.04.0输出:Theareaofrectangleis12.00.这个程序属于顺序结构,程序是按照书写的顺序自上而下一步步执行,程序中的每一条语句都被执行一次,且仅能被执行一次。【例【例【例【例3.13.1】编程】编程】编程】编程 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)百六跪今芋今电瘟鲁僵础掠墙裕渴襟鞠撩精痞腻赁憾殉蕉才院肌掉绝挚盟结构化程序设计结构化程序设计3.1.2 3.1.2 顺序结构语句顺序结构语句顺序结构语句顺序结构语句1 1 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)C语言的顺序结构语句可以分为四大类:1.表达式语句表达式的后面加一个分号就构成了一个语句,例如:sum=a+b;。事实上,C语言中有使用价值的表达式语句主要有3种:(1)赋值语句。例如:sum=a+b;(2)自动增1、减1运算符构成的表达式语句。例如:i+;(3)逗号表达式语句。例:x=1,y=2;2.空语句语句仅有一个分号“;”,它表示什么也不做。一般和后面章节所讲循环语句结合使用起到延时作用。3.复合语句由和把一些变量定义和执行语句组合在一起,称之为复合语句,又称语句块。复合语句的语句形式如下:语句1;语句2;语句n;返回本节目录返回本节目录元仁熏沫肩贱儡迷喘局促烦袁烙溉职素袄嘻今疏玉企辗酮长御徒涨匿她贼结构化程序设计结构化程序设计返回本节目录返回本节目录例如:inta=0,b=1,sum;sum=a+b;printf(%d,sum);【注意】与C语言中的其他语句不同,复合语句不以分号作为结束符,若复合语句的后面出现分号,那不是该复合语句的组成成分,而是单独的一个空语句。在复合语句起始部分可以有变量定义,如:inta=0,b=1,sum;,也可以没有。复合语句的内可能会有多个语句,但在语法上把它整体上视为一条语句看待。4.函数调用语句由一个函数调用加上一个分号组成一个语句,如:scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);3.1.2 3.1.2 顺序结构语句顺序结构语句顺序结构语句顺序结构语句2 2 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)潘幂寄致苫瞧祈涣裸睡岿知飞刮蛙潮过挫统欲衡屋琐辆娶鹿煽操门卖滴叁结构化程序设计结构化程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)C程序实例【例3.2】由键盘输入两个整数给变量a和b,然后输出a和b,在交换a和b中的值后,再输出a和b,验证两个变量中的数值是否正确地进行了交换。/*程序名为l3_2.cpp。*/#includestdio.hmain()inta,b,t;printf(Enteraandb:n);scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);t=a;a=b;b=t;printf(a=%d,b=%dn,a,b);程序运行情况如下:Enteraandb:123456a=123,b=456a=456,b=123返回本节目录返回本节目录3.1.3 3.1.3 程序实训程序实训程序实训程序实训【例【例【例【例3.23.2】席侯券袭闲粤叹丧凡汐进荤意烂论哆癣橙泉茸鉴鼓迸融贤难缝硼倚著稳吮结构化程序设计结构化程序设计返回本节目录返回本节目录注意:在程序中交换两个变量a和b的值,不可以简单地用:a=b;b=a;两条语句来实现。假设a和b的值分别为23和78,赋值语句a=b;将使a的值变为78,接下来的b=a;使b的值变为78,这样,a和b的值最终都变为78。所以在本例中引入了中间变量t,用来临时存放a的值,这样才能完成变量a和b的正确交换。【例3.3】输入一个double类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入处理,然后输出此数,以便验证处理是否正确。/*程序名为l3_3.cpp。*/#includestdio.hmain()doublex;printf(Inputx:n);scanf(%lf,&x);3.1.3 3.1.3 程序实训程序实训程序实训程序实训【例【例【例【例3.33.3】 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)非底掏裙彦俞肪阑左渝讹坯匝悸威嘘崇禄悟拳来瘤聊啦装拥若牙叶什陡娘结构化程序设计结构化程序设计3.1.3 3.1.3 程序实训程序实训程序实训程序实训【例【例【例【例3. 33. 3】 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录printf(1)x=%fn,x);/*将x输出*/x=x*100;x=x+0.5;x=(int)x;x=x/100;/*将x扩大100倍,加上0.5之后取整,再缩小100倍*/printf(2)x=%fn,x);/*将四舍五入后的x输出*/程序运行情况如下:Inputx:3.14159则输出的结果为:(1)x=3.141590(2)x=3.140000群眠惰祖搔乘禁纷拳鸳及幅斧僳抹朱稚上椅厅羽韶贯蔫缎蒲囊顾吃隶猜褐结构化程序设计结构化程序设计3.1.3 3.1.3 程序实训程序实训程序实训程序实训【例【例【例【例3.43.4】 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录【例3.4】从键盘上输入一大写英文字母,要求改用相应的小写字母输出。/*程序名为l3_4.cpp。*/#includestdio.hmain()charc1,c2;scanf(%c,&c1);printf(Theuppercaseis%c.n,c1);c2=c1+a-A;printf(Thelowercaseis%c.n,c2);程序运行时:输入:B输出:TheuppercaseisB.Thelowercaseisb.醇闽结汰历吠呢桃区隆纳忌繁谰编佑迁鸣焚牢鲜丛介障痒庐怨策爪桶黄存结构化程序设计结构化程序设计3.2 3.2 选择结构程序设计选择结构程序设计选择结构程序设计选择结构程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)3.2.1 选择结构的选择结构的C程序实例程序实例3.2.2 if 语句语句3.2.3 switch 语句语句3.2.4 程序实训程序实训 返回本章目录返回本章目录悯辫偏竣撂溅腹帽朽框津忍制脯怂遗吾辩衔膘沙抒狙抄俏颤惕勤蛔席雍烬结构化程序设计结构化程序设计3.2.1 3.2.1 选择结构的选择结构的选择结构的选择结构的 C C程序实例程序实例程序实例程序实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录【例3.5】请输入两个整数a,b,比较a+b和ab哪个大,输出判断结果。/*程序名为l3_5.cpp。*/#includestdio.hmain()inta,b,s1,s2;printf(请输入两个整数a,b:);scanf(%d,%d,&a,&b);s1=a+b;s2=a*b;/*求两个数的和、积*/if(s1s2)printf(a+b)(a*b)/n);/*语句A*/elseprintf(a+b)=(a*b)n);/*语句B*/厕邮撮浸柠甫界城棍芦哥删绊宅庸钙矫冕酉咖翘渗病椒挚月正慕白两汛锤结构化程序设计结构化程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)运行结果为:请输入两个整数a,b:2,3(a+b)s2,则执行语句A(跳过语句B不执行),否则,就跳过语句A执行语句B。可见if语句在程序中起到了改变语句执行顺序的作用。if语句就是我们在下一节中要介绍的条件分支语句。3.2.1 3.2.1 选择结构的选择结构的选择结构的选择结构的 C C程序实例结果程序实例结果程序实例结果程序实例结果 返回本节目录返回本节目录雾望呵沛牌盆粹骸免墩金铝页始波姑脚犯荒滓喜幸络房饺协舱增侥处头仕结构化程序设计结构化程序设计3.2.23.2.2 if if if if 语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境). if语句的一般形式返回本节目录返回本节目录2. if-else中的复合语句3. 非关系、非逻辑表达式构成的条件表达式4. if语句的嵌套椒拟勾扩频先缩烫酬屈齿盲露努滇絮恭彪遇恐采拯艾饵闲腰唁斥翁浮式拄结构化程序设计结构化程序设计. if. if. if. if语句的一般形式语句的一般形式语句的一般形式语句的一般形式1 1 1 1 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境) 1if语句的一般形式:if语句有两种形式:(1)不含else子句的if语句语句形式如下:if()例如if(ab)t=a;a=b;b=t;其中,if是C语言的关键字,表达式两侧的圆括号不可少,最后是一条语句,称为if子句。如果在if子句中需要多个语句,则应该使用花括号把一组语句括起来组成复合语句,这样在语法上仍满足一条语句的要求。执行过程:首先计算紧跟在if后面一对圆括号中的表达式的值,如果该表达式的值为非零(“真”),则执行其后的if子句,然后去执行if语句后的下一个语句。如果该表达式的值为零(“假”),则跳过if子句,直接执行if语句后的下一个语句。返回返回3.2.23.2.2目录目录旷粉吟撇愧脏绦绷仓桔荫惨拙比四早楼谦钟瞅辙祈掀追馏诈掷庇艳稍盈茫结构化程序设计结构化程序设计. if. if. if. if语句的一般形式语句的一般形式语句的一般形式语句的一般形式2 2 2 2 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)(2)含else子句的if语句语句形式如下:if()else执行过程:首先计算的值,如果该表达式的值为非零(真),则执行,如果该表达式的值为零(假),则跳过,直接执行,两者执行其一后再去执行if语句后的下一个语句。返回返回3.2.23.2.2目录目录幢高憎坑锰顺桓拓介组马檄哎航栽诅队僳房窖闷妊娠关预斧夺平咖鼠施慎结构化程序设计结构化程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境). if. if. if. if语句的一般形式实例语句的一般形式实例语句的一般形式实例语句的一般形式实例【例3.6】求分段函数的值,如果x0,y=2x+1,否则,y=0。#includestdio.hmain()/*程序名为l3_6.cpp。*/intx,y;/*变量y存放f(x)的值*/printf(请输入x的值:);scanf(%d,&x);if(x=0)y=2*x+1;elsey=0;printf(当x=%d时,f(x)=%d,x,y);返回返回3.2.23.2.2目录目录栋厘蘑酮藤委傍营傲洲韩缄鹿吁壶言拿考教芯隋浪翔尤谩才孩筏衍汗达殃结构化程序设计结构化程序设计. if. if. if. if语句的一般形式实例语句的一般形式实例语句的一般形式实例语句的一般形式实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)运行结果:请输入x的值:3当x=3时,f(x)=7因为输入x=3,那么x=0为真,所以输出2*3+1=7。C语言中有一种特有的条件运算符“?:”,我们在前面章节已作介绍,它在某种程序上可以起到逻辑判断的作用。本例中的if语句也可用条件运算符表达式实现如下:y=x=0?2*x+1:0;但有些判断不能用条件表达式完成,或者很繁琐、表达不清晰。返回返回3.2.23.2.2目录目录曙谎嗅镐躲窜朴箩矮屠鲍叔撑儿番器醋勉掉烹淡伞秉跺唁习两驼吨寥藕纽结构化程序设计结构化程序设计2. if-else2. if-else2. if-else2. if-else中的复合语句中的复合语句中的复合语句中的复合语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)2. if-else中的复合语句如果两个分支中需要执行的语句不止一条,必须用“”括起来,作为一个复合语句使用。若只是一条语句,“”可以省略。【注意】(1)if后面的一定要有括号;(2)if和else同属于一个if语句,else不能作为语句单独使用,它只是if语句的一部分,与if配对使用,因此程序中不可以没有if而只有else;(3)只能执行与if有关的语句或者执行与else有关的语句,而不可能同时执行两者;(4)如果和是非复合语句,那么该语句一定要以分号结束,(5)if语句的表达式可以是任意类型的C语言的合法的表达式,但计算结果必须为整型、字符型或浮点型之一。返回返回3.2.23.2.2目录目录蔚赊瀑斡泡钟蓑奏疚拦沂合读骡冈葛虞俗捶音寡役边近捎榆勒岳债么掸烬结构化程序设计结构化程序设计3.3.3.3.非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式1 1 1 1 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)3.非关系、非逻辑表达式构成的条件表达式 【例3.10】以赋值表达式为分支条件的实例。/*程序名为l3_10.cpp。*/#includestdio.hmain()ints;if(s=2)printf(hello);elseprintf(error);if后面圆括号中的表示分支条件的类型不限于逻辑/关系表达式,可以是任意的C语言有效表达式(如赋值表达式,算术表达式等等),因此也可以是作为表达式特例的常量或变量。返回返回3.2.23.2.2目录目录连丧非乾纫奥禽列滋侧手晾土牲无捅否辐奔隙砧棒耪图厅高稗襟私拣馅军结构化程序设计结构化程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)3.3.3.3.非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式2 2 2 2【例3.10】中的条件表达式是一个赋值表达式,并不是判断s是否等于2。相当于if(2)printf(hello);,这是合法的。由于该条件表达式的值是非零值,恒为真,故本程序的printf(error);无论如何都不会被执行。if语句最终执行哪一个分支,取决于条件表达式的计算结果。同一个条件的也可以用多种表达方式。【例3.11】以变量为分支条件的实例。/*程序名为l3_11.cpp。*/#includestdio.hmain()intx,y;scanf(%d,&x);if(x)y=1;elsey=-1;返回返回3.2.23.2.2目录目录橡跺卵免填汪朴媳抢弘哩队沤瑰佐吕骏瘁竣巡醚殖帐集漠故阶陪僳钒虹惕结构化程序设计结构化程序设计3.3.3.3.非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式非关系、非逻辑表达式构成的条件表达式3 3 3 3 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)printf(y=%dn,y);现把程序中if(x)改成if(x!=0),此时虽然条件表达式写法不同,但是完成的功能是相同的。下面两种表示方法经常使用:if(x)等价于if(x!=0)if(!x)等价于if(x=0)返回返回3.2.23.2.2目录目录九醚莲献抹槛袋醛专癸恕钻钠伴羞藻铣延侦推具展痕倾蔼恫鹏陈类挨储物结构化程序设计结构化程序设计4. if4. if4. if4. if语句的嵌套语句的嵌套语句的嵌套语句的嵌套1 1 1 1 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境) 在一个if语句中又包含另一个if语句,从而构成了if语句的嵌套使用。内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。例如:【例3.12】输入a,b两个整数的值,比较大小并输出结果。#includestdio.h“/*程序名为l3_12.cpp。*/main()inta,b;printf(请输入a,b:);scanf(%d%d,&a,&b);if(ab)printf(abn);elseif(ab)printf(ay)if(zx)max=z;elseif(yx)max=y;printf(max=%d,max);运行结果:max=4返回返回3.2.23.2.2目录目录栋疼跌罗贿领县宛蹬亡衡焉始堕钉艰幢众悸颧售愚粹危辈瓶东蕴交逐吾墓结构化程序设计结构化程序设计4. if4. if4. if4. if语句的嵌套实例语句的嵌套实例语句的嵌套实例语句的嵌套实例2 2 2 2 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)【例3.14】编写程序,根据输入的学生成绩,给出相应的等级。90分以上的等级为A,60分以下的等级为E,其余每10分一个等级。程序如下:#includestdio.hmain()/*程序名为l3_14.cpp。*/intg;printf(inputg:);scanf(%d,&g);printf(g=%d:,g);if(g=90)printf(An);elseif(g=80)printf(Bn);elseif(g=70)printf(Cn);elseif(g=60)printf(Dn);elseprintf(En);返回返回3.2.23.2.2目录目录距藤拳砰相管斜见怒忘慢渠貉唬胯箭篡簧桩栗孰畔踊拾帧架钟夏充姜蚁浚结构化程序设计结构化程序设计4. if4. if4. if4. if语句的嵌套实例语句的嵌套实例语句的嵌套实例语句的嵌套实例3 3 3 3 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)当执行以上程序时,首先输入、输出学生的成绩,然后进入if语句;if语句中的表达式将依次对学生成绩进行判断,若能使某if后的表达式值为1,则执行与其相应的子句,之后便退出整个if结构。例如,若输入的成绩为78分,首先输出:g=78:,当从上至下逐一检测时,使g=70这一表达式的值为1,因此在输出g=78:之后再输出C,便退出整个if结构。若输入的成绩为30分,首先输出相应成绩g=30:,其次进入相应判断,最后再输出相应等级E,便退出整个if结构。返回返回3.2.23.2.2目录目录扛谋音峙甜监联袋耀才锣必痒交芯卑姥篡瓮花宾垣斧拯饶圭窿沏各晋裴乔结构化程序设计结构化程序设计3.2.3 switch 3.2.3 switch 语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境). switch语句的一般形式返回本节目录返回本节目录2. switch语句的执行过程3. switch语句的实例携壶滋纺妖皆西惧茁噬布腿涨鲤道怕较姬选撰夫运散战欺职爱窖礼自沉瓜结构化程序设计结构化程序设计1 1 . . switch switch语句的一般形式语句的一般形式语句的一般形式语句的一般形式 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)1. switch语句的一般形式switch语句的一般形式是:switch()case:case:case:default:【说明】:switch语句是关键字,其后面大括号里括起来的部分称为switch语句体。要特别注意必须写这一对大括号。switch后的运算结果可以是整型、字符型或枚举型表达式等,两边的括号不能省略。返回返回3.2.33.2.3目录目录窿腹冉狱空撼竞硒芦谎九讲店升逼憋扇稗朽烁妄咸盈诞偿袋卞单剩达术正结构化程序设计结构化程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)case也是关键字,与其后面合称为case语句标号。的值在运行前必须是确定的,不能改变,因此不能是包含变量的表达式,而且数据类型必须与一致。如:intx=3,y=7,z;switch(z)case1+2:/*是正确的*/casex+y:/*是错误的*/case和常量之间要有空格,case后面的常量之后有:。default也是关键字,起标号的作用。代表所有case标号之外的那些标号。default可以出现在语句体中任何标号位置上。在switch语句体中也可以无default标号。、等,可以是一条语句,也可以是若干语句。必要时,case语句标号后的语句可以不写。1 1 . . switch switch语句的一般形式语句的一般形式语句的一般形式语句的一般形式返回返回3.2.33.2.3目录目录娜弃含措隶夏若箕上渣户硝稽祖起秋彪仗遣欲湛毗甄灵同矾作耸蛇驶盗关结构化程序设计结构化程序设计2 2 . . switch switch语句的执行过程语句的执行过程语句的执行过程语句的执行过程 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)2. switch语句的执行过程首先计算的值,然后在switch语句体内寻找与该吻合的case标号,如果有与该值相等的标号,则执行从该标号后开始的各语句,包括在其后的所有case和default语句,直到switch语句体结束。如果没有与该值相等的标号,并且存在default标号,则从default标号后的语句开始执行,直到switch语句体结束。如果没有与该值相等的标号,并且不存在default标号,则跳过switch语句体,什么也不执行。在switch语句中使用break语句break语句也称间断语句。可以在各个case之后的语句最后加上break语句,每当执行到break语句时,立即跳出switch语句体。switch语句通常总是和break语句联合使用,使得switch语句真正起到多个分支的作用。返回返回3.2.33.2.3目录目录满巾诊浪腮丙抨钟哦笔墒学承绪内沿代毗儡氧嚏痞真择汰熙魂闸春躺跋政结构化程序设计结构化程序设计3 3 . . switch switch语句的实例语句的实例语句的实例语句的实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)3. switch语句的实例【例3.17】模拟自动饮料机。按屏幕所示功能,输入所选择的合法数字,输出可获得的相应饮料名称。程序如下:/*程序名为l3_17.cpp。*/#includestdio.hmain()intbutton;printf(=自动饮料机=n);printf(1.可口可乐n);printf(2.雪碧n);printf(3.芬达n);printf(4.百事可乐n);printf(5.非常可乐n);printf(请按1-5键选择饮料:n);scanf(%d,&button);返回返回3.2.33.2.3目录目录此易裹歹喇王雨得躯改淫痪耙赢耘拥姓胀永孺榜茂播悼盗绚辉当队沏除帧结构化程序设计结构化程序设计3 3 . . switch switch语句的实例语句的实例语句的实例语句的实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)switch(button)case1:printf(n你获得一听可口可乐n);break;case2:printf(n你获得一听雪碧n);break;case3:printf(n你获得一听芬达n);break;case4:printf(n你获得一听百事可乐n);break;case5:printf(n你获得一听非常可乐n);break;default:printf(n非法操作!n);break;运行结果:=自动饮料机=1.可口可乐2.雪碧3.芬达4.百事可乐5.非常可乐请按1-5按钮选择饮料:3你获得一听芬达返回返回3.2.33.2.3目录目录寡晨堰霉就峻镰蝴吭爸岂展篱祭析桑游杂猪锰易遂樊亭悔加制屡祁缨井檬结构化程序设计结构化程序设计 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本章目录返回本章目录3.3.2 while语句语句3.3.3 do-while语句语句3.3.1 循环结构的循环结构的C程序实例程序实例3.3 3.3 循环结构程序设计循环结构程序设计循环结构程序设计循环结构程序设计3.3.4 for 语句语句3.3.5 循环的嵌套循环的嵌套3.3.6 break语句和语句和continue语句语句3.3.7 程序实训程序实训努袋绅慨皖涡孕忙诽夺挛瞅梧交殷拽劝督站焙通采伙篷嚏梦提弗狈跟莫获结构化程序设计结构化程序设计3.3.1 3.3.1 循环结构的循环结构的循环结构的循环结构的C C程序实例程序实例程序实例程序实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)【例3.19】有一张厚度为0.1毫米的纸,假设它足够大,重复将其对折,问对折多少次之后,其厚度可以抵达(再对折一次就超过)珠穆朗玛峰的高度?程序如下:main()/*程序名为l3_14.cpp。*/doubleh=0.1;intn=0;/*n用来累计对折次数*/while(h=8848180)h=h*2;n=n+1;printf(对折次数为:%d,此时厚度:%.2fn,n-1,h/2);重复对折一张纸,实质就是厚度乘以2,次数加1。用顺序结构编程为:h=h*2;n=n+1;这样的语句一直重复写到h满足题目要求为止。实际中这类问题,就可用循环结构编程实现。本例中,使用的是循环结构中的while语句。C语言共有三种类型的循环语句,while、do-while和for语句。返回本节目录返回本节目录厌渔讲打荔帜擂趋滴偏啃诀肢恒畅污系秦针挠邵拆皖擅山校挪吕禁戏郧暇结构化程序设计结构化程序设计3.3.2 while3.3.2 while语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录1.while语句的一般形式while()说明:while语句是C的关键字,其后面的一对括号中的,可以是C语言的任意合法表达式,由它来控制循环体语句是否执行,括号不能省略。可以是一条语句,也可以是多条语句,一般来说循环体是一条语句时不用加,如果是多条语句,就一定要加构成复合语句。其中的语句可以是空语句、表达式语句或作为循环体一部分的复合语句,如果循环体是一个空语句,表示不执行任何操作(一般用于延时)。(1)计算while后一对括号中的的值。当值为非零时,则执行步骤(2);当值为零时,则执行步骤(3)。(2)执行后,转去执行步骤(1)。(3)退出while循环。2.while语句的执行过程戳浅病致郑描列翻脉搽荤弛凸糊昂鹊谚团股架剿毖啼灶屋微君泵糊码威姐结构化程序设计结构化程序设计whilewhile语句实例语句实例语句实例语句实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)3.while语句实例 例3.21】用while循环语句实现从1加到100,并将结果打印出来。/*程序名为l3_21.cpp。*/#includestdio.hmain()/*若sum的值超过int型变量能表示的范围,则设置成长整型*/intsum=0,i=1;while(i=100)sum+=i;i+;printf(其和是%dn,sum);/*若sum为长整型,则相应的输出也设置成长整型ld*/运行结果:其和是5050返回本节目录返回本节目录挡凝茬片迄肤罗双谷刺脚马痒耪卢候亲茵帘栓掇刃答逞依帆定惕蹄淡浮适结构化程序设计结构化程序设计dowhile();说明:do是C语言的关键字,必须和while联合使用。do-while循环由do开始,用while结束;注意,在while结束后必须有分号,它表示该语句的结束。其它同while循环语句。3.3.3 do-while3.3.3 do-while语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)1.do-while语句的一般形式返回本节目录返回本节目录2.do-while语句的执行过程(1)执行do后面的。(2)计算while后一对括号中的的值。当值为非零时,转去执行步骤(1)。当值为零时,则执行步骤(3)。(3)退出while循环。篮赃雾预侨嘛苏预旧该觅因兔锤孜永蠢词蟹丙湾励某抒橙辆宵胳坤涨宿博结构化程序设计结构化程序设计运行结果:其和是5050在本例中,循环条件和循环体以及得到的结果都是和while循环一样的,只是用do-while语句来实现。do-whiledo-while语句实例语句实例语句实例语句实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)3.do-while语句实例【例3.23】用do-while语句实现求1+2+100的和。#includestdio.h/*程序名为l3_23.cpp。*/main()intsum=0,i=1;/*若sum的值超过int型变量能表示的范围,则设置成长整型*/dosum+=i;i+;while(i=100);printf(其和是%dn,sum);/*若sum为长整型,则相应的输出也设置成长整型ld*/返回本节目录返回本节目录努吐撂斧扛砷辐揭巳墩沧骗到遍惠酣士科戮黑房找绞忍巳毯眯胞曝巩撂墟结构化程序设计结构化程序设计3.3.4 for 3.3.4 for 语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)for语句是C语言提供的一种在功能上比前面两种循环语句更强的一种循环语句。for循环语句格式如下:for(;)说明:for是C语言的关键字,三个表达式之间的必须用分号;隔开。三个表达式可以是任意形式的C表达式,通常主要用于for循环的控制。一般用于计算循环变量初始值,为循环体是否执行的条件,为循环变量的调整。的使用同while、do-while循环语句。for循环语句的格式还可以表示为:for(;)在某种情况下,用for语句表示循环,显得紧凑而清晰。尤其是它能利用自动地使循环变量发生改变,不像while结构那样要在循环体中设置修正操作。实际上,for语句中的不仅限于修正循环变量,而且可以是任何操作。例如前面例题中介绍的求1到100的和,用for语句可以表示为:for(sum=0,i=1;i=n;sum+=i,i+);返回本节目录返回本节目录1.for语句的一般形式滓打批才墩炬嗓厢酥搀铡前忌洋倡锋牟齐界早究带祷加杏买岿悬著偏幢激结构化程序设计结构化程序设计for for 语句的执行过程语句的执行过程语句的执行过程语句的执行过程 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录2.for语句的执行过程首先计算。求的值;若其值为非零,则转去执行;若的值为零,则转去执行,结束for语句。执行一次for循环体。求解,转执行。结束循环,执行循环之后的语句。3.for语句实例【例3.25】用for语句实现求1-100之和。#includestdio.hmain()/*程序名为l3_25.cpp。intsum=0,i=1;/*若sum的值超过int型变量能表示的范围,则设置为长整型*/聚顾谩进删内愚保醇苍示秸孔星讽刹皑蒲彬察芬抚脸辰杂钻磋骏秽蝉幅皖结构化程序设计结构化程序设计for for 语句的实例语句的实例语句的实例语句的实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录for(;i=n;i+)sum+=i;printf(其和是%dn,sum);/*若sum为长整型,则相应的输出也设置成长整型ld*/运行结果:其和是5050for循环的执行过程:先执行表达式1,为空语句,然后判断i=n是否成立,如果为真,执行循环体sum+=i,转而执行i+,再判断i=n,如此反复,直到i=n为假为止。在这个例子中,i是循环控制变量,每次循环时,它的值都被改变且进行检验。牙代镐自苍帖董郴焙帛仟参币之匀充掣逐遍姓孺氯讼股哇暴忱义卉这勿兽结构化程序设计结构化程序设计for for 语句多样性语句多样性语句多样性语句多样性 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录for语句的多样性由于C语言中表达式的形式十分丰富,对for语句的三个控制表达式可以灵活运用,因此造成for语句形式多种多样。(1)为空语句如上例中求1-100的和。本来由完成的初始化可提到循环之外完成。(2)和是逗号表达方式(3)用空循环来延长时间常用空循环来产生延时,以达到某种特定要求。如:for(t=0;ttime;t+);(4)无限循环for循环的三个表达式中,任何一个都可以省略,但是分号;不可省略。所以下面的写法:for(;)是一个无限循环。将成为死循环。漫吟斗购滦篷绍嫌挥澜俊设糠破熏虚愁肘冉盒捐勺晓侈雅赖谅核精镍笋览结构化程序设计结构化程序设计3.3.5 3.3.5 循环的嵌套循环的嵌套循环的嵌套循环的嵌套 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录在一个循环内又完整地包含另一个循环,称为循环的嵌套,即循环体自身包含循环语句。前面介绍了三种类型的循环,它们自己本身可以嵌套,如在for循环中包含另一个for循环,也可以互相嵌套,例如可以for循环中包含一个while循环或者do-while循环等等。下面通过几个例子来介绍循环嵌套的概念和运用。【例3.26】打印如下形式的乘法小九九表:1*1=12*1=22*2=49*1=99*2=189*3=279*9=81分析:表体共九行,所以首先考虑一个打印九行的算法:for(i=1;i=9;i+)打印第i行其次考虑如何打印第i行。每行都有i个表达式?*?=积,可以写为:for(j=1;j=i;j+)打印第j个表达式涕雾施札乎折茎制钓铺特藉埔叫侠蜒骄英辜足虑沼儡晨惮祥机痊隶弓稳给结构化程序设计结构化程序设计循环的嵌套实例循环的嵌套实例循环的嵌套实例循环的嵌套实例 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录打印第j个表达式,可写为:printf(%d*%d=%-3d,i,j,i*j);在写这个语句时,不写换行,只能在第j个表达式输出后写一个语句使之换行。printf(n);综上所述,打印以上形式的乘法小九九表的程序如下:【例3.26】/*程序名为l3_26.cpp。*/#includestdio.hmain()inti,j;/*i,j分别控制行和列的输出*/for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%d*%d=%-3d,i,j,i*j);printf(n);/*另起一行*/踩互耳恶造准伸槛立具痞概惕潜彬抓浮隆兢恫征蚁纸萝涂绥灿竣孵角峻啸结构化程序设计结构化程序设计3.3.6 break3.3.6 break语句和语句和语句和语句和continuecontinue语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录1. break语句2. continue语句翱毁顷蚀征谤身样源丰搭嫩乖酸治司蓖祁素轨搂复种秸诵隘葫恫羞茎除故结构化程序设计结构化程序设计1. break1. break语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回返回3.3.63.3.6目录目录1. break语句前面已经介绍过用break语句跳出当前的switch语句流程。在循环结构中,也可以用break语句使流程跳出本层循环体,从而提前强制性结束本层循环。break语句的一般形式为:break;【例3.28】在循环体中break语句执行示例。#includestdio.hmain()/*程序名为l3_28.cpp。*/inti,s=0;for(i=1;i5)break;printf(s=%dn,s);printf(使用break语句时,s的最终值为:%dn,s);捐排比杆数煮精阳闪足扰傀宅茶心周氰摩溉捆袜巫叠佛黔涵蝶狞居馒旧苫结构化程序设计结构化程序设计breakbreak语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)程序运行后的输出结果如下:s=1s=3使用break语句时,s的最终值为:6本例中,如果没有break语句,程序将进行10次循环;但当i=3时,s的值为6,if语句中的表达式s5值为1,于是执行break语句,循环立即中断,跳出for循环,从而提前中止循环,并转向循环体外的下一条语句。此时,s的值为6。break语句使用说明:(1)只能在switch语句体和循环体内使用break语句。(2)当break语句出现在,其作用是跳出该switch语句体。当break语句出现在循环体中,但并不在switch语句体内时,则在执行break语句后,使流程跳出本层循环体。返回返回3.3.63.3.6目录目录喧摧郊破冶誊稿疗机零陡总墒兴随喧错恕凤凰渭芋戌刑蛮等偏艺稚磅矛态结构化程序设计结构化程序设计2. Continue2. Continue语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)2.continue语句continue语句的一般形式为:continue;【例3.30】将【例3.28】中的break语句改用continue语句,来比较两者的区别。#includestdio.hmain()/*程序名为l3_30.cpp。*/inti,s=0;for(i=1;i5)continue;printf(s=%dn,s);printf(使用continue语句时,s的最终值为:%dn,s);返回返回3.3.63.3.6目录目录光园耿豪置攻燃梳脯资糜暴寄埃钩掏验赘拾歼亨肤态朴纵邀族轴身因暗抽结构化程序设计结构化程序设计ContinueContinue语句语句语句语句 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)程序运行后的输出结果如下:s=1s=3使用continue语句时,s的最终值为:55在本例中,当i=1时,输出s=1,当i=2时,输出s=3,当i=3时,s的值为6,if语句中的表达式s5值为1,于是执行continue语句,跳过循环体中余下的语句,而去对for语句中的表达式3求值,然后进行表达式2的条件测试,最后根据表达式2的值来决定循环是否继续执行。不论continue是作为何种语句成分出现的,都将按此功能执行,这点与break有所不同。可以看出,continue语句的功能是结束本次循环。返回返回3.3.63.3.6目录目录淑格记哎欣疙警颈型闭剧忙屑瑞际胜侨裹糟肛赎掇飘轿玲灿酚丽喊雹媳兔结构化程序设计结构化程序设计3.3.7 3.3.7 编程实训编程实训编程实训编程实训1 1 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录【例3.32】编程输出如下图形:*程序如下:#includestdio.hmain()/*程序名为l3_32.cpp。*/inti,j;for(i=1;i=5;i+)for(j=1;j=10-i;j+)printf();for(j=1;j=2*i-1;j+)printf(*);printf(n);吮郭云邯菏宰秋眠汁口揩绚翱替蚀形标峙云匹历荤深忌伺厕檄种匠召艘隶结构化程序设计结构化程序设计3.3.7 3.3.7 编程实训编程实训编程实训编程实训2 2 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节首返回本节首【例3.33】求整数3-100中的素数。为了检查某数是否是素数,采用的方法是,从n=3起直到100止,逐个用i=2n/2去试除n,只要有一个能整除,说明该数不是素数。程序如下:main()/*程序名为l3_27.cpp。*/inti,n,num;for(n=3,num=0;n=100;n+)for(i=2;i1e-6)t=t*n;/*求n!*/e=e+1/t;/*实现求n!的倒数的和*/n+;printf(e=%8.6fn,e);运行结果:e=2.718282栅官铱释让壹刮学发半剂模孤肖震眼唱碧邦瓤部清涅崖瘫镐复回糯肯嫩畦结构化程序设计结构化程序设计3.4.2 3.4.2 综合实训综合实训综合实训综合实训2 2 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录通过本例可以体现这样一个编程思路:凡是遇到求若干个有规律变化的项的乘积,就可在循环体中用求累乘积的编程通式t=t*x来编程实现;求其和,用求累加和的编程通式s=s+x来编程实现,其中t、s分别为累积、累和,初值分别为t=1,s=0,x为变化的项的通式。【例3.35】百钱百鸡问题。公元前,我国古代数学家张丘建在算经一书中提出了百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?分析:这是一个有名的不定方程问题。设:cocks:鸡翁数、hens:鸡母数、chicks:鸡雏数,则有:cocks+hens+chicks=1005*cocks+3*hens+chicks/3=100据上述不定方程,很容易得到三个变量的取值条件:cocks:0-19之间的整数。hens:0-33之间的整数。chicks:0-100之间的整数。解题思路:依次取cocks值域中的一个值,然后再在试取hens值域中的每一个值,根据前两者取值,求出chicks后,看是否合乎题意,合乎者为解。鸥腑履泵泪忘伍呕氖肩色矿猩枕莲猩巷父豌岳碉加驴谚拴拽检辞依饥露越结构化程序设计结构化程序设计3.4.2 3.4.2 综合实训综合实训综合实训综合实训3 3 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录编程如下:/*源程序名为l3_35.cpp。百钱百鸡问题*/#includestdio.hmain()intcocks,hens,chicks;for(cocks=1;cocks=19;cocks+)for(hens=1;hens=33;hens+)chicks=100-cocks-hens;if(5*cocks+3*hens+chicks/3.0=100)printf(cocks=%d,hens=%d,chicks=%dn,cocks,hens,chicks);程序运行结果如下:cocks=4,hens=18,chicks=78cocks=8,hens=11,chicks=81cocks=12,hens=4,chicks=84本例采用的编程算法是穷举法。其基本思想是:对问题的所有可能状态一一测试,直到找到解或全部可能状态都测试过为止。下面例题为另一类型的穷举问题。色姐婴堑棘敞阜沂品氧望锈肯夜钝锄幌芳愿葱疾窘左恕绵饱握距惠计肪册结构化程序设计结构化程序设计【例3.36】爱因斯坦的阶梯问题。设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶时,正好到阶梯顶。问共有多少阶梯?问题分析:设阶梯数为:ladders,则题中条件可以改写为:(1)ladders%2=1(2)ladders%3=2(3)ladders%5=4(4)ladders%6=5(5)ladders%7=0由条件(5)知,阶梯数一定为7的倍数。于是可以从7开始,分别对7、17、21、28、35数列进行测试,看哪一个符合题意。由条件(1)又知,阶梯数一定是奇数,因此可把上述数列中的数去掉一半。算法:依次对7、7+14、7+14+14、用条件(2)(3)(4)进行测试,找出符合题意者。3.4.2 3.4.2 综合实训综合实训综合实训综合实训4 4 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录碑袖敝沤悼窃刃烫叙贤钎蜂狄赘浙浸催火贷嘱靛允朱搽振强咆滁诈蒲枪旧结构化程序设计结构化程序设计3.4.2 3.4.2 综合实训综合实训综合实训综合实训5 5 C C C C C C语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计 ( (V VVi iis ssu uua aal ll C CC+ + + 6 66.0 00环环环环环环境境境境境境)返回本节目录返回本节目录程序如下:/*程序名为l3_36.cpp。*/#includestdio.hmain()intladders=7;while(ladders%3!=2|ladders%5!=4|ladders%6!=5)ladders+=14;printf(ladders=%dn,ladders);运行结果:ladders=119丝货橡师停坚消獭癣爽寨萄要垫痹赢庄殃挪停爽粳危昼赚徊颊囊汝扁迢安结构化程序设计结构化程序设计
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号