1.关系操作符
C语言用于比较的表达式,称为“关系表达式”里面使用的运算符就称(relationalexpression),为“关系运算符” (relationaloperator) ,主要有下面6个。
-
> 大于运算符
-
< 小于运算符
-
>= 大于等于运算符
-
<= 小于等于运算符
-
== 等于运算符
-
!= 不相等运算符
以下是例子:
a > b;
a < b;
a >= b;
a <= b;
a == b;
a != b;
关系表达式通常返回 0 或 1,表示真假。
C语言中,0 表示假,所有非零值表示真。比如,20 > 12 返回 1, 12 > 20 返回 0
关系表达式常用于 if 或 while 结构。例如下例子:
if (i == 3)
{
printf("i is 3.");
}
注意:相等运算符 == 与赋值运算符 = 是两个不一样的运算符,不要混淆。有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。
if (i = 3)
{....}
上面示例中,原意是 i == 3,但是不小心写成 i = 3。这个式子表示对变量 i 赋值 3,它的返回值为 3,所以 if 判断总是为真。
为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。
if (3 == x)
{...}
如果把 == 误 写成了 = ,编译器会报错的。注意。
还有一个需要避免的错误:多个关系运算符不宜连用。
例子:
i < j < k
上面示例中,连续使用两个小于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果即不是保证变量j的值在 i和 k 之间。因为关系运算符是从左到右计算,所以实际执行的是下面的表达式。
(i < j ) < k
上面式子中,i< j 返回 或 1 ,所以最终是 或 1与变量 进行比较。如果想要判断变量 j的值是否在i和 k 之间,应该使用下面的写法。
i < j && j < k
例子:输入一个年龄,如果年龄在18岁~36岁之间,输出青年
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (18 <= age <= 36)
{
printf("青年");
}
return 0;
}
当输入10的时候,也是青年,如图:
这是因为,我们先拿18和age中存放的10比较,表达式18<=10为假,18<=age 的结果是0,再拿0和36比较,0<=36为真,所以打印了 青年,所以即使当age是10的时候,也能打印 青年,逻辑上是有问题,这个代码应该怎么写呢?
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age <= 18 && age <= 36)
{
printf("青年");
}
return 0;
}
2.逻辑操作符
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符
-
( ! ) :逻辑取反运算符(改变单个表达式的真假)
-
( && ) : 与运算符,就是并且的意思 (两侧的表达式都为真,则为真,否则为假)
-
( || ) : 或运算符,就是或者的意思 (两侧至少有一个表达式为真,则为真,否则为假)
注:C语言中,非0表示真,0表示假。
2.1.逻辑取反运算符
比如,我们有一个变量叫 flag ,如果flag为假,要做一个什么事情,就可以这样写代码:
if(!flag)
{
printf("do study");
}
如果 flag 为真,!flag 就是假,如果 flag 为假, !flag 就是真所以上面的代码的意思就是 flag 为假,执行if语句中的代码。
2.2.与运算符
&& 就是与运算符,也是并且的意思, && 是一个双目操作符,使用的方式是 a&&b,&& 两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则整个表达式为假。
比如:如果我们说月份是3月到5月,是春天,那使用代码怎么体现呢?
#include <stdio.h>
int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)
{
printf("春季\n");
}
这里表达的意思就是month既要大于等于3,又要小于等于5,必须同时满足。
2.3.或运算符
|| 就是或运算符,也就是或者的意思,(||)也是一个双目操作符,使用的方式是 (a || b),两边的表达式只要有一个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
比如:我们说一年中月份是12月或者1月或者2月是冬天,那么我们怎么使用代码体现呢?
#include <stdio.h>
int month = 0;
scanf("%d", &mont);
if(month == 12 || month == 1 || month == 2)
{
printf("冬季\n");
}
使用闰年进行练习:
输入一个年份year,判断year是否是闰年。
1.能被4整除并且不能被100整除是闰年。
2.能被400整除是闰年。
#include <stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
printf("%d是闰年!", year);
}
return 0;
}