五章选择结构程序设计.ppt

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

《五章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《五章选择结构程序设计.ppt(43页珍藏版)》请在三一办公上搜索。

1、1,第五章 选择结构程序设计,主要内容:(1)关系运算(2)逻辑运算(3)if语句的结构(4)switch语句的结构(5)应用两种选择结构解决实际问题,2,Professional Words,Selection structure 选择结构 Arithmetic operator 算术运算符Relational operator 关系运算符Logical operator 逻辑运算符nested 嵌套priority 优先级,3,选择结构的作用:根据指定的条件是否满足,决定从给定的两组或多组操作中选择其一。实现方法主要有两种:if elseswitch,4,一、关系运算符和关系表达式(Rel

2、ational opertor&expression),1、关系运算符 比较大小的运算称为关系运算,是逻辑运算的一种。C语言提供了六种关系运算,分为两个优先级。,=,优先级高=,!=,优先级低关系运算的优先级低于算术运算,高于赋值运算ab+3a=b=3 等效于a=(b=3)a=b3 等效于a=(b3),5,2、关系表达式,由关系运算符将两个表达式连接起来的式子称为关系表达式,关系表达式的值为“真”或“假”,C语言没有逻辑型数据,所以用非0表示真,用0表示假。但关系表达式的返回值只有0或1 关系表达式满足左结合性,a=5,b=4,c=3,abc=?,0,6,二、逻辑运算符和逻辑表达式(Logic

3、al operator&expression),1、逻辑运算符&,|,!(单目运算符Unary)优先级:!&|已学过的四类运算符之间的关系!算术运算符关系运算符&|赋值运算符,7,三种逻辑运算符的真值表,8,三种逻辑运算符的真值表,9,三种逻辑运算符的真值表,10,2、逻辑表达式,逻辑表达式的结果用0或1表示,但在判断一个量的真假时,用0表示假,用非0表示真。C语言在求解逻辑表达式时,并不是所有的逻辑运算符都被执行,只有在必须执行的情况下才执行该运算符&当为假时,不再求的值,11,(m=ab)&(n=cd)a=1,b=2,c=3,d=4,m,n的原值为1 执行后m的值为0,n的值仍然为1,因为

4、该表达式没有被求解 例,判断一个年份是不是闰年,当year能被4整除,但不能被100整除,或能被400整除,则为闰年year%4=0&year%100!=0|year%400=0(year%4=0&year%100!=0)|year%400=0,12,三、if语句,1、if语句的三种形式 if(表达式)语句 if(表达式)语句1 else 语句2 if(表达式1)语句1 else if(表达式2)语句2 else if(表达式m)语句m else 语句n,13,例,输入3个数a,b,c,按由小到大的顺序输出 main()int a,b,c,temp;scanf(“%d%d%d”,14,2、if

5、语句嵌套(nested),if else 语句,语句中可以嵌套if语句,else与离它最近的if 配对例,求sign函数 main()float x;int y;scanf(“%d”,x=0,x0,15,方法二:main()float x;int y;scanf(“%d”,x=0,x0,16,3、条件运算符,表达式1?表达式2:表达式3 先求表达式1的值,如果为真,则求表达式2的值,且将表达式2的值做为整个条件表达式的值;如果表达式1的值为假,则求表达式3的值且将其做为整个表达式的值。条件运算符的优先级高于赋值,低于算术、关系和逻辑运算符条件运算符满足右结合性,从右向左计算,17,举例,ab?

6、a:cd?c:da,b,c,d的值分别为1,2,3,4,结果为?,3,18,表达式2 和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。ab?(a=100):(b=100)ab?printf(“%d”,a):printf(“%d”,b);表达式2和表达式3的类型可以不同,向高级别的转换 xy?1:1.5 当xy时,结果为1.0,19,例,输入一个字符,判别它是否为大写字母,如果是大写字母,则转换为小写字母输出,否则原样输出。main()char ch;scanf(%c”,20,说明,条件运算符一定程度上可替代ifelse语句当条件复杂时,最好不用这种结构,不便于理解程序,21,练

7、 习,1.表示x在1,8之内为真时的表达式_2.int a=2,b=2,c=3,表达式a|a-b,22,4.下列程序段的功能是判断三角形是等边,等腰还是一般三角形,或者不能构成三角形,将程序填充完整.main()int a,b,c;scanf(“%d%d%d”,23,四、switch语句,当分支数较多时,用switch语句1 switch语句的一般形式switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n+1;,24,2、有关switch语句的说明,(1)switch后的表达式可以是任何类型(2)当表达式的值

8、与某一case后的常量表达式的值相同时,则执行其后的语句,如果与所有的case后的值都不同,则执行default后的语句(3)各个case的值互不相同;多个case可以对应一个语句(4)执行某个case后,接着执行下一个case而不再进行判断,所以要加break跳出switch,25,五、程序举例,例1,按照考试成绩等级打印出百分制分数段,可以用switch语句来实现switch(grade)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“60n”);default:pri

9、ntf(“errorn”);当等级为A时,打印完85100,则顺次打印所有的,所以要在每个case后的语句中加break。,break;,break;,break;,break;,break;,26,五、程序举例,例2,多个case共用一个语句switch(grade)case A:case B:case C:printf(“60n”);break;case D:printf(“60n”);break;default:printf(“errorn”);,27,例3,写一程序,判断某一年是否闰年 main()int year,leap;if(year%4=0,28,例4,求ax2+bx+c=0方

10、程的解 main()float a,b,c,d,p,q,x1,x2;scanf(%f%f%f,29,else if(d1e-6)x1=p+sqrt(d)/(2*a);x2=p-sqrt(d)/(2*a);printf(has two distinct real roots:%8.2f,%8.2fn,x1,x2);elseq=sqrt(-d)/(2*a);printf(has complex roots:n);printf(%8.2f+%8.2fin,p,q);printf(%8.2f-%8.2fin,p,q);,30,例5,运输公司对用户计算运费,路程S越远,每公里运费越低,标准如下:s250

11、Km 没有折扣250=s500 2%折扣500=s1000 5%折扣1000=s2000 8%折扣2000=s3000 10%折扣3000s 15%折扣运费f=p*w*s*(1-d)p:基本运费,w:货物重量,d:折扣,s为250的整数倍s/250的取值范围为112,31,main()float f,p,w,d;int s,c;scanf(“%f%f%d”,32,case 4:case 5:case 6:case 7:d=0.08;break;case 8:case 9:case 10:case 11:d=0.1;break;case 12:d=0.15;break;f=p*w*s*(1-d)

12、;printf(“s=%d,d=%f,f=%f”,s,d,f);,33,练习,1.下列程序段执行后,a的值是多少?int x=5,y=5,z=10,a;switch(x=y)case 1:if(yz)a=1;else a=2;case 2:switch(z)case 10:a+=10;break;case 11:a+=20;case 0:a*=10;,34,2.编写一程序,根据输入的年份和月份,计算该月有多少天?3.输入一个日期,计算该日期是今年(2009)的第几天?4.输入某一年的1月1日是星期几,然后再输入一个日期,计算这一天是星期几?(学完第六章以后,会有更好的解决方案),35,5.接受

13、一个字符,例如用“+”表示加法,用“”表示减法。接受num1 和num2 两个数。如果输入的字符为“+”,则将这两个数相加并显示相应的结果。如果输入的字符为“”,则将这两个数相减并显示相应的值。要求完成+,-,*,/四种运算。6.编写一个程序,从用户输入的三个数中找到最大值,并将该最大值输出。,36,2代码:#include#includevoid main()int year,month,days;scanf(%d%d,37,case 2:if(year%4=0,38,3代码:void main()int year,month,day,days;scanf(%d%d%d,39,case 8:

14、days=31+28+31+30+31+30+31+day;break;case 9:days=31+28+31+30+31+30+31+31+day;break;case 10:days=31+28+31+30+31+30+31+31+30+day;break;case 11:days=31+28+31+30+31+30+31+31+30+31+day;break;case 12:days=31+28+31+30+31+30+31+31+30+31+30+day;break;default:printf(input is error!n);exit(0);if(year%4=0,40,4代码

15、:#include#includevoid main()int year,month,day,week,week1,days;scanf(%d%d%d%d,41,case 8:days=31+28+31+30+31+30+31+day;break;case 9:days=31+28+31+30+31+30+31+31+day;break;case 10:days=31+28+31+30+31+30+31+31+30+day;break;case 11:days=31+28+31+30+31+30+31+31+30+31+day;break;case 12:days=31+28+31+30+31

16、+30+31+31+30+31+30+day;break;default:printf(input is error!n);exit(0);if(year%4=0,42,5代码:#includemain()int a,b;char op;printf(input operator:n);scanf(%c,43,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(operator error!n);,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号