第4章关系选择结构.ppt

上传人:sccc 文档编号:5638527 上传时间:2023-08-05 格式:PPT 页数:33 大小:466.01KB
返回 下载 相关 举报
第4章关系选择结构.ppt_第1页
第1页 / 共33页
第4章关系选择结构.ppt_第2页
第2页 / 共33页
第4章关系选择结构.ppt_第3页
第3页 / 共33页
第4章关系选择结构.ppt_第4页
第4页 / 共33页
第4章关系选择结构.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《第4章关系选择结构.ppt》由会员分享,可在线阅读,更多相关《第4章关系选择结构.ppt(33页珍藏版)》请在三一办公上搜索。

1、第4章 选择程序设计结构,控制语句的概念:能够影响其他语句的执行方式的语句。控制语句分类:选择和循环选择结构实现的语句:if(p)、if(p)/else、switch/case(p是逻辑表达式),用流程图表示三种选择结构:,表达式,真,假,语句 A,单路选择,表达式,语句 A,语句 B,真,假,双路选择,选择结构的流程图表示法,选择结构的流程图表示法,表达式,.,=c1,=c2,=c3,=c4,=cn,语句 A,语句 B,语句 C,语句 D,语句 N,多路选择,4.1 关系运算符和关系表达式,1.关系运算符及其优先顺序,C 有 6 种关系运算符:(用来比较两端数据的大小)。,=,优先级相同(高

2、),=!=,优先级相同(低),!(非)高算术运算符关系运算符&和 赋值运算符低,结合性:从左到右。,2.关系表达式,关系表达式是用关系运算符将两个或两个以上算术、关系、逻辑、赋值或字符表达式连接起来的式子。,关系表达式的值是一个逻辑值,“真”(1)或“假”(0)。故可将关系表达式看成一种整型表达式。,例如:,ca+b 等效于:c(a+b),ab!=c(ab)!=c,a=bc a=(bc),a=bc a=(bc),1.逻辑运算符 连接多个条件的判断&、|、!,4.2 逻辑运算符和逻辑表达式,例:表达条件:0=0&x=0&x=0)|!(x=10)x 0|x 10,2.逻辑运算符优先顺序,“&”和“

3、”为双目运算符,“!”为单目运算符。,a&b 若a,b均为真,则a&b为真,否则为假。,a b 若a,b均为真,或之一为真,则ab为真,否则为假,!a 若a为真,则!a 为假,否则为真。,优先顺序:可用()更改优先级,(ab)&(xy)ab&xy,(a=b)(x=y)a=b x=y,(!a)(ab)!a ab,(m=ab)&(n=cd)(m=(ab)&(n=(cd),!(非)高算术运算符关系运算符&和 赋值运算符低,若a=5,b=4,c=3f=abc,(f=a)bc中,f=?表达式的值呢?,2.逻辑表达式,逻辑表达式是用逻辑运算符将关系表达式或逻辑量连接起来的式子。逻辑表达式的值是一个逻辑量“

4、真”(1)或“假”(0)。注意:1)C语言中对逻辑量做了扩充:凡是非零值都看做“真”,只有为零时才是“假”。2)两边的类型不一定相同,如:2&a b。,3.逻辑表达式求解,a&b&c若 a 为假,则表达式值为假。,a b c若 a 为真,则表达式值为真。,53&283&2)为真,则表达式值为真。,&和 的优先级相同。,复习:1.,关系表达式,关系表达式是用关系运算符(、=、=、!=)将两个或两个以上算术、关系、逻辑、赋值或字符表达式连接起来的式子。值是一个逻辑值,“真”(1)或“假”(0)。故可将关系表达式看成一种整型表达式。,2.逻辑表达式,逻辑表达式是用逻辑运算符(&、|和!)将关系表达式

5、或逻辑量连接起来的式子。逻辑表达式的值是一个逻辑量“真”(1)或“假”(0)。,!(非)高算术运算符关系运算符&和 赋值运算符低,结合性:从左到右。,3、注意问题:,简化求值,1)有时与数学上表达有所区别。,2)日常用语和数学逻辑表达有时是相悖的。,如表达:,x不等于2或3 if(x!=2|x!=3)if(x!=2&x!=3)或 if(!(x=2|x=3),3)对“P1&P2&P3”,若p1为假,则不再计算 p2和p3表达式。4)对“P1|P2|P3”,若p1为真,则不再计算p2和p3 表达式。,例如:若 x=1;y=2;z=3;m=4;n=8;则表达式(k=xy)&(n=zm)的值是什么?n

6、的值呢?,注:简化求值的利用:第一个条件能控制第二个条件的执行。即第二个条件只有在第一个条件满足时才有意义。例如,条件:x的值非零;且x能整除y:If(x!=0)&(y%x=0),4.3 i f 语句,1.i f 语句的一般形式,i f(表达式P)语句;,i f(表达式P)语句1;else 语句2;,其中:,“语句”、“语句1”和“语句2”可以是简单语句,也可以是用 括起来的复合语句,也可以是 或 形式的 i f 语句。,“语句1”后面的“;”是必须的。,形式或看作一条完整的语句。,例4.1 输入三个实数,按小到大顺序输出。,int main()float a,b,c,t;scanf(“%f,

7、%f,%f”,若ab,则通过中间变量 t 交换变量a,b的值,2.p通常为关系表达式或逻辑表达式,甚至是一个不含 关系运算符的表达式、或一个常量或一个变量。,if(x)if(x!=0),if(!x)if(x=0),if(x=n)=y)与if(x=n=y)不同,3.i f 语句的嵌套,在 i f 语句中又包含一个或多个 i f 语句称为 i f 语句的嵌套。,i f()i f()语句1;else 语句2;else i f()语句3;else 语句4;,注:从最内层开始,else总是与它前面最近的未曾 配对的if 配对,除非用花括号改变其配对关系。,if(grade=90)printf(“An”)

8、;else if(grade=80)printf(“Bn”);else if(grade=70)printf(“Cn”);else if(grade=60)printf(“Dn”);else printf(“Fn”);,可以写成:if(grade=90)printf(“An”);else if(grade=80)printf(“Bn”);else if(grade=70)printf(“Cn”);else if(grade=60)printf(“Dn”);else printf(“Fn”);,if 中有if语句。包括了三种形式:(a)if(p1)if(p2)Aelse B(b)if(p1)if

9、(p2)A elseB(c)if(p1)if(p2)Aelse B else C,规则:else总是与离它最近的可用的if 配对。修改(b)if(p1)if(p2)A elseB,例4.2 编程求 y=,main()int x,y;scanf(“%d”,-1(x 0),的值。,x 的值从键盘输入。,参见P100,4.条件运算符,若有如下 i f 语句:i f(ab)max=a;else max=b;,则可以用下面的条件运算符处理:max=(ab)?a:b;,同样,对如下 i f 语句:i f(ab)printf(“%d”,a);else printf(“%d”,b);,也可用下面的语句代替:p

10、rintf(“%d”,ab?a:b);,条件运算符“?:”是一个三目运算符,必须有三个操 作对象。,条件运算符的优先级高于赋值运算符,低于关系运算 符和算术运算符。,如:,ab?a:b+1,/相当于ab?a:(b+1)/,条件运算符的结合方向为“自右至左”。,ab?a:cd?c:d,/*相当于ab?a:(cd?c:d)*/,如:max=(ab)?a:b;,仅在 i f 语句内嵌的语句为赋值语句时,才能用条件 表达式取代该 i f 语句。,条件表达式中的操作对象可以是不同的类型。,如:,x?a:b 当x=0时,条件表达式的值为b,xy?1:1.5 当 xy 时,条件表达式的值为 1.5,否则为

11、1。,如:,例,1.找出两个数中最大的数2.找出三个数中最大的数3.任意输入三条边(a,b,c)后,若能构成三角形,判断是等腰、直角,还是一般三角形。,例4.3 求一元二次方程的解。,#include“math.h”int main()float a,b,c,d,x1,x2,p,q;scanf(“%f,%f,%f”,4.4 switch语句,1.语法:switch(表达式P)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句m;break;,其中:,“表达式P”可以是任何类型的表达式(一般为整

12、型、字符型、枚举型)。,“常量表达式”(一般为整型常量表达式如:整数、字符常量、枚举常量或整数常量表达式)的值必须互不相同。,各个 case 出现的先后顺序对执行结果没有影响。,执行完一个case后面的语句后,通过break语句结束该控制结构,若所有的“常量表达式”的值都不与“表达式”的值相匹配,就 执行 default 后面的语句。,多个case可以共用一组执行语句。,case后面若有多个语句,可以不用 括起。,2.说明:,各个分支中的“break;”可省略,若省略则执行方式不同,一般情况需保留。可以没有default:语句m;break;分支。此时当p的值与各个case的判断值都不一致时,

13、程序不执行任何部分。但最好保留default分支,即使不需要default处理,也可以写作“default:break;”以便好读,避免误会。由于p1,p2,.pn只能是整型或类似整型的常量表示符,这限制了它的使用。此时可用if else 语句。,改写例子g=grade/10;switch(g)/*g的计算是关键*/case 10:case 9:printf(“n A n”);break;case 8:printf(“n B n”);break;case 7:printf(“n C n”);break;case 6:printf(“n D n”);break;case 5:case 4:cas

14、e 3:case 2:case 1:case 0:printf(“n F n”);break;default:break;例子:P106110,可以改为什么?,default:printf(“Fn”);break;,例4.4某商店按如下折扣优惠购货的顾客:,D=,折扣05%7.5%10%15%,购货金额(m 250)(250 m 500)(500 m 1000)(1000 m 2000)(m 2000),C=int(m)/250012,34,5,6,7 8,试编程,输入购货金额 m,求顾客应付金额 s。,main()int c;float d,m,s;scanf(“%f”,case 2:,ca

15、se 3:d=0.075;break;case 4:case 5:case 6:case 7:d=0.1;break;case 8:d=0.15;break;default:break;s=m(1 d);printf(“Amount=%8.2f”,s);,D=,C=int(m)/250012,34,5,6,7 8,main()int c;float d,m,s;printf(“n Enter m=“);scanf(“%f”,case 2:,case 3:d=0.075;break;case 4:case 5:case 6:case 7:d=0.1;break;default:d=0.15;br

16、eak;s=m(1 d);printf(“Amount=%8.2f”,s);,综合举例:设计一个菜单程序来选择做+、*、/运算。1、内容和要求程序运行后,给出5个菜单项的内容和输入提示。1.-Plus 2.-Minus 3.-Multiply 4.-Divided 5.-Goodby Input 1 5输入15来选择菜单项,其他输入则不起作用。,算法S1:打印菜单界面S2:输入选择值menuS3:if(menu=1)则产生两个随机的整数:x和y并且显示“x+y=”信息,等待输入答案;并判断答案是否正确S4:if(menu=2)则产生两个随机的整数:x和y并且显示“x-y=”信息,等待输入答案;

17、并判断答案是否正确S5:if(menu=3)则产生两个随机的整数:x和y并且显示“x*y=”信息,等待输入答案;并判断答案是否正确S6:if(menu=4)则产生两个随机的整数:x和y并且显示“x/y=”信息,等待输入答案;并判断答案是否正确S7:if(menu=5)则打印“Goodbay”并退出程序。,#include#include#include#includemain()int x,y,z,r,choose;clrscr();printf(nnnnnnn);printf(ttt1.-Plusnn);printf(ttt2.-Minusnn);printf(ttt3.-Multiplenn);printf(ttt4.-Dividednn);printf(ttt5.-Goodbynn);printf(tttInput 1-5:nn);scanf(%d,case 2:x=random(99);y=random(99);printf(n%d-%d=,x,y);scanf(%d,运行:输入:5,7.5,B,结果:OK!7.500000,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号