260 likes | 378 Views
C 语言程序设计. 目 录. 3. 3. 关系运算与关系表达式. 1. 4. 逻辑运算与逻辑表达式. 条件运算符和条件表达式. 2. 3. 归纳与提高. 关系运算与关系表达式. 问题 通过前一章的学习,我们对于一般的计算问题可以用 C 程序解决了,但这里有个问题不能用前一章的语句解决。 问题描述 一堆苹果需要分等级,其原则为:单个苹果超过 100 克的为特级,单个苹果在 80--99 克的为一级,其余为普通级。. 关系运算与关系表达式. 判断特级苹果的问题是:对单个苹果的重量进行判断,不是计算, 其结果为:达到特级标准
E N D
目 录 3 3 关系运算与关系表达式 1 4 逻辑运算与逻辑表达式 条件运算符和条件表达式 2 3 归纳与提高
关系运算与关系表达式 • 问题 通过前一章的学习,我们对于一般的计算问题可以用C程序解决了,但这里有个问题不能用前一章的语句解决。 • 问题描述 一堆苹果需要分等级,其原则为:单个苹果超过100克的为特级,单个苹果在80--99克的为一级,其余为普通级。
关系运算与关系表达式 • 判断特级苹果的问题是:对单个苹果的重量进行判断,不是计算, 其结果为:达到特级标准 未达到特级标准 解决此类问题,引入关系运算
关系运算与关系表达式 在实际问题中,经常会对两个对象进行比较,比如说小张比小王高,人的体温如果高于39度就是高热等。为了描述两个对象的关系,C语言提供了关系运算符。关系运算符与参加关系运算的数据构成了关系表达式。例如:小张身高用变量zsl表示,小王身高用变量wsl表示,小张比小王高则可用表达式:zsl>wsl 表示。 C语言关系表达式的格式如下: 运算对象 关系运算符 运算对象
练习 计算以下表达式的值。设int a=1,b=2,c=3; (a<0 ) b<=0 (a+b!=c) a<=0 c (a+b)+c-1 b-c • 1/2 *(a+b+c) • b%2 • c>b • b>a • (x=a) • (y=b) • 1+a==b f t f f t f t t f t t t t t
逻辑运算与逻辑表达式 • 判断特级苹果的问题用关系表达式能表示,但判断一级苹果的问题呢? • 99>=x>80? 当x为98,则99>x为T,值为1 • 1>80为F,值为0 • 判断结果:此苹果非一级苹果 • 结果明显出错,分析原因99>=x>80表达式错
逻辑运算与逻辑表达式 • 如果需要表示变量x的取值范围为:10—100,你一定会写成:10<x<100,这是错误的,因为,计算机对关系表达式10<x<100的执行顺序为:先判断10<x,如果x=5,则10<x的运算结果为:0(关系不成立); • 如果x=15,则10<x的运算结果为:1(关系成立);再将10<x的运算结果与100比较,即:可以认为:10<x的结果存入中间虚拟变量vx中,执行vx<100的运算,从上述分析可见, • vx的取值有2种可能即:0或1,0<100的运算结果为:1(关系成立);1<100的运算结果为:1(关系成立);也就是说,无论x的取值是否大于10,表达式10<x<100的运算结果为:1。选用何种表达式解决上述问题呢?
逻辑运算与逻辑表达式 • 10<x&& x <100表示变量x的取值范围为:10—100。该表达式中引入了逻辑运算符“与(&&)”运算。 • 99>=x>80应写成: 80<x&& x <=99
逻辑运算与逻辑表达式 1、逻辑与(&&) 逻辑与的运算意义
逻辑运算与逻辑表达式 图中:A——表示开关A合上;B——表示开关B合上;A&&B——表示灯亮; • A B A&&B1 1 11 0 00 1 00 0 0 其中:1表示真,0表示假。
逻辑运算与逻辑表达式 2、逻辑或(||) • 逻辑或的运算意义
逻辑运算与逻辑表达式 图中:A——表示开关A合上;B——表示开关B合上;A||B——表示灯亮; • A B A||B1 1 11 0 10 1 10 0 0 其中:1表示真,0表示假。
逻辑运算与逻辑表达式 3、逻辑非(!) 两队比赛足球,变量A表示A队到场,!A表示A队不到场,变量B表示B队到场,!B表示B队不到场。这场球赛能够正常举行的条件是:两队都到场。假定“能赛成”用逻辑变量C表示,则 C = A&&B 赛不成,则用!C表示,让D = !C,D表示赛不成,则 D=!A||!B。 理解为A不到场或B不到场,球赛无法进行。
逻辑运算与逻辑表达式 • 由逻辑运算符连接而成的表达式即为逻辑表达式。逻辑表达式的结果为:0或1。应注意逻辑运算符&&、||的短路效应,即:对于||逻辑或运算,形如a||b,如果a成立的话,就不会再判断b是否成立,逻辑或的运算含义表明两者有一个成立,表达式就成立。如果a不成立才会去执行b; • 对于&&逻辑与运算,形如a&&b,如果a不成立,就不会再执行b,逻辑与的运算含义表明a不成立,表达式就不成立。如果a成立才会判断b的。
逻辑运算与逻辑表达式 例如: int x=-1,y=-1,z=-1,w; w=++x&&++y||++z; printf(“%d, %d, %d\n”,x,y,z); 运行后结果为“0, -1, 0”,即变量y的值没有发生变化。
练习 计算以下表达式的值。设int a=1,b=2,c=3; (1) !(a<0 || b<=0) && !(a+b!=c) (2) !a<=0 || c && !(a+b)+c-1 (3) b-c && 1/2 *(a+b+c) (4) b%2 && c>b && b>a (5) !(x=a) && (y=b) && 1+a==b 1 1 1 0 0
练习 • 将一个文字命题写成关系、逻辑表达式是编写程序的首要问题,例如:判断字符变量ch的值是否为英文的大写字母’A’~’Z’中的某一个,应该写成: • (‘A’<=ch)&&(ch<=’Z’)
练习 • A说B说谎,B说C说谎问题用逻辑表达式表示则为: • 用逻辑表达式表示:A说的是真话,A=1,A说谎,A=0; • A说B说谎,表示:aspeake=!B • B说C说谎,表示:bspeake=!C • C说A和B都说谎,表示:cspeake=!A&&!B • 分析:假设A说的是真话,则!B为1,!C为0,C为1,而 !A为0(因为A为1,所以!A为0)!A&&!B为0,则!A&&!B与C的值不相同,得出假设错误; • 假设A说的是谎话,!B为0,B为1,!C为1,C为0,!A&&!B为0,则!A&&!B与C的值相同,得出假设成立。
条件运算符和条件表达式 如果是一个简单的分段函数,如: 当x>10,y的值为600; 当x<=10,y的值为900; 解决同类问题,则不需要使用新的语句,可以通过新的运算完成,即:条件运算。 条件运算符:? : 条件表达式的一般形式:表达式1?表达式2:表达式3 如: y= (x>10)?600:900;
条件运算符和条件表达式 苹果问题 y= (x>=100)?0: (( x>=80)&& ( x<=99))? 1:2;
条件运算符和条件表达式 • 一般而言,表达式1为条件表达式,当其成立时,将表达式2的值作为整个表达式的值,不再计算表达式3的值;否则取表达式3的值作为整个表达式的结果,而不计算表达式2的值。 • 条件运算符的优先级比关系运算符、算术运算符、逻辑运算符都低,但它优先于赋值运算符。 • 如果有以下条件表达式:a>b?a:c>d?c:d,则相当于执行a>b?a:(c>d?c:d)
归纳与提高 知识点: 关系运算用于比较 逻辑运算用于多个比较的组合 条件运算判断后进行相应处理