c++零基础通关教程《第四课》

🚀 C++ 编程第四课:关系运算符 —— 让程序学会 “比较”
📚 课程导航
- 🤔 关系运算符是什么? (6 种核心运算符)
- 📊 不同数据类型的比较 (int、double、float 对比)
- ⚠️ 比较时的注意事项 (避免踩坑小技巧)
- 📢 下节预告:单分支结构(if 语句)
1. 🤔 关系运算符是什么?—— 程序的 “比较小工具”
关系运算符就像我们生活中的 “比较规则”,比如 “小明的年龄是否比小红大”“苹果数量是否等于 5 个”,能帮程序判断两个值的关系,结果只有两种:成立(真,true) 或 不成立(假,false)。
(一)6 种核心关系运算符
运算符 | 名称 | 功能说明 | 示例代码 | 结果(假设 a=5,b=3) |
== | 等于 | 判断两个值是否相等 | a == b | false(5≠3) |
!= | 不等于 | 判断两个值是否不相等 | a != b | true(5≠3) |
> | 大于 | 判断左边值是否大于右边值 | a > b | true(5>3) |
< | 小于 | 判断左边值是否小于右边值 | a < b | false(5<3) |
>= | 大于等于 | 判断左边值是否大于或等于 | a >= 5 | true(5=5) |
<= | 小于等于 | 判断左边值是否小于或等于 | b <= 2 | false(3>2) |
💡 小提醒:==是 “判断相等”,而=是 “赋值”(把值放进变量),千万别搞混!比如a == 5是问 “a 是不是 5”,a = 5是 “把 5 放进 a 里”。
(二)编程案例:用关系运算符判断成绩
比如老师要判断学生成绩是否及格(60 分及以上为及格),用关系运算符就能轻松实现:
#include <iostream>using namespace std;int main() {int score = 75; // 学生成绩bool is_pass; // 存储判断结果(true/false)// 用>=判断成绩是否及格is_pass = score >= 60;cout << "学生成绩:" << score << "分" << endl;cout << "是否及格:" << (is_pass ? "是" : "否") << endl; // 输出结果return 0;}运行结果:
学生成绩:75分
是否及格:是
案例说明:score >= 60判断 75 是否≥60,结果为true,所以is_pass存储 “真”,最终输出 “是”。
2. 📊 不同数据类型的比较 —— 别让 “类型” 搞混判断
我们学过int(整数)、double(双精度小数)、float(单精度小数),它们之间也能比较,但要注意 “规则”,不然会出错哦!
(一)常见数据类型比较场景
1. int 与 int 比较(最安全)
整数和整数比较,直接按数值大小判断,不会有误差:
int num1 = 10;int num2 = 10;cout << "10 == 10?" << (num1 == num2 ? "是" : "否") << endl; // 结果:是2. int 与 double/float 比较(自动转换)
整数会自动转换成小数类型,再比较数值:
int a = 5;double b = 5.0;float c = 5.0f; // float类型要加fcout << "5 == 5.0?" << (a == b ? "是" : "否") << endl; // 结果:是cout << "5 == 5.0f?" << (a == c ? "是" : "否") << endl; // 结果:是原理:a=5会变成5.0(double 类型),再和b=5.0比较,数值相等,结果为真。
3. double 与 float 比较(注意精度)
double精度比float高,比较时float会转成double,但要避免 “精度误差”:
double d = 0.1;float f = 0.1f;// 注意:0.1在二进制中无法精确表示,float转double后可能有微小误差cout << "0.1(double) == 0.1f(float)?" << (d == f ? "是" : "否") << endl;运行结果:
0.1(double) == 0.1f(float)?否
避坑技巧:尽量用同类型比较,比如都用double,或用 “差值小于很小的数” 判断(如abs(d - f) < 0.000001)。
(二)编程案例:混合类型比较实战
比如判断 “苹果总价是否超过 10 元”,单价是double(3.5 元 / 个),数量是int(3 个):
#include <iostream>using namespace std;int main() {int apple_count = 3; // 苹果数量(int)double price_per = 3.5; // 单价(double)double total; // 总价bool is_over_10; // 是否超过10元total = apple_count * price_per; // 计算总价:3*3.5=10.5is_over_10 = total > 10; // 比较总价和10cout << "苹果数量:" << apple_count << "个" << endl;cout << "单价:" << price_per << "元/个" << endl;cout << "总价:" << total << "元" << endl;cout << "总价是否超过10元?" << (is_over_10 ? "是" : "否") << endl;return 0;}运行结果:
苹果数量:3个
单价:3.5元/个
总价:10.5元
总价是否超过10元?是
案例说明:apple_count=3(int)和price_per=3.5(double)计算时,3 会转成 3.5,总价 10.5(double)和 10 比较,结果为真。
3. ⚠️ 比较时的注意事项 —— 避开这些 “小陷阱”
- ❌ 不要用==比较浮点数(如double/float)
因为浮点数可能有精度误差(比如 0.1 实际存储为 0.1000000001),用==容易判断错误,改用 “差值小于极小值”:
double x = 0.1 + 0.2;
double y = 0.3;
// 错误:cout << (x == y ? "相等" : "不相等"); // 结果可能是“不相等”
// 正确:判断差值是否小于0.000001(根据需求调整精度)
cout << (abs(x - y) < 0.000001 ? "相等" : "不相等"); // 结果:相等
- ❌ 别把==和=搞混
==是 “判断相等”,=是 “赋值”,比如if (a = 5)会把 5 赋值给 a,永远为真,正确写法是if (a == 5)。
- ✅ 比较前尽量统一数据类型
比如把int转成double,或把float转成double,减少类型转换带来的误差。
4. 📢 下节预告:单分支结构(if 语句)
本节课我们学会了用关系运算符判断 “谁大谁小、是否相等”,下一节课我们要学习单分支结构(if 语句)—— 让程序根据判断结果 “做选择”!
比如:
- 如果成绩≥60 分,就输出 “恭喜及格!”;
- 如果苹果总价超过 10 元,就输出 “需要多带点钱哦!”。
单分支结构能让程序更 “智能”,根据不同情况执行不同代码,是编写复杂程序的重要基础,期待下节课一起学习吧!😉


