Lesson 4 - 比较运算符
什么是比较运算符
在C++编程里,比较运算符可以用来比较两个数,告诉我们对还是错。当我们想知道一个数是否大于、等于或小于另一个数时,就可以用到这些比较运算符。
常见的比较运算符
>
:判断大于,例如5 > 4
。>=
:判断大于等于,例如7 >= 4
。<
:判断小于,例如2 < 4
。<=
:判断小于等于,例如1 <= 3
。==
:判断是否相等,例如3 == 3
。!=
:判断是否不等,例如4 != 5
。
提示
这些符号在数学课上也见过对吧?在编程里,它们不仅表示大小,还能告诉计算机结果是 对 还是 错。
比较运算符和数学符号的区别
在数学课上,我们使用
举例
在C++里:
5 > 3
的结果是 对,所以我们得到true
。2 > 3
的结果是 错,所以我们得到false
。
这两种答案在编程中有特别的名字:布尔值。
比较运算的结果:布尔类型
用比较运算符比较两个数后,得到的结果是布尔类型(Boolean),可以是:
true
(对)false
(错)
举例
假设我们用5 > 3
来判断大小,答案是 对,也就是true
。布尔类型像是一个开关,告诉我们一个条件是否成立。
布尔类型的定义
布尔类型(bool) 是一种只能有两个值的类型,true 或 false。这种类型在编程中非常重要,尤其是用来做判断。
举例代码
bool result = (5 > 3); // result的值是true
bool result2 = (2 > 3); // result2的值是false
在这里,result
是 true 因为 5 > 3
成立;而 result2
是 false,因为 2 > 3
不成立。
比较运算符的优先级
在C++中,不同的运算符有不同的优先级,也就是执行顺序。比较运算符的优先级比加减乘除低,所以我们一般会先算完加减乘除,再进行比较运算。
举例
// 先计算5 + 3得到8
// 再比较8 > 6,所以result是true
int result = 5 + 3 > 6;
在这里,5 + 3
先算出8,再去判断8 > 6
,答案是true。
if语句:让计算机做判断
有了布尔值后,我们就可以使用if语句来做出判断。if语句的作用是检查某个条件是否成立,如果成立,就执行某一段代码;不成立的话,就跳过。
使用方式
- if (条件):如果条件成立,执行大括号
{}
里的代码。 - 如果条件不成立,跳过
{}
里的代码。
提示
if 条件成立后,如果执行的内容只有一行指令,可以省略 {}
举例代码
int score = 85;
if (score > 60) { // 判断分数是否大于60
cout << "恭喜你,考试及格了!";
}
在这个例子中,if
语句判断score
是否大于60。如果是true
(分数超过60),就会输出“恭喜你,考试及格了!”;如果是false
,则不会输出任何东西。
例题
3017 买练习本
问题分析
小明要买一定数量的练习本,每本的价格是固定的。我们知道他带了多少钱,现在需要计算他是否带的钱足够支付所有练习本的费用。计算方法是先求出总费用,再与他带的钱数比较,足够则输出1,不够则输出0。
提示
- 先计算总费用 = 单价 × 数量。
- 比较带的钱和总费用,用布尔变量保存结果。
代码实现
#include<bits/stdc++.h>
using namespace std;
int main() {
// 小明带的钱数(单位元)
int money;
// 每本练习本的单价
int p;
// 需要购买的练习本数量
int n;
// 输入带的钱、单价和数量
cin >> money >> p >> n;
// 计算购买练习本的总费用
int totalCost = p * n;
// 判断钱是否足够购买所有练习本
bool isEnough = (money >= totalCost);
// 输出1表示足够,0表示不足
cout << isEnough << endl;
return 0;
}
3019 奶牛吃草
问题分析
每头奶牛每天需要吃5斤草。给定奶牛数量和草的总量,我们可以先计算草能让奶牛们吃多少天,再与10天进行比较。如果计算的天数小于10,则输出"NO";否则,输出实际可以吃的天数。
提示
- 计算草能够让奶牛吃的天数。
- 比较实际天数与10,少于10则输出"NO",否则输出实际天数。
代码实现
#include<bits/stdc++.h>
using namespace std;
int main() {
// 奶牛数量
int n;
// 草的总量
int m;
// 输入奶牛数量和草的总量
cin >> n >> m;
// 每头奶牛每天所需的草量
int per_day = 5;
// 计算草能让奶牛们吃多少天
int days = m / (n * per_day);
// 判断天数是否小于10
if (days < 10)
cout << "NO" << endl; // 不够吃10天
if (days >= 10)
cout << days << endl; // 输出实际天数
return 0;
}
3017 买练习本
问题分析
小明带了一定的钱去买练习本,已知每本练习本的单价和需要购买的数量。我们首先计算购买所需的总费用,并与小明带的钱数进行比较。如果钱足够,则计算剩余的钱数;如果不够,则输出“NO”。
提示
- 计算总费用 = 单价 × 数量。
- 判断带的钱是否大于等于总费用,够则输出剩余的钱,不够则输出"NO"。
代码实现
#include<bits/stdc++.h>
using namespace std;
int main() {
// 输入带的钱数、单价和数量
int money, price, quantity;
cin >> money >> price >> quantity;
// 计算总费用
int total_cost = price * quantity;
// 判断钱是否足够
if (money >= total_cost)
cout << (money - total_cost) << endl; // 足够,输出剩余的钱数
if (money < total_cost)
cout << "NO" << endl; // 不足,输出NO
return 0;
}
3021 判断相邻字母
问题分析
给定两个不同的小写英文字母,要求判断它们是否是字母表中相邻的字母。可以通过检查两个字母的ASCII码值的差是否为1来确定它们是否相邻。
提示
- 将字母转换为ASCII值,检查它们的差值是否为1。
- 如果差值为1,则是相邻字母;否则,不是相邻字母。
代码实现
#include<bits/stdc++.h>
using namespace std;
int main() {
// 输入两个字符
char a, b;
cin >> a >> b;
// 判断两个字符是否为相邻字母
if (abs(a - b) == 1)
cout << "YES" << endl; // 是相邻字母
if (abs(a - b) != 1)
cout << "NO" << endl; // 不是相邻字母
return 0;
}
3478 骑车与走路
问题分析
小明要在清华校园内去办事,面临骑车和步行的选择。我们知道骑车的固定时间开销,以及步行和骑车的不同速度。给定一个距离,我们要计算骑车和步行所需的总时间,并比较哪种方式更快。
- 骑车总时间 = 固定时间 + 路程时间。
- 固定时间 = 27秒(取车、开锁) + 23秒(停车、锁车) = 50秒。
- 路程时间 = 距离 ÷ 骑车速度。
- 步行时间 = 距离 ÷ 步行速度。
- 比较骑车和步行的总时间,如果骑车快则输出“Bike”,步行快则输出“Walk”,相同则输出“All”。
提示
- 先计算骑车的固定时间开销。
- 使用步行和骑车速度分别计算总时间,进行比较。
代码实现
#include<bits/stdc++.h>
using namespace std;
int main() {
// 输入办事的距离
int a;
cin >> a;
// 定义常量:骑车的固定时间开销和步行、骑车速度
int bike_fixed_time = 50; // 骑车固定时间(找车、开锁、停车、锁车的时间)
int walk_speed = 1; // 步行速度,每秒1米
int bike_speed = 3; // 骑车速度,每秒3米
// 计算骑车和步行的总时间
int bike_time = bike_fixed_time + (a / bike_speed);
int walk_time = a / walk_speed;
// 比较总时间并输出结果
if (bike_time < walk_time)
cout << "Bike" << endl;
if (bike_time > walk_time)
cout << "Walk" << endl;
if (bike_time == walk_time)
cout << "All" << endl;
return 0;
}
总结
- 比较运算符像判断条件的小工具,帮我们判断两个数的关系。
- 布尔类型有
true
和false
,让计算机知道判断的结果。 - if语句用布尔值来决定是否执行代码。