一,关系操作符
C语言中用于比较的表达式叫做“关系表达式”,里面的操作符就被称为关系运算符,关系运算符主要有下面六个:
> 大于运算符
< 小于运算符
>= 大于等于运算符
<= 小于等于运算符
== 等于运算符
!= 不相等运算符
下面试一些运用的举例:
a>b
a<b
a>=b
a<=b
a==b
a!=b
关系表达式的返回值通常为0或1,如果关系表达式正确,那么会返回一,否则返回0。
ps:在写相等运算符时可能会不小心写成赋值操作符“==”和“=”是两个不同的操作符,不要混淆了哦。
另外还有一个错误是,关系运算符不宜连用,连用编译器不会报错,但是通常不会达到想要的效果,例如a<b<c:
int main()
{
int a = 4;
int b = 3;
int c = 2;
if (a < b < c)
printf("haha");
return 0;
}
初学者可能认为没有结果,但是结果会打印haha,这是为什么呢?
因为连用时的运算法则是从左到右,也就是:(a<b)<c
先计算a<b是否正确,结果是不正确的,返回0,再计算返回值<c是否正确,因为返回值为0,所以结果正确,返回值为1,1为真,所以执行if语句。
那么如果想要达到我们想象的结果,应该怎么写a<b<c呢?可以用后面的逻辑操作符。
二,条件操作符
条件操作符也叫三目操作符,是需要接受三个操作数的,形式如下:
exp1?exp2:exp3
计算逻辑是先计算exp1,如果exp1为真,那么计算exp2,计算的结果为整个表达式的结果;如果exp1为假,那么计算exp3,计算的结果为整个表达式的结果。
练习:输入两个整数,输出两个整数中的最大值
参考代码:
int main()
{
int a = 0, b = 0;
scanf("%d %d", &a, &b);
int m = a > b ? a : b;
printf("%d", m);
return 0;
}
三,逻辑操作符:!,&&,||
!:逻辑取反运算符(改变单个表达式的真假)
&&:与运算符,就是并且的意思(&&两边都是真,则为真,否则为假)。
||:或运算符,就是或者的意思(||两边都为假,则为假,否则为真)。
ps:C语言中0为假非0为真
(1)逻辑取反运算符
例如,有一个变量flag,如果flag为假,就要做什么事情:
int main()
{
int flag = 0;
if (!flag)
printf("do something\n");
return 0;
}
如果flag为真,那么!flag就为假,如果flag为假,那么!flag就为真。而上面的flag为0,是假,所以!flag就为真,所以执行if语句后面的代码。
(2)与运算符
&&就是与运算符,也就是并且的意思,是一个双目操作符,使用方法是a&&b,&&两边都是真时,表达式才为真,如果有一边是假,那么表达式就为假。
例如:输入一个月份,判断是否为春季就可以用与运算符实现
参考代码:
int main()
{
int month = 0;
scanf("%d", &month);
if (month >= 3 && month <= 5);
printf("是春季");
return 0;
}
这里与运算符表达了要month大于3并且小于5才能执行if语句。
(3)或运算符
||就是或运算符,也就是或者的意思,也是一个双目操作符,使用方法是a||b,||两边都是假试,表达式才为假,如果有一边为真,那么表达式的结果就为真。
比如,我们要判断,一年中只有12月,1月,2月为冬天,怎么通过代码实现呢?
参考代码:
int main()
{
int month = 0;
scanf("%d", &month);
if (month == 12 || month == 1 || month == 2);
printf("是冬季");
return 0;
}
(4)练习:闰年的判断
输入一个年份year,判断是否为闰年,如果是,打印“是闰年”,如果不是,打印“不是闰年”。
闰年的判断规则:
1.能被4整除,并且不能被100整除的是闰年。
2.能被400整除的是闰年。
参考代码1:
int main()
{
int year = 0;
scanf("%d", year);
if (year % 4 == 0 && year % 100 != 0)
printf("是闰年");
else if (year % 400 == 0)
printf("是闰年");
else
printf("不是闰年");
return 0;
}
参考代码2:
int main()
{
int year = 0;
scanf("%d", year);
if ((year % 4 == 0 && year % 100 != 0)||(year%400==0))
printf("是闰年");
else
printf("不是闰年");
return 0;
}
(5)短路
练习:阅读代码,计算输出的结果:
int main()
{
int a = 0, b = 2, c = 3, d = 4, i = 0;
i = a++ && ++b && d++;
printf("%d %d %d %d %d", a, b, c, d, i);
return 0;
}