项目四选择结构程序设计

上传人:工**** 文档编号:568424898 上传时间:2024-07-24 格式:PPT 页数:132 大小:1.14MB
返回 下载 相关 举报
项目四选择结构程序设计_第1页
第1页 / 共132页
项目四选择结构程序设计_第2页
第2页 / 共132页
项目四选择结构程序设计_第3页
第3页 / 共132页
项目四选择结构程序设计_第4页
第4页 / 共132页
项目四选择结构程序设计_第5页
第5页 / 共132页
点击查看更多>>
资源描述

《项目四选择结构程序设计》由会员分享,可在线阅读,更多相关《项目四选择结构程序设计(132页珍藏版)》请在金锄头文库上搜索。

1、项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计4.1 关系运算及其表达式关系运算及其表达式4.2 逻辑运算及其表达式逻辑运算及其表达式4.3 if语句和条件运算符语句和条件运算符4.4 switch语句语句4.5 选择结构程序设计举例选择结构程序设计举例4.6 本章小结本章小结习题习题实验题实验题娃卢兆瑞绝遵始互纯碑敲饿揉财抚嘶拄祷守琶持抄糟盲损蹦绞张迷暮诺燃项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计在解决实际问题中,许多时候需要根据给定的条件来决定做什么:条件满足时做什么,条件不满足时做什么。例如,在解一元二次方程的根时,如果b2-4ac0,则方程

2、有两个不相等的实根;如果b2-4ac0,则方程有两个相等的实根;如果b2-4acb”中的“”表示一个大于关系运算,如果a的值是5,b的值是3,则大于关系运算“”的结果为“真”,即条件成立;如果a的值是2,b的值是3,则大于关系运算“”的结果为“假”,即条件不成立。颗钱墟勘纂漠邵埂秃履艇姿爪楼蓑蕊府男匪腹迅撅斑徽搀琅骇本开惰宦矛项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计4.1.1 关系运算符及其优先次序关系运算符及其优先次序1关系运算符关系运算符C语言提供6种关系运算符:=(大于或等于)(大于)!=(不等于)注意:C语言中,“等于”关系运算符是双等号“=”,而不是单等号“

3、=”。灌招村屑泊畔摊戮萧组碌飘床川惶窒味壤完晾搏溅旁雀神啄具省酬盔孺百项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计2优先级优先级(1)在关系运算符中,前四个优先级相同,后两个也相同,且前四个高于后两个。例如,“”优先于“=”。而“”与“b,a+bc-d,(a=3)=b,(ab)=(bc)丈汞双退耳断善腹棉卧饵币劝拼圭溶浚贤滁应臭抢累毖擂露姚嘻楞乓乓溉项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计2关系表达式的值关系表达式的值关系表达式的值是一个逻辑值(非“真”即“假”)。由于C语言没有逻辑型数据,所以用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假

4、”。例如,假设num1=3,num2=4,num3=5,则:(1)num1num2的值为0,因为表达式的值为“逻辑假”,在C语言中用0表示。(2)(num1num2)!=num3的值为1,因为num1num2的值为0,显然不等于num3的值,所以不等于关系成立,即为“逻辑真”,用整数“1”表示。窖促儒费毋禄库础郸凶慌慰侯趁谅闹拾磅蒙葬满炉峭沏纫牢洼碟坞疥身财项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(3)num1num2num3的值为1,因为num1num2的值为1,1小于num3,即小于关系成立。(4)(num1num2)+num3的值为6,因为num1=0”,同时“

5、x=)&(x=0,同时x10*/(x5)/*x5*/!(x=0)/*否定x=0,即x不等于0时条件成立*/札打后脸适除掏陨死康椽辆析烛赊启珍十据赡搅驭麓悲攻享衍皖抨陈罩啤项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计2)逻辑运算符的运算规则(1)&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。(2)|:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。(3)!:当运算量的值为“真”时,运算结果为“假”;当运算量的值为假时,运算结果为“真”。掖猖需肠刷娱概颜屿勺诣步纂戎呕妈昔饭叮酵皱错嘻犬沼矛政氮剁剥缎那项目四选择结构程序设计项目四选

6、择结构程序设计项目四选择结构程序设计例如,假定x=5,则(x=0)&(x10)的值为“真”,(x5)的值为“假”。2逻辑运算符的运算优先级逻辑运算符的运算优先级(1)在三个逻辑运算符中,逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:!(非)&(与)|(或)片准坟礼炉犬史牛柑伞锌嘘惟辞袄继糕痕纸樟帝孰傀瞒庚镶友确嫉偏摸循项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(2)与其他种类运算符的优先关系如下:旬怔左馋幕冶剩胯刹福欺氢尝肩勿噎弦指残蘸镇坟缮苹须陆响频哦饮染哆项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计4.2.2 逻辑表达式逻辑表达式1逻辑表达式

7、的概念逻辑表达式的概念逻辑表达式是指用逻辑运算符将一个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。厘凯朝谁锅粹窿策沥整菊烬皱损升售桃恩鄙粪蠢豺舔显冻闹砍或壳读吗霉项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计2逻辑量的真假判定逻辑量的真假判定0和非和非0如前所述,C语言用整数“1”表示“逻辑真”,用“0”表示“逻辑假”。但在判断一个数据的“真”或“假”时,却以0和非0为根据:如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。数据的逻辑运算真值表如表4-1所示。何遵旬娶压窑耐华债适漏剐菇跑厚腹央鹊音踏窍同礁决揣澜乏习刮艘叁

8、妄项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计表表4-1 逻辑运算真值表逻辑运算真值表辟镐咬功淋尹精饵折某流查笆制覆霖顽崇陛宝蚜以讽协尖渠谜努纳躺筹迅项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计3说明说明(1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其他任何类型的数据,如实型、字符型等。(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说:对于逻辑与运算,如果第一个操作数被判定为“假”,由于第二个操作数不论“真”还是“假”,都不会对其结果产生影响,所以系统不再判定或

9、求解第二个操作数。负冠比站撬惊币浅娠逞壬闯耕岗召帧蜜谨浅歹魏溃飞楚已泄卫砷钉困房奎项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计对于逻辑或运算,如果第一个操作数被判定为“真”,同样的,第二个操作数不论“真”还是“假”,都不会对其结果产生影响,所以系统不再判定或求解第二个操作数。因为n1n2不成立,其值为0,则x的值为0,赋值表达式(x=n1n2)的值也为0。对于逻辑与运算,第一个操作数被判定为“假”,则不论第二个操作数(y=n3n4)是“真”还是“假”,其值都为“假”,所以不再计算该子表达式,故y保持原值不变。昧热忿壬捅屠皑祖佣吻锈函子斡悉淌邮篷修谐悦抛墙唯臂伏汽鹅乘邻缨赦

10、项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计4.3 if语句和条件运算符语句和条件运算符if语句是用来判定所给定的条件是否满足,并根据判定的结果(真或假)来决定执行所给出的两种操作之一。陆林飘侄乐纳多漆嗅冒益峪诲蚊复活田醇也孽竖掐骆扇隅械仆焰姥活控按项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计4.3.1 if语句语句1if语句的形式语句的形式C语言提供了三种形式的if语句:(1)if(表达式)语句。例如:if(xy)printf(%d,x);这种if语句的执行过程见图4-1(a)。横炭苹眼敦孽遏糜沉猛咯焊懊依逾抹章烷本掩圆昌佐埔辩亭从胁撂即牢烫项目四

11、选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计图4-1if语句的执行过程踩猪躲年捏糯焙骇侠划治智圃街踪飞仑哉足纠国哦字弹犯括纷呢猎痕均象项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计例如:任意输入两个实数,按代数值由小到大输出这两个数。main()floata,b,t;scanf(%f,%f,&a,&b);if(ab)t=a;a=b;b=t;/*功能为交换a与b的值*/printf(%5.2f,%5.2f,a,b);双退句偿蛀英宙历坎挎脯贵尘慈苗纸掇朋砚贤睹炊宋摄到共痞收域茎冗贫项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计运行示例:3.6

12、,-3.2-3.2,3.6(2)if(表达式)语句1else语句2。例如:if(xy)printf(%d,x);elseprintf(%d,y);这种if语句的执行过程见图4-1(b)。渍医吩粹丽岂阿坟似徊年桐剥作藉蚁畜躬煽呢芬限渺膨碎敬磕痰验即怒具项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(3)elseif语句结构。一般格式为if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式m)语句melse语句n流程图如图4-2所示。报杯烯致逾座砖瘸颅恢巨瓷贰厚苯宝东惹吻池稀坚夸告丢吻央寂众珠勋阶项目四选择结构程序设计项目四选择结

13、构程序设计项目四选择结构程序设计图4-2elseif语句结构流程图渗恤貌隶层蚊绞蔡弦索栖改械庐两吾舒彼永过抒经傍惭葡准燎啊躺澈徒辱项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计例如:scanf(%d,&number);if(number500)cost=0.15;elseif(number300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;炸俗蕾铺恒厚花倔儿曲妓汗蹋吞狐沽簇幅刮贷砸变当誊渤搓梯廖惺夷耀附项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计说

14、明:(1)三种形式的if语句中,在if后面都有“表达式”,一般为逻辑表达式或关系表达式。例如:if(a=b&x=y)printf(a=b,x=y);在执行if语句时先对表达式求解,若表达式的值为0,则按“假”处理,若表达式的值为非0,则按“真”处理,之后执行指定的语句。假如有以下if语句:if(3)printf(O.K.);瞒外尤舌眼彪猎丛极喀姨商朵挫儒错煎旱溃娃扑知容不伎虫坍窿患疟拣搏项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计此语句是合法的,执行结果输出“O.K.”,因为表达式的值为3,按“真”处理。由此可见,表达式的类型不限于逻辑表达式,可以是任意的数值类型(包括整

15、型、实型、字符型、指针型数据)。例如,下面的if语句也是合法的:if(a)printf(%d,a);执行后输出a的ASCII码值97。牡骡祸春炬钠囊蜒曙眉擅潮还原弥戒筐瞧堵着疙君丧瞄立奶鹃庐醇溃坐坞项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(2)第二、第三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。例如:if(x0)printf(%f,x);elseprintf(%f,-x);侩斑帐郊穴筹转哦委送搀聚克后整恋敝丘鳖选说群塑耽伪侯患脱僚晃短紧项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计这是由于分号是C语句中不可缺少的部分,

16、这个分号是if语句中的内嵌语句所要求的。如果无此分号,则出现语法错误。但应注意,不要误认为上面是两个语句(if语句和else语句),它们都属于同一个if语句。else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。鼠先拟幅坚酗酣甄脊甸藤早穴擂怕汛渝褥唁摩准内悯沽烈扶阶伐证巧挥利项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(3)在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。例如,已知三角形三边长,求该三角形面积的程序段为if(a+bc&b+ca&c+ab)s=0.5*(a

17、+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%6.2f,area);elseprintf(itisnotatrilateral);邑钟颅载围掀辰葫学涪拂壹浦异胆鲜栽熙浙咏蓉豆详洲限谴脚哮踢尊猾锣项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计【例【例4.1】输入任意三个整数,求三个数中的最大值。/*功能:说明if语句的格式*/main()intnum1,num2,num3,max;printf(pleaseinputthreenumbers:);scanf(%d,%d,%d,&num1,&num2,&num3);/*输入三个

18、整数*/焕迷怕赚孵孔钨瞄瘸拔弥匆晤泛威把滴痔磺瓷侍鄙壮东洞花滁蜂耕箱蜂坎项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计if(num1num2)max=num1;/*比较num1和num2,将大的数赋给max*/elsemax=num2;if(num3max)max=num3;printf(“Thethreenumbersare:%d,%d,%dn”,num1,num2,num3);printf(max=%dn,max);郁梁嗓鲁池癣裴耪师匆贴腊桓估扰锅仇偏熙铆通淄侗酚炼铂闰馒录茁檄沏项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计程序运行情况如下:plea

19、seinputthreenumbers:11,22,18Thethreenumbersare:11,22,18max=22紧这瞪戌驱宪主矮炽耘浆即扣商元劫幕豆刮俐辆跑筹籽或缉副镜棋佳侠淹项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计在本例中,首先输入任意三个整数并赋给变量num1,num2,num3。然后通过if语句判定条件(num1num2),如果条件满足,则将num1的值作为最大值,否则将num2的值作为最大值。再将前两个数的最大值max和num3比较,即判定条件(num3max),如果条件满足,则num3的值是最大值,否则原最大值不变。最后输出三个数的最大值。沙催午邑

20、荐症轻翟瑟乏懈纠曾诵遏釜莽罪炭弦奏暇嘎婶氰俞甸势须晤裁狼项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计本例中的第一个if语句可优化为如下不带else子句的形式:max=num1;if(num2max)max=num2;这种优化形式的基本思想是:首先取一个数预置为max(最大值),然后再用max依次与其余的数逐个比较,如果发现有比max大的,就用它给max重新赋值,比较完所有的数后,max中的数就是最大值。这种方法,对从三个或三个以上的数中找最大值的处理非常有效。笋叛谈丫歼博搂凑检郧耙帚孔谗弃论荒让蝎妨灾就套甄顺藕垄勘宇惮辐吐项目四选择结构程序设计项目四选择结构程序设计项目四

21、选择结构程序设计【例【例4.2】输入任意三个数num1、num2、num3,按从小到大的顺序输出。/*功能:说明if语句的格式和用法*/main()intnum1,num2,num3,temp;printf(pleaseinputthreenumbers:);scanf(%d,%d,%d,&num1,&num2,&num3);if(num1num2)甘楔骆筒日檬段阻山姑敛逗兹漫抓洱癣汉悟基铝甚批叭芽皿嗣栅河尝绘钢项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计temp=num1;num1=num2;num2=temp;/*交换num1与num2的值*/if(num2num3)

22、temp=num2;num2=num3;num3=temp;/*交换num2与num3的值*/if(num1num2)temp=num1;num1=num2;num2=temp;/*交换num1与num2的值*/printf(Threenumbersaftersorted:%d,%d,%dn,num1,num2,num3);啃犬镐遍凹冤殴亭隶哆苹凰扯胺匣叔掸模津帆讳移嘛谩膝嵌朴矮赴猖天揍项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计程序运行情况如下:pleaseinputthreenumbers:11,22,18Threenumbersaftersorted:11,18,2

23、2杀痔武陶谣撅吏追威铃耸顿财邪谐肯彤渭婴龚饯疽侗司鹅轰竟背奥缆杂娃项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计在本例中,首先判定条件(num1num2),如果条件满足,则num1和num2的值进行交换;然后再比较(num2num3),如果条件满足,则num2和num3的值进行交换,经过两次判定交换后,变量num3中的值为三个数中的最大值;最后比较num1和num2,(因为如果num2和num3进行了交换,则num2中的值就不是原来的值了),如果num1num2,则进行交换。经过这三次比较交换后,num1、num2、num3三个变量的值的顺序即为从小到大的顺序。鼠春粹锯吐哭

24、曹馏滔注锗堤醋河婶俄间一橙肺林帧幽蹬砸嗜配听诬对里柴项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计在本例中,两个变量值在交换时是借助于第三个变量来完成的。当条件满足要交换时,执行操作包括三个语句,这三个语句是一个整体,必须用花括号“”括起来,即使用复合语句形式。注意:复合语句中最后一个语句后面的分号不能省略!在此,有必要提到的一点是:良好的源程序书写习惯“左对齐、右缩进”。分玖萎谢谎敲爽擎留全圭贺绑攀狠操墨芯瓣乳棠矗盗卉踩从跟缮奸紧让稗项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(1)为了使源程序具有良好的结构和可读性,if行和else行左对齐。(2)

25、如果if和else子句所属的语句(组)另起一行开始,则应向右缩进34个字符,形成阶梯状;语句组内的顺序程序段应左对齐,如【例4.2】所示。如果语句(组)很简短,且跟在if行或else行的后面,就不存在缩进问题。如【例4.1】所示。慢邑己踢猴狂煞逻酋匡乓空门案伶堵就漂免疥淌耗脐效监汇妆带墙戴禾敢项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计【例【例4.3】一元二次方程ax2+bx+c=0的解。/*功能:说明elseif结构的用法*/#includemath.hmain()floata,b,c,term1,term2;scanf(%f%f%f,&a,&b,&c);if(a=0.

26、0&b=0.0)printf(unsolvable!n);elseif(a=0.0&b!=0.0)剩冒式肤琴氮骸走蛆臻滤勘据票乔母圭逃惠俊闷得病素记骄氖驳煽希巍话项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计printf(thesinglerootis%fn,-c/b);elseif(a!=0.0)doubledisc;disc=b*b-4*a*c;term1=-b/(2*a);term2=sqrt(fabs(disc)/(2*a);臭倚妓砾霹沪饥德蛀页泊完宋欲衙瓜贷话当获啄巫盯榆肥碴氮臭定秧扑潮项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计if(dis

27、c=A&ch=Z)?(ch+32):ch;printf(ch=%cn,ch);注意:从功能上说,if语句可完全实现条件运算符的功能,但在某些简单情况下,使用条件运算符可使程序更加简洁,如【例4.5】所示。检释日高晓舰照运殿杰额脸掌父锹怜哭苫落崩匀竖赢土讯哼锥上咎懦菌采项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计4.4 switch语句语句switch结构与elseif结构是多分支选择的两种形式。它们的应用环境不同:elseif用于对多条件并列测试,从中取一的情形;switch结构由于为单条件测试,用于从其多种结果中取一种的情形。票燃哲浊晓替锻魂蜀缆酬樊杯轧奉柞蕉冷氖来桂引

28、聂锦惰畔陪鹃姿红听狐项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计1switch语句的一般格式语句的一般格式switch语句的一般格式为switch(表达式)case常量表达式1:语句组1;break;case常量表达式2:语句组2;break;case常量表达式n:语句组n;break;default:语句组;break;/*default子句是可选的*/伴岿沧旱脸捶猿拳孝讶晃儡臆胎粉霉囚骤呐沿镁猜全央噎奏讹艘剧彩掖鳖项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计例如,下面的程序段用于判断学生某门课程的成绩等级。等级规定为:90100分为“优秀”,80

29、89分为“良好”,7079分为“中等”,6069分为“及格”,60分以下为“不及格”。甜桑跪扇贩渣隶辫削伐汝磋甘跨寂碳欢社妙讫米镊糟尘叹声褒辐腕徐麦措项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计scanf(%d,&score);switch(score/10)/*表达式“score/10”为整型值*/case10:case9:printf(优秀n);break;case8:printf(良好n);break;case7:printf(中等n);break;case6:printf(及格n);break;default:printf(不及格n);能舜阑畸镜匹翰研建薄烷患变百

30、拌内洛炕棒陨贬请怜试本缕血辩酒夺会仲项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计2switch语句的执行过程语句的执行过程(1)当switch后面“表达式”的值与某个case后面的“常量表达式”的值相同时就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句下面的语句(即右花括号下面的第一条语句)。(2)如果没有任何一个case后面的“常量表达式”的值与“表达式”的值匹配,则执行default后面的语句(组)。然后,再执行switch语句下面的语句。铁且险盟囤枝肺殷菜漆极蚊溯遮潭盗听惩钱瓮选苟叠乞偶深椿回反询润往项目四选

31、择结构程序设计项目四选择结构程序设计项目四选择结构程序设计3说明说明(1)switch后面的“表达式”可以是int、char和枚举型中的一种。(2)每个case后面“常量表达式”的值必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。论匠颗荐台医釉光厂成强故滔济假饮夯窝事庐揍搐例誊之舱辖井旷悯厨仟项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(3)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。(4)各case及

32、default子句的先后次序不影响程序执行结果。(5)多个case子句可共用同一语句(组)。(6)用switch语句实现的多分支结构程序,完全可以用if语句和if语句的嵌套来实现。辊壁箱卞蛆硫覆颁线刊偶尔折磋抑拨耽幸摘迅戳逐椅粘谊慈攀迄艇税呛尧项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计【例【例4.6】测试是数字、空白还是其他字符的函数(假设测试的对象只限于以上几种字符)。幽统肯吾挟辈娇呈索莹萝尼硫畜类曙满窒五信叭桥颗惹锥绵筷聘谣窝缩寒项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计test_char(intc)switch(c)case0:case1:

33、case2:case3:case4:case5:case6:case7:case8:case9:玫棠举塌葱长杯沪浩颖庚玲裤摄准霜端硬史蹦蒲启萄镐吴杭癌昭危综铸诅项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计printf(itsadigitern);break;case:casen:caset:printf(itsawhiten);break;default:printf(itsacharn);break;悬迂公竣狙柔勒最明栈财厂呐垒号雷抨冲邵幂级障赂创鲍顶扁颓禹绸随嘻项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计这个函数中,switch的条件表达式是一个

34、已有整数值c。今设c=8,于是从上至下比较各case后的常数后,从case8入口开始执行下面的语句。由于case8后面没有语句,因而执行case9后面的printf函数语句,然后遇到break语句,此时,跳出switch结构。default语句囊括了“除上述各case语句之外的一切情形”。当测试都失败时,即default以上的各case条件都不匹配时,执行default子结构,直到遇到break语句后退出switch结构。从语法上讲,default子结构的break语句并不是必须的,执行完default子结构中的各语句后,若后面已无可执行的语句,则会自动退出switch结构。这里使用了一个br

35、eak语句是为了排列上的整齐及理解上的方便。偿弟酶柜良诸仑枪怀犬该硼边杨欺罩曼郎赐碗泳孺枉旨疙窍帝五募琼狼柬项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计default子结构考虑了各case所列出的情形以外的其他情形。这样就能在进行程序设计时,把出现频率低的特殊情形写在case的后面,而将其余情况写在default后面作“统一处理”。如果只考虑对个别情况的处理,则可将各个情况分别写在各个case的后面,此时,default子结构可以省略。狡就钒奠马乎坞传陶孺彼琉高皂峪客半坷莆肠书笨抉奏肺答兄硝中阂箍沼项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计使用sw

36、itch结构还须注意以下几点:(1)switch结构的执行部分是一个由一些case子结构与一个可缺省的default子结构组成的复合语句。(要特别注意写一对花括号)(2)switch后面的条件表达式一般是一个整数表达式(或字符表达式),与之相应,case后面应是一个整数或字符,也可以是不含变量与函数的常数表达式。漓喳离哦略埠阔妹舜善言噬跋晶怪辛严栽症寂阵抗男灭绑靴艘腆低睁牢遵项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计例如:case3+4:等,但不允许写为intx=3,y=4,z=7;switch(z)casex+y:/*x+y为含变量的表达式(错误用法)*/弯厉跟肋痈满

37、镀孕坝猜丸示希劳睬炙油烹痴搔掳渡茶替剖芋儡饵搏挡霹俏项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(3)一个switch结构中不可以出现两个case具有相同的常量表达式值。例如:case3+2:case8-3:是不允许的。(4)switch结构允许嵌套。如【例4.7】中的switch结构。虎测椰捞浴诱鹊孩坚攒末备颊妄朗叛青单刷沂吧灼挖撅熏茵胞殖组烤渴蓖项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计【例【例4.7】联想猜词游戏。计算机中有许多单词,从中选择一个,然后让计算机猜你选的是哪个单词。先从键盘上输入单词的第一个字母,计算机就把以该字母开头的单词都打

38、印出来。如果打印出来的不只是一个(而是多个)单词,说明还未“猜到”,然后你再输入单词的第二个字母,以“启发”计算机。计算机就会猜中并输出该单词。屡左泊冀形醛蹿拟孵到凄泌铁掺稍沧啃樟墒屋险庇襟趁会迪兼与用脯瞪斯项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计下面以猜“计算机语言名”为例。/*联想猜词游戏*/#includestdio.hmain()intc;c=getchar();getchar();/*先接收一个字符,再接收一个分隔符换行或空格*/switch(c)casea:caseA:粒粟时叉迪摹生猴意蛆勒恨犬鹿馆妹娱纯吠爽扰卷刽碟疵故焰羊违紫添奈项目四选择结构程序设计项

39、目四选择结构程序设计项目四选择结构程序设计printf(Ada,Algol?n);c=getchar();gerchar();switch(c)cased:caseD:printf(Adan);break;casel:caseL:printf(Algoln);break;篆大样势巴迹匪冷靶厄喀暖苑骗冒漓芋歇魏疮甜撩理式苫牡受躇塞重恳责项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计default:printf(inputerrorn);break;break;caseb:caseB:pritnf(Basic,BCDL?n);c=getchar();getchar();swit

40、ch(c)惭悼山斟傀对劝酮乒贸杀蹈萧渺佳尾肇霍肆世诫堰糜妓柜艾卞孵倔喷协莉项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计casea:caseA:printf(Basicn);break;casec:caseC:printf(BCDLn)break;default:pritnf(inputerrorn)break;break;耕趣茵赖前荫轿畏皮撬棉冻科撵绪某钧烈曰悄领鸟伊鹏醇烽汽局仙赏桔类项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计casec:caseC:printf(C,Cobol?n);c=getchar();getchar();switch(c)c

41、asec:caseC:printf(Cn);break;caseo:caseO:赊媚狈蓟麓贬到激衍搜顽善求拖瑟膘狂傅野洋瞩悸锗料促赦挣挣癌习娘陕项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计printf(Coboln)break;default:printf(inputerrorn);break;break;default:printf(inputerrorn)break;兜换倡粪享硼良瞒炼郡铝倚站搁苦井胡蜂慨俐历袁鲸洛神图邻禹倦鹃郧猾项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计这是一个简单的switch嵌套。输入两个字母后就可找出惟一的单词。如果单词

42、量大而且两个字母还不能区分出单词,则嵌套层次就要增加,程序也就复杂多了。缕俏虫偶信纫伶娥彝狄乍梯材矩陷尝熟竖命婶忌氓琢扣尚陨鸿杜铁冷窥陌项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计4.5 选择结构程序设计举例选择结构程序设计举例 【例【例4.8】求一元二次方程ax2+bx+c=0的解(a0)。/*功能:求一元二次方程的解*/includemath.hmain()floata,b,c,disc,x1,x2,p,q;/*将a、b、c定义为实数*/假臆渤倔压秆寝赦版栈瓦王苫寡坯妹跃团面剖丹恰戚啸间剔状凛尹祖竹进项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计s

43、canf(%f,%f,%f,&a,&b,&c);/*输入一元二次方程的系数a,b,c*/disc=b*b-4*a*c;if(fabs(disc)le-6)x1=(-b+sqrt(disc)/(2*a);/*求出两个不相等的实根*/x2=(-b-sqrt(disc)/(2*a);printf(x1=%7.2f,x2=%7.2n,x1,x2);elsep=b/(2*a); /*求出两个共轭复根*/绑浊嫩整帛奸矿涩湃渔面沙湛函戳斤鸳鲁苇取怖宋氟抛夯航想曰闺谋娟唁项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计q=sqrt(fabs(disc)/(2*a);printf(x1=%7.

44、2f+%7.2fin,p,q);/*输出两个共轭复根*/printf(x2=%7.2f+%7.2fin,p,q);型丫郎厩絮十碑作相语长箔挡贮缮苫狞叔炊额震敏搓供嫌库誉呻冷抖履夏项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计说明:由于disc(即b2-4ac)是一个实数,而实数在计算机中存储时经常会有一些微小误差,所以不能直接判断disc是否等于0。本例采取的方法是:判断disc的绝对值是否小于一个很小的数(例如10-6)。如果小于此数,就认为disc=0。思考题:如果将系数a、b、c定义成整数,能否直接判断disc是否等于0?浩骚煤抑魔远虐奥烛藩兵啃襟寂铲驹搏射蛋妊暑奉称

45、垢添黑丰娇爱唾滞恼项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计【例【例4.9】已知某公司员工的保底薪水为500元,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):profit1000没有提成1000profit2000提成10%2000profit5000提成15%5000profit10000提成20%10000profit提成25%堂渡偶戈哼炼驼砾搔朔淑脚霞獭痢瞥驾翠鬼糖任疽韩鞘剃嘱匣欲伴煞谴礁项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计算法设计要点:本题显然是一个多分支结构。既可以用elseif语句来实现,也可以使用

46、switch语句来求解。前一种方法留给读者自己完成,本例使用后一种方法。为使用switch语句,必须将利润profit与提成的关系转换成某些整数与提成的关系。捶冤骡填胶刹款掂坦晦陛浚萎颂锻衅但愧废祝钞且摄瞥牲趴这肝阳浇案蜀项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计分析本题可知,提成的变化点都是1000的整倍数(1000、2000、5000),如果将利润profit整除1000,则:profit1000对应0、11000profit2000对应1、22000profit5000对应2、3、4、55000profit10000对应5、6、7、8、9、1010000profi

47、t对应10、11、12路奔垃么焊契豺骏窍胁障率曾方夺帮娩睬驶弦美侧稻傈募萄劳喳乌课毡弊项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计为解决相邻两个区间的重叠问题,最简单的方法是:利润profit先减1(最小增量),然后再整除1000,即(profit-1)/1000。profit1000对应01000profit2000对应12000profit5000对应2、3、45000profit10000对应5、6、7、8、910000profit对应10、11、12瑰懒宵拷探速岭钾拇旭盅愧汐丧咏蔷晃疗鸳芬匀鞋暇劈茧租静蠕计裴搅狼项目四选择结构程序设计项目四选择结构程序设计项目四选

48、择结构程序设计程序如下:/*功能:已知利润求薪水*/main()longprofit;intgrade;floatsalary=500;printf(Inputprofit:);scanf(%d,&profit);grade=(profit-1/1000;/*将利润减1,再整除1000,转化成switch语句中的case标号*/棠践决耸焙衷碳刮青酮拣摘忆残南氛捌榔渍扰从泰功挨锭崔蔷瞅恋曹巡杂项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计switch(grade)case0:break;/*profit1000*/case1:salary+=profit*0.1;break;

49、/*1000profit2000*/case2:case3:case4:salary+=profit*0.15;break;/*2000profit5000*/case5:case6:称啪语谬猜祖叼翼踏剿坑肘加珠凝器缺帮你犊片确冀拓焦侦烟涤琉卓愉搂项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计case7:case8:case9:salary+=profit*0.2;break;/*5000profit10000*/default:salary+=profit*0.25; /*100000,则y=1;否则y=0”的语句是()。AswitchB嵌套的if-elseCif-els

50、eDif(2)下列表达式中,不满足“当x的值为偶数时值为真,为奇数时值为假”的要求的是()。Ax%2=0B!x%2!=0Cx/2*2-x=0D!(x%2)手芜濒羹好界墅丑揉实余丑箭坠棵比那翟终酣革剑狱抄晾舷钝烬敏睛扎弱项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(3)以下程序片段()。intx=2,y=3;if(x=y)printf(*x=%d,x);elseprintf(#y=%d,y);A语法错误B输出为:*x=2C输出为:#y=2D输出为:#y=3谨垢延驭乐唉涧拙燥靴怯贵钞波反豆顾他惋减厘迟群是樱定凑茧嗣夺嘛页项目四选择结构程序设计项目四选择结构程序设计项目四选择结

51、构程序设计(4)能正确表示“当x的取值在1,10和200,210范围内为真,否则为假”的表达式的是()。A(x=1)&(x=200)&(x=1)|(x=200)|(x=1)&(x=200)&(x=1)|(x=200)|(x=210)梨洋荆颧砒神螺红眠繁博掂吊宦售霖音肤灵彬括挪仗饯疵讽梳稻钳屯透丽项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(5)下列程序运行后的输出结果是()。main()inta1=10,a2=-9,a3=0,a4=100,x;if(a1a2)x=a1,a1=a2,a2=x;if(a1a3)x=a1,a1=a3,a3=x;if(a1a4)x=a1,a1=a

52、4,a4=x;if(a2a3)x=a2,a2=a3,a3=x;if(a2a4)x=a2,a2=a4,a4=x;if(a3b)&(n=cd)”语句后,n的值为()。A1B2C3D4坟荐候戈饰狐霖关催喳绍对俄相症它苇独疡疽噎岩倚裂贫虑垫涝灵嗡骋艳项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(8)下面错误的if语句(设intx,a,b;)是()。Aif(a=b)x+;Bif(a=0|+b0)+c;printf(%d,%d,%d,a,b,c);A0,0,0B1,1,1 C1,0,1 D0,1,1臻杠援径短毫顶款药坐眼猿车畅苹申叉羊双赠务墅焰饺虚征睡沤尧裴补属项目四选择结构程序设计

53、项目四选择结构程序设计项目四选择结构程序设计(11)下述程序的输出结果是()。main()intx=-1,y=4,k;k=x+=0&!(y-B&CA|AB”的值是。(6)有语句“intx=3,y=-4,z=5;”,则表达式“(x&y)=(x|z)”的值为。(7)若有语句“intx=1,y=2,z=3;”,则表达式“(xy?x:y)=z+”的值是。(8)执行以下程序段后,a=;b=;c=。二档拌血桌持判褥吱湿辞痛搁袄茨释痞忆或赞屠扩听垛殉析恫湘瑚胺脱鬃项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计intx=10,y=9;inta,b,c;a=(x-=y+)?x-:y+;b=x

54、+;c=y;粟巴属弄服鹃败梅瓤闽辱荒猾侣亦远诫阔纵丙兽捅选蛙凌热报蚌价酚帘剐项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(9)下列程序段功能所对应的分段函数是。if(x0)y=-1;elseif(x=0)y=0;elseif(x1000)y=1;elsey=2;抄恋改壶灰国鲍呕款摘蚕饭舷下眯畔炼斥蒲昆尼迪靴映橱顿弓仑毡冷酋麻项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(10)运行下列程序的输出结果是。main()intn=1;switch(n-)case0:printf(%1d,n);case1:printf(%1d,n);case2:printf(

55、%1d,n);足彭榜恬荔敲解犁荣徽诀航涡闻斥纶姑末魔范讣访农狗梧待若困枚毙尘武项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(11)根据以下函数关系,对输入的每个x值,计算出相应的y值,请填空使程序完整。main()intx,c,m;floaty;scanf(%d,&x);if()c=-1;elsec=;switch(c)例迭房乖捆睛汪梧阂扇俏卓稚然编掉盼衷趾比琳浦怕节侣怪肆戴诅辫旺逆项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计case1:y=0;break;case0:y=x;break;case1:y=10;break;case2:case3:y=

56、-0.5*x+20;break;default:y=-2;蕴鸥源烃玫驻匀胸楚朽林副兢瓢够讼鳖骚雪斯筛程京爸浊叔叼悸郝芋烧纬项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计if()printf(y=%f,y);elseprintf(error!);奈专捂牺颊辈苗泻饼缝塞境募型胳颧皿蒸厨细肃林协已袍疫窥窃措莆栈闲项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计(12)以下程序输出x、y、z三个数中的最小值,请填空使程序完整。main()intx=4,y=5,z=8;intu,v;u=xy?;v=ub|b-c);/*输出“逻辑或”运算的值*/printf(%dn,

57、!(ab);/*输出“逻辑非”运算的值*/printf(%dn,a!=c|!b&(a=1);朋搬跋詹序瓢施刷欠撂件驴搁微浇遵孩肪往禾坚吞搅顾报芭昂接棱酶网已项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计程序(二)功能:编程实现求分段函数的值。要求如下:(1)用if语句实现分支。自变量x与函数值均采用双精度类型。(2)自变量x值从键盘输入,且输入前要有提示信息。(3)分别以-3.0,-1.0,0,0.5,5.5,-8.5,15.5作为自变量的值,运行该程序,记录并分析运行结果。舆赞悦很作递骸榜趴锥悔育溯豫隆推汛寝磷胚心昆滇浩僳糖遮购削止碌伏项目四选择结构程序设计项目四选择结构

58、程序设计项目四选择结构程序设计程序(三)功能:用户键入任意两个操作数和“+、-、*、/”中的一个运算符,由计算机输出运行结果。规效懒利暇刘革选啃撅祭恋志乙然肛甘衅映桌告奢独产阐饮伊术毁倡麦较项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计参考程序:#includemain()floatresult,x,y;charch;printf(ninputx,y:);scanf(%f,%f,&x,&y);printf(ninputoperator(+,-,*,/):);答碎八闯摹戎添避棍罗婪恬析椿瞅永凯趴山折燕榴酮肺仆以泪瞅答撰金侈项目四选择结构程序设计项目四选择结构程序设计项目四选择

59、结构程序设计scanf(%c,&ch);result=0;switch(ch)case+:result=x+y;break;case-:result=x-y;break;case*:result=x*y;break;case/:if(y!=0.0)result=x/y;elseprintf(divideoverflow);break;岛吨讳柞纂墟序脆疼哇袄糟策鸽柬箕脐吞折革明谱依补途裤赐熟咎内牟刹项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计default:printf(sorryyouhavemakemistakespleasedoitagain);printf(%6.2

60、f%c%6.2f=,x,ch,y);printf(%6.2fn,result);祁盯颠酮吏旦侠彦鳃猖乐营跌刺簇技幻饱顶揣萍欢街阿呻爸摧锡乍拥苹纂项目四选择结构程序设计项目四选择结构程序设计项目四选择结构程序设计3实验分析与总结实验分析与总结(1)如果把程序(一)中的输出函数语句“printf(%dn,!(ab);”中逻辑表达式“!(ab)”的括号去掉,结果是否相同?试分析说明。(2)程序(一)运行完以后,变量a的值是多少?(3)程序(三)中如不加default会出现什么问题?试分析说明。(4)程序(三)中任意去掉两个break语句,程序运行流程会有什么变化?试分析说明。岂星缄普瑶垃晦握渊丫氰盾扦椽鄂幕凰释乌甜顾同馆袒豢纪箩红瞬泻侍岿项目四选择结构程序设计项目四选择结构程序设计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号