表达式
一、算数表达式
C语言中,算数运算符是:+(加)、-(减)、*(乘)、/(除)、
(以上运算符的运算对象可以是整型,也可以是实型)
%(求余)(%号左右两端被除数和除数必须是整数)
二、强制类型转换表达式
形式如下:
(类型名)(表达式)
代码:
#include<stdio.h>
int main()
{
double x;
int a = 8, b = 5;
x = (double)a/b;
printf("%f\n", x);
return 0;
}
三、赋值表达式
形式如下:
变量名=表达式
(赋值号左边必须是变量名)
例如:n = 1
在赋值运算符前加上其他运算符可以构成复合赋值运算符,其优先级与赋值运算符的优先级相同
例如: n = n + 1
赋值表达式语法:
1、= 左边只能出现一个变量,不能出现多个变量、常量、表达式★★★★
2、= 右边可以出现一个或多个变量,常量,表达式
3、赋值表达式的值等于 = 号左边第一个变量的值★★★★★
四、自加++、自减--运算符
1、++运算符的运算规则
x++(++放x后):
x自增1 表达式(x++)的值等于x自增以前的值(加加放后,自增前)
例如:x++ 且 x = 7 等价于 x = x + 1 故 x == 8 (x++)== 7
++x(++放x前):
x自增1 表达式(x++)的值等于x自增以后的值(加加放前,自增后)
例如:++x 且 x = 7 等价于 x = x + 1 故 x== 8 (++x)== 8
2、--运算符的运算规则
x--(--放x后):
x自减1 表达式(x--)的值等于x自减以前的值(减减放后,自减前)
例如:x-- 且 x = 7 等价于 x = x - 1 故 x ==6 (x--)== 7
--x(--放x前):
x自减1 表达式(x--)的值等于x自减以后的值(减减放前,自减后)
例如:--x 且 x = 7 等价于 x = x - 1 故 x == 6 (--x)== 6
五、逗号表达式
★★
“,”是C语言提供的一种特殊运算符,用逗号将表达式链接起来的式子称为逗号表达式。
形式如下:
表达式1,表达式2,表达式3 ……,表达式n
说明:
1、逗号运算符的结合性为从左到右,因此逗号表达式将从左到右进行运算。即,先计算表达式1,然后计算表达式2,依次进行,最后计算表达式n。
逗号表达式的值为最后一个表达式的值。
2、在所有运算符中,逗号表达式的优先级最低。
代码:
#include<stdio.h>
int main()
{
int x = 1, y = 5, z = 8, k;
k = (y = -x++, y++, z--);
printf("%d %d %d %d\n", x, y, z, k);
return 0;
}
六、关系表达式
注意:0关系不成立,1关系成立
C语言中提供了6种关系运算符
1、< (小于)
2、<= (小于或等于)
3、> (大于)
4、>= (大于或等于)
5、== (等于)
6、!= (不等于)
七、逻辑表达式
C语言中提供了三种逻辑运算符:
1、&& 逻辑 “与”
2、|| 逻辑 “或”
3、! 逻辑 “非”
注意:C语言中,由 && 或 || 构成的逻辑表达式,在特定的情况下会产生“短路”现象。
逻辑运算(T为真,F为假):
与 &&:(T&&T=T、T&&F=F、F&&T=F、F&&F=F)
或 ||:(T||T=T、T||F=T、F||T=T、F||F=F)
非 !:(!T=F、!F=T)
★★★
&& 的短路:
当 && 左边有表达式的值为F(0)时,则发生短路,不再计算&&右边的其它表达式。
代码:
#include<stdio.h>
int main()
{
int score;
scanf("%d", &score);
if(score<60)
{
printf("不合格\n");
}
if(score>=90)
{
printf("优秀\n");
}
if(score>=60 && score<90)
{
printf("合格\n");
}
return 0;
}
|| 的短路:
当 || 左边有表达式的值为T(非0)时,则发生短路,不再计算 || 右边的其它表达式。
代码:
#include<stdio.h>
int main()
{
int x = 0, y = 1;
if(++x || y++) // x==1 ++x==1 短路
{
x += 2;
}
printf("%d %d\n", x, y); // x==3,y==1
return 0;
}
例如:a++ && b++
若a的值为0,表达式首先去求a++的值,由于表达式a++的值为0,系统完全可以确定逻辑表达式的运算结果总是为0,因此将跳过b++不再对它进行求值。所以a的值将自增1,由0变成1而b值不变。若a的值不为0则系统不能仅根据表达式a++的值来确定逻辑表达式的运算结果,因此必然要再对运算符&&右边的表达式进行求值,这时将进行b++的运算,使b值改变。
例如:a++ || b++
若a的值为1,表达式首先去求a++的值,由于表达式a++的值为1,系统完全可以确定逻辑表达式的运算结果总是为1,因此将跳过b++不再对它进行求值。所以a的值将自增1,而b值不变。若a的值为0则系统不能仅根据表达式a++的值来确定逻辑表达式的运算结果,因此必然要再对运算符||右边的表达式b++进行求值,这时将进行b++的运算,运算结果不仅使a的值改变,也改变了b的值。
注意:60<=score<90 等价于 (60<=score)<90
优先级:
算术运算符 > 关系运算符 > 逻辑运算符 > 赋值表达式 > 逗号表达式