1.文章内容简介
在C语言中,有很多的操作符,每种操作符都有着相应的作用。其中有一种用于关系表达式中比较大小的操作符——关系操作符。这一篇文章将对关系操作符进行介绍。
2.整体介绍
为了更加直观,我们使用一个表格进行展示:
大于 | > |
小于 | < |
大于等于 | >= |
小于等于 | <= |
等于 | == |
不等于 | != |
2.1大于>和小于<
在C语言中,表示大于和小于和我们学习的数学知识是一致的。若表示a大于b,写成a>b即可;若表示a小于b,写成a<b即可。在数学中,式子成立我们说它是对的,不成立就是错的。那在C语言中,这个成立与不成立返回什么样的值呢?
下面让我们来看一个例子:
a的值是0,b的值是2,a<b是不成立的,那么在C语言中这个表达式应该返回什么值呢?
参考代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
int re = a > b;
printf("re=%d\n",re);
return 0;
}
在VS2019的集成开发环境下的运行结果:
我们可以看到返回的值是0,所以若关系表达式不成立,那么关系表达式返回的值是0。
那如果,改成a<b呢,这时候是正确的应该返回什么样的值呢?
参考代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
int re = a < b;
printf("re=%d\n", re);
return 0;
}
在VS2019的运行结果:
2.2小于等于<=和大于等于>=
上大学之前,我们学习大于等于和小于等于的符号。在数学中,大于等于的写法是≥;小于等于的写法是≤。那在C语言里面,它们的写法是怎样的呢?
看前面的标题后,应该知道了大于等于是>=,小于等于是<=。
那在这里我们在看两个代码,验证一下若关系表达式不成立,那么关系表达式返回的值是0在这里面是否成立。
2.2.1小于等于的使用举例:
参考代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
int re = (a <= b);//此处加上括号为了方便阅读代码和理解代码
printf("re=%d\n",re);
return 0;
}
在VS2019的运行结果:
解释:因为a=0,b=2,a确实是小于等于b的,所以re的值会得到1。
2.2.2大于等于的使用举例:
参考代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
int re = (a >= b);//此处加上括号为了方便阅读代码和理解代码
printf("re=%d\n", re);
return 0;
}
在VS2019的运行结果:
解释: 因为a=0,b=2,a是小于b的,所以re的值会得到0。
但是,如果多个关系操作符连在一起使用时代码容易出现bug,比如:
如果一个人输入的年龄是在18岁在36岁之间,那么我们就返回一句英文You are teenager。那下面这个参考代码是对的吗?能得到我们的预期结果吗?
参考代码:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (18 <= age <= 36)
{
printf("You are teenager\n");
}
return 0;
}
在VS2019的运行结果:
现象:我们定义的青年的年龄范围是18岁到36岁,10岁应该不在这个年龄范围内,那为什么还会出现You are teenager这一句英文呢?难道我们这个代码写错了吗?
是的,这里出现一个很明显的错误:
C语言处理代码的习惯是从左往右进行解读。我们输入10之后,18小于等于10这一句话就是错的,那么根据前面所说的那这里返回的就是0,接着往后面看,0<=36,对于这个明显是成立的,那这个关系表达式的返回结果就是1,所以最终if括号中的内容为真,那么if所控制的语句就会执行。
那如何解决这个问题呢?这里就要用到我们的逻辑操作符&&,这里可能超纲了,没关系现在你就把它当作汉语里面的并且就可以了,后面的内容我们会对这个操作符解释的。
参考代码:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18 && age <= 36)
{
printf("You are teenager\n");
}
return 0;
}
在VS2019的运行结果:
2.3等于==和不等于!=
2.3.1==的使用
在数学中,等于的表示符号是=,但是=在C语言中它是赋值的意思并不是等于的意思!那C语言中等于应该使用什么来表示呢?那就要用到两个=,也就是==。
那我们来看一个例子:
两个整型变量a与b,a的值是12,b的值是24。
参考代码:
#include <stdio.h>
int main()
{
int a = 12;
int b = 24;
int re = (a==b);
printf("re=%d\n",re);
return 0;
}
在VS2019的运行结果:
从返回结果上看,由于a与b是不相等的,所以a==b这个关系表达式的返回值是0。
初学者在学习==之前会将=误认为等于,写出下面的代码
参考代码:
#include <stdio.h>
int main()
{
int a = 10;
if (12 = a)
{
printf("yes\n");
}
return 0;
}
在VS2019的运行结果:
a的值是10,不是12,为什么结果还是打印出了yes呢?原因是12赋值给了a,a此时的值是12,所以if的括号里面的内容是12是一个非零值,即为真,所以返回的结果是yes。
其实,即便是老手,有时候写代码写快了也会出现这种问题,这也和编程习惯有一定的关系。那如何去规避这种问题呢?让我们看看下面这种情况:
参考代码:
#include <stdio.h>
int main()
{
int a = 10;
if (12 = a )
{
printf("yes\n");
}
return 0;
}
在VS2019的运行结果:
我们把数字放在左边的时候,我们马上就能看到上面有了错误的提示。此时我们就能很快的解决这个可能会在后面的程序中出现的bug。
当然上面给的那一段代码只是一个示范,实际上我们就是把数字放在==的左边,变量放在==的右边即可。
参考代码:
#include <stdio.h>
int main()
{
int a = 10;
if (12 == a)
{
printf("yes\n");
}
return 0;
}
在VS2019的运行结果:
这时候我们就能得到我们的想要结果了。
2.3.2!=的使用
在数学里,不等于的表示是用≠表示。在C语言中,不等于的表示符号是在一个=前面加上!,也就是!。如果要表示两个变量a与b不相等怎么做呢?写成a!=b即可。
那如何使用它呢?
参考代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 1;
int re = (a!=b);
printf("re=%d\n",re);
return 0;
}
在VS2019的运行结果:
参考代码:
#include <stdio.h>
int main()
{
int a = 1;
int b = 1;
int re = (a!=b);
printf("re=%d\n",re);
return 0;
}
在VS2019的运行结果:
这个结果和前面我们说的:若关系表达式不成立,那么关系表达式返回的值是0;关系表达式成立,那么关系表达式返回的值是1。是一致的。