说明:程序运行时,首先输入三角形的三条边,分别保存在三个整型变量a、b、c中,然后根据三角形的构成条件,判断任意两边之和是否大于第三边。若不满足此条件,则这三条边就不能构成一个三角形,若满足此条件就可以构成三角形,则根据相应的公式计算出三角形的面积。
编写程序,输入x的值,按以下分段函数计算并输出y的值。下需要 x≠0
才能得到
道那些 0x=0
#include<stdio. h>
{
int main()
int x; float y;
printf(“输入x的值:”); scanf("%d",8.x); /*输入x的值/
/条件判断/
if(x!=0)
y=1.0/x;
else
y=0;
三角形 printf("%d, %f", x,y);
return;
}
运行结果1:
输入x的值:22,0.500000
运行结果2:
输入x的值:00,0.000000
说明:
程序中用到了逻辑运算符“!”,含义是“非”。
关系运算符
关系运算符用于判断两个操作数的大小关系在C语言中有6个关系运算符,如表
4.1所示。
注意:
(1)关系运算符都是双目运算符,其结合方向是左结合。
(2)关系运算符的优先级低于算术运算符,但是高于赋值运算符。(3)关系运算符中,>、<、>=、<=的优先级相同,、!=的优先级相同,前者的优先级高于后者,即“>=”的优先级高于“”
2.关系表达式 用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的一般形式为表达式1关系运算符表达式2功能:比较两个表达式的大小,返回一个逻辑值。例如:“a+b>=c-d”、“x<=3/2、“a’+11=c“-i-5jk+1都是合法的关系表达式。关系表达式中允许出现嵌套的情况,例如:“>(b>c)”、“a!=(cd)等注意:(1)注意区分运算符“=”和“”,。“=”是赋值运算符,“”是关系运算符。(2)对实数进行相等判断可能得不到正确的结果,例如“1.0/33.01.0”的结为0(3)关系表达式中可以出现赋值运算符,如“a>(b=0),但是不能写成“a>b=0”的式。因为关系运算符的优先级高于赋值运算符,表达式“a>b=0”相当于“(a>b)=0”,赋运算符左边不是变量,会出现编译错误。关系表达式主要用于分支结构中的条件判断。关系表达式的结果是一个逻辑值“真“假”,由于C语言中没有逻辑类型的数据,因此用“1”表示“真”,“0”表示“假”。例如关达式“(a=3)>(b=8)”的值为0
关系运算示例。
**# include<stdio.h>
int main()
{ char c=‘m’;
inti=10,j=20,k=30;
float=13e+5,y=10.85;
printr(d,%d",a+5<c,-2=>=k+1);
printf("%d%d1<j<5,x-5.25<=x+y);
printf("%d,%d\n,i++k-2j,kji+5);
return 0;
}
运行结果:1,0,1,1,0,0
逻辑运算符和逻辑表达式
1.逻辑运算符关系表达式只能描述单一的条件。对于较复杂的复合条件,例如“x小于10且大于4”,如果用关系表达式“4<x<10”来描述,则当x=2时,由于关系运算符是左结合的,因此先计算“4<x”,其值为0;然后再计算“0<10”,其值为1;即说明当x=2时满足关系“4<x<10”,很显然是错误的。此时需要用到逻辑运算符将若干个关系表达式连接起来才能正确描述上述关系。逻辑运算符如表4.2所示:
注意:与运算符&.&.和或运算符都是双目运算符,非运算符!为单目运算符。2.逻辑表达式用逻辑运算符将两个表达式连接起来的式子称为逻辑表达式。逻辑表达式的一般形式为:表达式1逻辑运算符表达式2或 逻辑运算符表达式1逻辑表达式的结果也是一个逻辑值“真”“假”,即为“1”或“0”。逻辑运算的直值表
(1)参与逻辑运算的数据可以是1和0,也可以是非零值和0,还可以是任何类型的数据,但最终都是以非0和0判断他们是“真”或“假”。
(2)在逻辑表达式中也可以使用赋值运算符,如“a…(b=0),但是不能写成“a&b=0”的形式。因为逻辑运算符的优先级高于赋值运算符,表达式“a&.&b=0”相当于“(a&&b)=0”,赋值运算符左边不是变量,会出现编译错误。
(3)C语言规定,只对决定整个表达式值所需的最少数目的子表达式进行运算。即在由若干个子表达式组成的逻辑表达式中,从左向右计算,当计算出一个子表达式的值就确定了整个逻辑表达式的值时,此后就不再计算右边剩下的子表达式的值,这种情况称为“短路”
①对于逻辑与(&.&)运算,若“&&”左边的表达式的值为假,则可以得出整个表达式的值为假,那么“&&”右边的表达式将不再进行计算;只有当“&&”左边的表达式值为真时才计算右边表达式的值。
②对于逻辑或(11)运算,若“1”左边的表达式的值为真,则可以得出整个表达式的值为表达式的值。 真,那么“1”右边的表达式将不再进行计算;只有当“”左边的表达式值为假时才计算右边
若有定义“inta=3,b=4,c=5;",执行表达式“(a>b)&&(b+=c)l(c+=b)”后a、b和c的值分别是多少?
分析:根据运算符的优先级,表达式(a>b)&&.(b+=c)|(c+=b)相当于((a>b)&&(b+=c))|(c+=b),因此先计算表达式>b,结果为假,则子表达式(a>b)&&(b+=c)的结果为假,此时表达式“b+=c”不再计算,此b的值不发生变化,由于或运算符左边表达式的值为假,因此还需计算表达式“c+=b”的值,值为9,非零即为真,因此表达式“(a>b)&&(b+=c)(c+=b)的值为1,最后a=3,b=4,c=9
逻辑运算示例。 #include<stdio. h> int main()
{int a=3,b=3,c=2,d;
printf("%d,",!a8.8.! b8.8.c);
*语句1/
printf(%d,",!all!bllc);
语句2*/
printf("%d\n",>=b8.8.b>c);d=c–(b=6).8a++; /*语句3/
语句4/
printf(“a=%d,=%d, c=%d,d=%d\n”,a, b,c,d)
return;
}
运行结果
0,1,1
a=3,b=3,c=1,d=1
分析:
(1)语句1中,逻辑表达式“!a&&!b&&c中包含逻辑运算符“!”和“&&”,由于!优先级高“因此先计算“!a”,值为0,则由于逻辑运算符的短路现象,后面的表达式不再计算,即可得出表达式!a&.&!b&&c”的值为0
(2)语句2中,由于“!”的优先级高于“1”,先计算“!a”,为0,则还要继续计算“1b”,值
(3)语句3中,关系运算符的优先级高于逻辑运算符,因此先计算“a>=b”,值为1,再计
算“b>c”,值为1,最后计算1&&1,值为1,因此表达式“n=b&b>c值为1 (4)语句4中,逻运算符“&&“的优先级高于“1”,因此句4相=c日((b-6)&&a++)“,在计算表达式“c–1(b=6)8.8a++)时,先计算“c,值为 2,再将“c-”的结果与表达式“(b=6)8.8n+”进行逻辑或运算,由于“11”左边的表达算,另外表达式“c–“计算完后c自减1,即e=1.因此语句4执行完后,a=3,b=3,c 式的值为直,则可以得出整个表达式的值为直,即d=同时“11”边的表达式不再进行计
1,d=1. 算术运算符、关系运算符及逻辑运算符的优先级从高到低的顺序如表4.4所示。全部运算符的优先级和结合性见附录B 表4.4各种运算符的优先级从高到低的顺序 赋值运算符.和算术运算符关系运算符 右结合运算符 左结合右结合 低结合性高优先级2ch>-8.8.cl逻辑表达式举例:①ch是英文字母逻辑表达式为(ch>=‘a’&&ch<=) ②a,b不同时为0.逻辑表达式为!(a0&&b0)或a!=lb!=0或allb③ch是空格或回车。逻辑表达式为(ch==(chn) ④year是闰年,即year能被4整除但不能被10整除,或year能被400整除。逻辑表达式为(year%40&&year%100=0||(ycr%400==0)
条件运算符和条件表达式条件运算符山“?”和“:”两个符号组成,用于条件求值,它是一个三目运算符,需要三个 1.条件运算符操作数。条件运算符的优先级低于逻辑运算符、高于赋值运算符,它是右结合的。2.条件表达式 由条件运算符将3个表达式连接起来的式子称为条件表达式,其一般形式为:表达式1?表达式2:表达式3条件表达式的执行顺序是:先计算表达式1的值,若值为非0,表示条件为真,则将表达式2的值作为整个条件表达式的值,否则,将表达式3的值作为整个条件表达式的值。如4>35:7的值为5若已有声明“intx=4,y=3;",则表达式x<y?x++:y++的值是3分析:对于条件表达式“x<y?x++y++,先计算表达式“x<y”的值,结果为0,则将表达式“y++”的值,也就是3,作为条件表达式“x<y?x++y++”的值,而变量y的值为4(1)条件表达式中表达式1的类型可以与表达式2和表达式3不同,表达式2和表达式 关于条件表达式的说明3的类型也可以不同,此时系统会自动进行转换,果为表达式2和表达式3中级别类型较高的。