五章选择结构程序设计

上传人:cl****1 文档编号:588170086 上传时间:2024-09-07 格式:PPT 页数:43 大小:761.03KB
返回 下载 相关 举报
五章选择结构程序设计_第1页
第1页 / 共43页
五章选择结构程序设计_第2页
第2页 / 共43页
五章选择结构程序设计_第3页
第3页 / 共43页
五章选择结构程序设计_第4页
第4页 / 共43页
五章选择结构程序设计_第5页
第5页 / 共43页
点击查看更多>>
资源描述

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

1、东北师范大学计算机学院 2008年秋季学期第五章第五章选择结构程序设计选择结构程序设计主要内容主要内容:(1)关系运算关系运算(2)逻辑运算逻辑运算(3)if语句的结构语句的结构(4)switch语句的结构语句的结构(5)应用两种选择结构解决实际问题应用两种选择结构解决实际问题1东北师范大学计算机学院 2008年秋季学期Professional WordsSelection structure选择结构选择结构Arithmetic operator算术运算符算术运算符Relational operator关系运算符关系运算符Logical operator逻辑运算符逻辑运算符nested 嵌嵌套

2、套priority 优先优先级级2东北师范大学计算机学院 2008年秋季学期选选择择结结构构的的作作用用:根根据据指指定定的的条条件件是是否否满满足足,决决定定从从给给定定的的两两组组或或多多组组操操作作中中选择其一。实现方法主要有两种:选择其一。实现方法主要有两种:vifelsevswitch3东北师范大学计算机学院 2008年秋季学期一、关系运算符和关系表达式一、关系运算符和关系表达式( (Relationalopertor&expression)1、关系运算符关系运算符比比较较大大小小的的运运算算称称为为关关系系运运算算,是是逻逻辑辑运运算算的的一一种种。C语语言言提提供供了了六六种种关

3、关系系运运算算,分分为为两两个个优先级。优先级。,=,优先级高优先级高=,!=,优先级低优先级低关系运算的优先级低于算术运算,高于赋值运算关系运算的优先级低于算术运算,高于赋值运算ab+3a=b=3等效于等效于a=(b=3)a=b3等效于等效于a=(b3)4东北师范大学计算机学院 2008年秋季学期2、关系表达式、关系表达式 由关系运算符将两个表达式连接起来的由关系运算符将两个表达式连接起来的式子称为关系表达式,关系表达式的值式子称为关系表达式,关系表达式的值为为“真真”或或“假假”,C语言没有逻辑型数语言没有逻辑型数据,所以用非据,所以用非0表示真,用表示真,用0表示假。但表示假。但关系表达

4、式的返回值只有关系表达式的返回值只有0或或1关系表达式满足左结合性关系表达式满足左结合性,a=5,b=4,c=3,abc=? 05东北师范大学计算机学院 2008年秋季学期二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式( (Logicaloperator&expression) )1、逻辑运算符逻辑运算符&,|,!(单目运算符(单目运算符Unary)优先级:优先级:!&|已学过的四类运算符之间的关系已学过的四类运算符之间的关系!算术运算符算术运算符关系运算符关系运算符&|赋值运算符赋值运算符6东北师范大学计算机学院 2008年秋季学期三种逻辑运算符的真值表三种逻辑运算符的真值表aba&b

5、a|b!a真真真真真真真真假假真真假假假假真真假假假假真真假假真真真真假假假假假假假假真真7东北师范大学计算机学院 2008年秋季学期三种逻辑运算符的真值表三种逻辑运算符的真值表aba&ba|b!a真真1真真1真真1真真1假假0真真1假假0假假0真真1假假0假假0真真1假假0真真1真真1假假0假假0假假0假假0真真18东北师范大学计算机学院 2008年秋季学期三种逻辑运算符的真值表三种逻辑运算符的真值表aba&ba|b!a111101001001011000019东北师范大学计算机学院 2008年秋季学期2、逻辑表达式、逻辑表达式逻逻辑辑表表达达式式的的结结果果用用0或或1表表示示,但但在在判

6、判断断一一个个量量的的真真假假时时,用用0表表示示假假,用用非非0表表示示真真。C语语言言在在求求解解逻逻辑辑表表达达式式时时,并并不不是是所所有有的的逻逻辑辑运运算算符符都都被被执执行行,只只有有在必须执行的情况下才执行该运算符在必须执行的情况下才执行该运算符&当当为为假假时时,不不再再求求的值的值10东北师范大学计算机学院 2008年秋季学期(m=ab)&(n=cd)a=1,b=2,c=3,d=4,m,n的原值为的原值为1执执行行后后m的的值值为为0,n的的值值仍仍然然为为1,因因为为该该表表达达式没有被求解式没有被求解例例,判判断断一一个个年年份份是是不不是是闰闰年年,当当year能能被

7、被4整整除除,但但不不能能被被100整整除除,或或能能被被400整整除除,则则为为闰年闰年year%4=0&year%100!=0|year%400=0(year%4=0&year%100!=0)|year%400=011东北师范大学计算机学院 2008年秋季学期三、三、if语句语句1、if语句的三种形式语句的三种形式uif(表达式表达式)语句语句uif(表达式表达式)语句语句1else语句语句2uif(表达式表达式1)语句语句1elseif(表达式表达式2)语句语句2elseif(表达式表达式m)语句语句melse语句语句n12东北师范大学计算机学院 2008年秋季学期例,输入例,输入3个数

8、个数a,b,c,按由小到大的顺序输出按由小到大的顺序输出main()inta,b,c,temp;scanf(“%d%d%d”,&a,&b,&c);if(ab)temp=a;a=b;b=temp;if(ac)temp=a;a=c;c=temp;if(bc)temp=b;b=c;c=temp;printf(“%d,%d,%d”,a,b,c);13东北师范大学计算机学院 2008年秋季学期2、if语句嵌套语句嵌套(nested)ifelse语语句句,语语句句中中可可以以嵌嵌套套if语语句句,else与与离离它它最近的最近的if配对配对例,求例,求sign函数函数main()floatx;inty;s

9、canf(“%d”,&x);if(x0)y=1;elseif(x=0)y=0;elsey=-1;printf(“%f,%d”,x,y);x=0x=0)if(x0)y=1;elsey=0;elsey=-1;printf(“%f,%d”,x,y);x=0xb?a:cb?(a=100):(b=100)ab?printf(“%d”,a):printf(“%d”,b);表表达达式式2和和表表达达式式3的的类类型型可可以以不不同同,向向高级别的转换高级别的转换xy?1:1.5当当xy时,结果为时,结果为1.018东北师范大学计算机学院 2008年秋季学期例例,输输入入一一个个字字符符,判判别别它它是是否否

10、为为大大写写字字母母,如如果果是是大大写写字字母母,则则转转换换为为小小写写字母输出,否则原样输出。字母输出,否则原样输出。main()charch;scanf(%c”,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(“%c”,ch);19东北师范大学计算机学院 2008年秋季学期说明说明条件运算符一定程度上可替代条件运算符一定程度上可替代ifelse语句语句当条件复杂时当条件复杂时,最好不用这种结构最好不用这种结构,不便不便于理解程序于理解程序20东北师范大学计算机学院 2008年秋季学期练练习习1.表示表示x在在1,8之内为真时的表达式之内为真时的表达式_2.i

11、nta=2,b=2,c=3,表达式表达式a|a-b&!c的值的值_3.以下程序段的输出结果为以下程序段的输出结果为:_inta=5,x=6;if(x=a)printf(“1:%dn”,x);elseprintf(“2:%dn”,x);21东北师范大学计算机学院 2008年秋季学期4.下列程序段的功能是判断三角形是等边下列程序段的功能是判断三角形是等边,等腰还是一等腰还是一般三角形般三角形,或者不能构成三角形,将程序填充完整或者不能构成三角形,将程序填充完整.main()inta,b,c;scanf(“%d%d%d”,&a,&b,&c);if_/能构成三角形能构成三角形if_printf(“等边

12、等边n”);elseif_printf(“等腰等腰n”);elseprintf(“能构成三角形能构成三角形n”);elseprintf(“不能构成三角形不能构成三角形n”);22东北师范大学计算机学院 2008年秋季学期四、四、switch语句语句当分支数较多时,用当分支数较多时,用switch语句语句1switch语句的一般形式语句的一般形式switch(表达式)(表达式)case常量表达式常量表达式1:语句:语句1;case常量表达式常量表达式2:语句:语句2;case常量表达式常量表达式n:语句:语句n;default:语句语句n+1;23东北师范大学计算机学院 2008年秋季学期2、有

13、关、有关switch语句的说明语句的说明(1)switch后的表达式可以是任何类型后的表达式可以是任何类型(2)当当表表达达式式的的值值与与某某一一case后后的的常常量量表表达达式式的的值值相相同同时时,则则执执行行其其后后的的语语句句,如如果果与与所所有有的的case后后的的值值都都不不同同,则则执执行行default后后的的语语句句(3)各各个个case的的值值互互不不相相同同;多多个个case可可以以对对应一个语句应一个语句(4)执执行行某某个个case后后,接接着着执执行行下下一一个个case而而不再进行判断,所以要加不再进行判断,所以要加break跳出跳出switch24东北师范大

14、学计算机学院 2008年秋季学期五、五、程序举例程序举例例例1,按按照照考考试试成成绩绩等等级级打打印印出出百百分分制制分分数数段段,可以用可以用switch语句来实现语句来实现switch(grade)caseA:printf(“85100n”);caseB:printf(“7084n”);caseC:printf(“6069n”);caseD:printf(“60n”);break;caseD:printf(“60n”);break;default:printf(“errorn”);26东北师范大学计算机学院 2008年秋季学期例例3 3,写一程序,判断某一年是否闰年,写一程序,判断某一年

15、是否闰年main()intyear,leap;if(year%4=0&year%100!=0|year%400=0)leap=1;elseleap=0;if(leap=1)printf(“%dyearisleap”,year);elseprintf(“%dyearisnotleap”,year);27东北师范大学计算机学院 2008年秋季学期 例例4,求,求ax2+bx+c=0方程的解方程的解main()floata,b,c,d,p,q,x1,x2;scanf(%f%f%f,&a,&b,&c);if(fabs(a)=1e-6)printf(isnotaquadraticn);elsed=b*b

16、-4*a*c;p=-b/(2*a);if(fabs(d)1e-6)x1=p+sqrt(d)/(2*a);x2=p-sqrt(d)/(2*a);printf(hastwodistinctrealroots:%8.2f,%8.2fn,x1,x2);elseq=sqrt(-d)/(2*a);printf(hascomplexroots:n);printf(%8.2f+%8.2fin,p,q);printf(%8.2f-%8.2fin,p,q);29东北师范大学计算机学院 2008年秋季学期例例5,运运输输公公司司对对用用户户计计算算运运费费,路路程程S越越远远,每每公里运费越低,标准如下:公里运费越

17、低,标准如下:s250Km没有折扣没有折扣250=s5002%折扣折扣500=s10005%折扣折扣1000=s20008%折扣折扣2000=s300010%折扣折扣3000=3000)c=12;elsec=s/250;switch(c)case0:d=0;break;case1:d=0.02;break;case2:case3:d=0.05;break;31东北师范大学计算机学院 2008年秋季学期case4:case5:case6:case7:d=0.08;break;case8:case9:case10:case11:d=0.1;break;case12:d=0.15;break;f=p

18、*w*s*(1-d);printf(“s=%d,d=%f,f=%f”,s,d,f);32东北师范大学计算机学院 2008年秋季学期练习练习1.下列程序段执行后,下列程序段执行后,a的值是多少?的值是多少?intx=5,y=5,z=10,a;switch(x=y)case1:if(yz)a=1;elsea=2;case2:switch(z)case10:a+=10;break;case11:a+=20;case0:a*=10;33东北师范大学计算机学院 2008年秋季学期2.编写一程序,根据输入的年份和月编写一程序,根据输入的年份和月份,计算该月有多少天?份,计算该月有多少天?3.输入一个日期,

19、计算该日期是今年输入一个日期,计算该日期是今年(2009)的第几天?)的第几天?4.输入某一年的输入某一年的1月月1日是星期几日是星期几,然后再输然后再输入一个日期入一个日期,计算这一天是星期几计算这一天是星期几?(学完第六章以后学完第六章以后,会有更好的解决方案会有更好的解决方案)34东北师范大学计算机学院 2008年秋季学期5.接受一个字符,例如用接受一个字符,例如用“+”表示加法,表示加法,用用“”表示减法。接受表示减法。接受num1和和num2两个数。如果输入的字符为两个数。如果输入的字符为“+”,则将,则将这两个数相加并显示相应的结果。如果这两个数相加并显示相应的结果。如果输入的字符

20、为输入的字符为“”,则将这两个数相,则将这两个数相减并显示相应的值。要求完成减并显示相应的值。要求完成+,-,*,/四种四种运算。运算。6.编写一个程序,从用户输入的三个数中编写一个程序,从用户输入的三个数中找到最大值,并将该最大值输出。找到最大值,并将该最大值输出。35东北师范大学计算机学院 2008年秋季学期2代码代码:#include#includevoidmain()intyear,month,days;scanf(%d%d,&year,&month);switch(month)case1:case3:case5:case7:case8:case10:case12:days=31;br

21、eak;36东北师范大学计算机学院 2008年秋季学期case2:if(year%4=0&year%100!=0|year%400=0)days=29;elsedays=28;break;case4:case6:case9:case11:days=30;break;default:printf(inputiserror!n);exit(0);printf(days:%dn,days);37东北师范大学计算机学院 2008年秋季学期3代码代码:voidmain()intyear,month,day,days;scanf(%d%d%d,&year,&month,&day);switch(month

22、)case1:days=day;break;case2:days=31+day;break;case3:days=31+28+day;break;case4:days=31+28+31+day;break;case5:days=31+28+31+30+day;break;case6:days=31+28+31+30+31+day;break;case7:days=31+28+31+30+31+30+day;break;38东北师范大学计算机学院 2008年秋季学期case8:days=31+28+31+30+31+30+31+day;break;case9:days=31+28+31+30+3

23、1+30+31+31+day;break;case10:days=31+28+31+30+31+30+31+31+30+day;break;case11:days=31+28+31+30+31+30+31+31+30+31+day;break;case12:days=31+28+31+30+31+30+31+31+30+31+30+day;break;default:printf(inputiserror!n);exit(0);if(year%4=0&year%100!=0|year%400=0)&month2)days+;printf(days=%dn,days);39东北师范大学计算机学院

24、 2008年秋季学期4代码代码:#include#includevoidmain()intyear,month,day,week,week1,days;scanf(%d%d%d%d,&year,&month,&day,&week);switch(month)case1:days=day;break;case2:days=31+day;break;case3:days=31+28+day;break;case4:days=31+28+31+day;break;case5:days=31+28+31+30+day;break;case6:days=31+28+31+30+31+day;break;

25、case7:days=31+28+31+30+31+30+day;break;40东北师范大学计算机学院 2008年秋季学期case8:days=31+28+31+30+31+30+31+day;break;case9:days=31+28+31+30+31+30+31+31+day;break;case10:days=31+28+31+30+31+30+31+31+30+day;break;case11:days=31+28+31+30+31+30+31+31+30+31+day;break;case12:days=31+28+31+30+31+30+31+31+30+31+30+day;b

26、reak;default:printf(inputiserror!n);exit(0);if(year%4=0&year%100!=0|year%400=0)&month2)days+;week1=(days+week-1)%7;printf(week1=%dn,week1);41东北师范大学计算机学院 2008年秋季学期5代码代码:#includemain()inta,b;charop;printf(inputoperator:n);scanf(%c,&op);printf(inputtwooperands:n);scanf(%d%d,&a,&b);42东北师范大学计算机学院 2008年秋季学期switch(op)case+:printf(%d%c%d=%dn,a,op,b,a+b);break;case-:printf(%d%c%d=%dn,a,op,b,a-b);break;case*:printf(%d%c%d=%dn,a,op,b,a*b);break;case/:printf(%d%c%d=%dn,a,op,b,a/b);break;default:printf(operatorerror!n);43

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

最新文档


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

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