1、2022-8-922022-8-935.1 关系运算符和关系表达式关系运算符和关系表达式l关系运算是逻辑运算中比较简单的一种。关系运算是逻辑运算中比较简单的一种。所谓所谓“关系运算关系运算”实际上是实际上是“比较运算比较运算”。将两个值进行比较,判断其比较的结果是将两个值进行比较,判断其比较的结果是否符合给定的条件。否符合给定的条件。2022-8-945.1.1 关系运算符及其优先次序关系运算符及其优先次序C语言提供语言提供6种关系运算符:种关系运算符:(小于小于)=(小于或等于小于或等于)(大于大于)=(大于或等于大于或等于)=(等于等于)!=(不等于不等于)关于优先次序:关于优先次序:(1
2、)前前4种关系运算符种关系运算符(,=,=)的优先级别相同,的优先级别相同,后两种也相同。前后两种也相同。前4种高于后种高于后2种。例如,种。例如,“”优先于优先于“=”。而。而“”与与“”优先级相同。优先级相同。(2)关系运算符的优先级低于算术运算符。关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。关系运算符的优先级高于赋值运算符。优先级优先级相同相同(高高)优先级优先级相同相同(低低)2022-8-95举例说明举例说明例如:例如:cab等效于等效于 c(ab)ab=c 等效于等效于(ab)=c a=bc 等效于等效于a=(bc)a=bc 等效于等效于a=(bc)2
3、022-8-965.1.2 关系表达式关系表达式 用关系运算符将两个表达式用关系运算符将两个表达式(可以是算术表达式或关可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式系表达式、逻辑表达式、赋值表达式、字符表达式)连接连接起来的式子,称关系表达式。起来的式子,称关系表达式。下面都是合法的关系表达式:下面都是合法的关系表达式:ab,abbc,(a=3)(b=5),ab,(ab)(bc)关系表达式的值是一个逻辑值,即关系表达式的值是一个逻辑值,即“真真”或或“假假”。在在C系统中,以系统中,以“1”代表代表“真真”,以,以“0”代表代表“假假”。2022-8-975.2 逻辑运算符
4、和逻辑表达式逻辑运算符和逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。来的式子就是逻辑表达式。5.2.1 逻辑运算符及其优先次序逻辑运算符及其优先次序C语言提供三种逻辑运算符:语言提供三种逻辑运算符:(1)&逻辑与逻辑与(相当于其他语言中的相当于其他语言中的AND)(2)|逻辑或逻辑或(相当于其他语言中的相当于其他语言中的OR)(3)!逻辑非逻辑非(相当于其他语言中的相当于其他语言中的NOT)“&”和和“|”是是“双目双目(元元)运算符运算符”,它要求有两,它要求有两个运算量个运算量(操作数操作数),如,如(ab)&(xy),(
5、ab)|(xy)。“!”是是“一目一目(元元)运算符运算符”,只要求,只要求有一个运算量,如有一个运算量,如(ab)。2022-8-98举例说明举例说明逻辑运算举例如下:逻辑运算举例如下:a&b若若a、b为真,则为真,则a&b为真。为真。a|b 若若a、b之一为真,则之一为真,则a|b为真。为真。!a 若若a为真,则为真,则!a为假。为假。2022-8-99逻辑运算符的优先次序逻辑运算符的优先次序在一个逻辑表达式中如果包含多个逻辑运算符如:在一个逻辑表达式中如果包含多个逻辑运算符如:!a&b|xy&c按以下的优先次序:按以下的优先次序:(1)!(非非)&(与与)|(或或),即即“!”为三者中最
6、高的。为三者中最高的。(2)逻辑运算符中的逻辑运算符中的“&”和和“|”低于关系运算符,低于关系运算符,“!”高于算术运算符。高于算术运算符。2022-8-910l逻辑表达式的值应该是一个逻辑量逻辑表达式的值应该是一个逻辑量“真真”或或“假假”。同关系表达式的结果,在表示逻辑运。同关系表达式的结果,在表示逻辑运算结果值时,算结果值时,c系统以数值系统以数值1代表代表“真真”,以,以0代代表表“假假”。l但在判断一个量是否为但在判断一个量是否为“真真”时,以时,以0代表代表“假假”,以非,以非0代表代表“真真”。即将一个非零的数。即将一个非零的数值认作为值认作为“真真”。因此,任何一个表达式都可
7、因此,任何一个表达式都可以参与逻辑运算。以参与逻辑运算。l在逻辑表达式的求解中,并不是所有的逻辑运在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行算符都被执行,只是在必须执行下一个逻辑运,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。算符才能求出表达式的解时,才执行该运算符。2022-8-911容易混淆的关系运算符和赋值运算符容易混淆的关系运算符和赋值运算符l关系运算符和赋值运算符用错不会关系运算符和赋值运算符用错不会发生通常的语法错误,但是可能会因为运发生通常的语法错误,但是可能会因为运行时的逻辑错误而导致不正确的结果。行时的逻辑错误而导致不正确的结果。l比如比如i
8、f(payCode=4)printf(“You get a bonus!”);不小心写成不小心写成 if(payCode=4)printf(“You get a bonus!”);2022-8-912C语言的选择结构语言的选择结构lC语言提供的选择结构:语言提供的选择结构:if单分支选择、单分支选择、if-else双分支选择、双分支选择、switch多分支选择。多分支选择。l语句格式、含义、流程图语句格式、含义、流程图2022-8-913if语句(条件选择语句)lif语句的三种形式:if(expression)statementexprstatement非0=0例:if(xy)printf(“
9、%d”,x);exprstatement1statement2非0=0l形式二:u格式:if(expression)statement1 else statement2u执行过程:例:if(xy)max=x;else max=y;5.3 if语句语句2022-8-914if(expr1)statement1else if(expr2)statement2else if(expr3)statement3.else statementn expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0u执行过程:例:if(salary1
10、000)index=0.4;else if(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;2022-8-915如果是多个数,如何输出其中最大者?例子例子1l输入两个实数,将其中值大的输出。输入两个实数,将其中值大的输出。main()float a,b;scanf(“a=%f,b=%f”,&a,&b);printf(“the max is:”);if(ab)printf(“%fn”,a);else printf(“%fn”,b);ab?printf(“%dn”,a)
11、:printf(“%dn”,b)2022-8-916例子例子2l输入两个实数,按照数值由小到大的次序输入两个实数,按照数值由小到大的次序输出这两个数。输出这两个数。思路2:if(a b)t=a;a=b;b=t;printf(“%f,%fn”,a,b);思路1:if(a=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(grade=90)printf(“An”);else if(grade=80
12、)printf(“Bn”);else if(grade=70)printf(“Cn”);else if(grade=60)printf(“Dn”);else printf(“Fn”);2022-8-923例例5.3例例5.3有一函数有一函数:-1 x 0 编一程序编一程序,输入一个输入一个x值值,输出输出y值。可以先写出算法:值。可以先写出算法:输入输入x若若 x 0 y=1;输出输出y输入输入x若若 x 0 y=1;输出输出y2022-8-9242022-8-925有以下几个程序,请读者判断哪个是正确的?有以下几个程序,请读者判断哪个是正确的?程序程序1:main()int x,y;scan
13、f(d,&x);if(x0)y=-1;else if(x=0)y=0;else y=1;printf(x=d,y=dn,x,y);2022-8-9262022-8-9272022-8-9282022-8-9295.3.3条件运算符条件运算符 若若if语句中,在表达式为语句中,在表达式为“真真”和和“假假”时,时,且都只执行一个赋值语句给同一个变量赋值时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。例如,若有可以用简单的条件运算符来处理。例如,若有以下以下if语句:语句:if(ab)max=a;elsemax=b;可以用下面的条件运算符来处理:可以用下面的条件运算符来
14、处理:max=(ab)?a b;其中其中“(ab)?a b”是一个是一个“条件表达式条件表达式”。它。它是这样执行的:如果是这样执行的:如果(ab)条件为真,则条件表条件为真,则条件表达式取值达式取值a,否则取值否则取值b。2022-8-9302022-8-931switch(表达式表达式)case 整常数整常数表达式表达式1:语句段:语句段1;case 整常数整常数表达式表达式2:语句段:语句段2;.case 整常数整常数表达式表达式n:语句段语句段n;default:语句段语句段n1;exp语句段1语句段2语句段n语句段n1值1值2值ndefault(4)switch多分支选择结构多分支选
15、择结构2022-8-932例子:例子:要求按照考试成绩的等级(要求按照考试成绩的等级(AD),),打印出相应的百分制数段。打印出相应的百分制数段。switch(grade)case A:printf(“85100n”);break;case B:printf(“7084n”);break;case C:printf(“6069n”);break;case D:printf(“60n”);break;2022-8-934实例分析实例分析2022-8-935能否不要?能否不要?int grade,aCount,bCount,cCount,dCount,fCount;aCount=bCount=cC
16、ount=dCount=fCount=0;printf(“Enter the letter grades.n”);printf(“Enter the EOF character to end input.”);while(grade=getchar()!=EOF)switch(grade)case A:case a:aCount+;break;case B:case b:bCount+;break;case C:case c:cCount+;break;case D:case d:dCount+;break;case F:case f:fCount+;break;case n:case :br
17、eak;default:printf(Incorrect letter grade entered!n);printf(“Enter a new grade!n”);break;/*-switch完完-*/2022-8-936例子例子P110l运输公司对用户计算运费,标准如下运输公司对用户计算运费,标准如下(s里程里程):s250km,没有折扣没有折扣250=s500,2折扣折扣500=s1000,5折扣折扣1000=s2000,8折扣折扣2000=s3000,10折扣折扣3000=3000)c=12;else c=s/250;switch(c)case 0:d=0;break;case 1:d=2;break;case 2:case 3:d=5;break;case 4:case 5:case 6:case 7:d=8;break;case 8:case 9:case 10:case 11:d=10;break;case 12:d=15;break;2022-8-938