关系操作符
关系操作符介绍
⽤于⽐较的表达式,称为“关系表达式”(relational expression),⾥⾯使⽤的运算符就称为“关
系运算符”(relational operator),主要有下⾯6个。
运算符 | 描述 |
---|---|
> | ⼤于运算符,⽤于⽐较两个数值,如果左侧数值⼤于右侧数值,则返回1(真),否则返回0(假) |
< | ⼩于运算符,⽤于⽐较两个数值,如果左侧数值⼩于右侧数值,则返回1(真),否则返回0(假) |
>= | ⼤于等于运算符,⽤于⽐较两个数值,如果左侧数值⼤于或等于右侧数值,则返回1(真),否则返回0(假) |
<= | ⼩于等于运算符,⽤于⽐较两个数值,如果左侧数值⼩于或等于右侧数值,则返回1(真),否则返回0(假) |
== | 相等运算符,⽤于⽐较两个值是否相等,如果相等,则返回1(真),否则返回0(假) |
!= | 不等于运算符,⽤于⽐较两个值是否不相等,如果不相等,则返回1(真),否则返回0(假) |
关系表达式通常返回 0 或 1 ,表⽰真假( 0 表⽰假,所有非零值表示真)。⽐如, 20 > 12 返回1 , 12 > 20 返回 0 。 | |
关系表达式常⽤于 if 或 while 结构。 |
if (x == 3)
{
cout << "x is 3" << endl;
}
注意:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不⼩⼼写出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果
if (x = 3) ...
关系操作符连⽤
多个关系运算符不宜连⽤
i < j < k
上⾯示例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果,即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式
(i < j) < k
上⾯式⼦中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进⾏⽐较。如果想要判断变量 j 的值是否在 i 和 k 之间,应该使⽤下⾯的写法。
i < j && j < k
浮点数⽐较相等
在⽐较浮点数时,由于浮点数在计算机中是以有限精度表⽰的,也就是说有些浮点数在内存中其实⽆法精确保存,这可能导致浮点数⽐较中的⼀些精度误差问题。
如果直接使⽤ == 来⽐较两个浮点数,很可能会由于这些微⼩的误差导致不准确的结果。
#include <iostream>
using namespace std;
int main()
{
double a = 0.1;
double b = 0.2;
double c = 0.3;
if (a + b == c)
cout << "a + b == c" << endl;
else
cout << "a + b != c" << endl;
return 0;
}
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a = 0.1;
double b = 0.2;
double c = 0.3;
if (fabs((a + b) - c) < 1e-9) // 1e-9 表⽰允许的误差范围
cout << "a + b 约等于 c" << endl;
else
cout << "a + b 不等于 c" << endl;
return 0;
}
练习
B2044 有一门课不及格的学生
#include <iostream>
using namespace std;
int a, b, c;
int main()
{
cin >> a >> b >> c;
int s = 0;
if (a < 60)
s++;
if (b < 60)
s++;
if (c < 60)
s++;
if (s == 1)
cout << 1 << endl;
else
cout << 0 << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
int s = 0;
cin >> a >> b >> c;
if ((a < 60) + (b < 60) + (c < 60) == 1)
cout << 1 << endl;
else
cout << 0 << endl;
return 0;
}
因为⼀个关系操作符计算的结果如果是真就是 1 ,如果是假就是 0 ,所以这⾥我们把三⻔成绩判断的结果相加,如果等于 1 ,就说明只有⼀⻔成绩不及格,也能达到题⽬的要求,⼀定程度上简化了代码。
#include <iostream>
using namespace std;
int main()
{
int a1, a2, n;
cin >> a1 >> a2 >> n;
if (n == 1)
cout << a1 << endl;
else if (n == 2)
cout << a2 << endl;
else
cout << a2 + (n - 2) * (a2 - a1) << endl;
return 0;
}
#include <iostream>
using namespace std;
int a1, a2, n;
int main()
{
cin >> a1 >> a2 >> n;
int d = a2 - a1;
int ret = (n - 1) * d + a1;
cout << ret << endl;
return 0;
}