C++: 条件判断

最后更新:2026-08-26

前面的课程里,程序都是从上到下依次执行,没有分支。

但真实程序需要"做决策"——比如:

  • 如果成绩 ≥ 60 分,输出"及格";否则输出"不及格"
  • 如果是周末,就出去玩;否则就学习

这就是条件判断的作用。


1. if 语句

(1) 1.1 基本语法

CPP
if (condition) {
 // code to execute when condition is true
}

执行流程:

  1. 计算 条件 的值(必须是 bool 类型,或者能转换成 bool
  2. 如果为 true,执行大括号里的代码
  3. 如果为 false,跳过

▶ 示例 1:判断奇偶(难度⭐)

CPP
#include <iostream>

int main() {
 int num;
 std::cout << "请输入一个整数:";
 std::cin >> num;
 
 if (num % 2 == 0) {
 std::cout << num << " 是偶数" << std::endl;
 }
 
 if (num % 2 != 0) {
 std::cout << num << " 是奇数" << std::endl;
 }
 
 return 0;
}
▶ 试一试

输出:

TEXT 📖 仅展示
请输入一个整数:
 是偶数
 是奇数

运行效果:

TEXT 📖 仅展示
请输入一个整数:7
7 是奇数

💡 提示: 上面的程序用了两个 if,但其实可以用 if-else 来简化(见下节)。



2. if-else 语句

(1) 2.1 基本语法

CPP
if (condition) {
 // execute when condition is true
} else {
 // execute when condition is false
}

特点: 两个分支必走一个,而且只走一个

▶ 示例 2:判断奇偶(改进版)(难度⭐)

CPP
#include <iostream>

int main() {
 int num;
 std::cout << "请输入一个整数:";
 std::cin >> num;
 
 if (num % 2 == 0) {
 std::cout << num << " 是偶数" << std::endl;
 } else {
 std::cout << num << " 是奇数" << std::endl;
 }
 
 return 0;
}
▶ 试一试

输出:

TEXT 📖 仅展示
请输入一个整数:
 是偶数
 是奇数

(2) 2.2 省略大括号(不推荐)

如果 ifelse 后面只有一条语句,可以省略大括号:

CPP
if (num % 2 == 0)
 std::cout << "偶数" << std::endl; // ✅ 只有一条语句,可以省略大括号
else
 std::cout << "奇数" << std::endl;

💡 但是!强烈不建议这么做——省略大括号容易导致错误:

CPP
if (num % 2 == 0)
 std::cout << "偶数" << std::endl;
 std::cout << "这个数能被2整除" << std::endl; // ❌ 这行永远会执行(缩进骗了你)

推荐写法: 即使只有一条语句,也加大括号。



3. if-else if-else 链

当有多个条件要判断时,可以用 else if

CPP
if (条件1) {
 // 条件1为真时执行
} else if (条件2) {
 // 条件1为假,条件2为真时执行
} else if (条件3) {
 // 条件1、2为假,条件3为真时执行
} else {
 // 以上条件都为假时执行
}

💡 重点: 一旦某个条件为真,后面的 else ifelse 都不会执行

▶ 示例 3:成绩评级(难度⭐⭐)

CPP
#include <iostream>

int main() {
 int score;
 std::cout << "请输入成绩(0-100):";
 std::cin >> score;
 
 if (score >= 90) {
 std::cout << "优秀!评级:A" << std::endl;
 } else if (score >= 80) {
 std::cout << "良好!评级:B" << std::endl;
 } else if (score >= 70) {
 std::cout << "中等!评级:C" << std::endl;
 } else if (score >= 60) {
 std::cout << "及格!评级:D" << std::endl;
 } else {
 std::cout << "不及格!评级:F" << std::endl;
 }
 
 return 0;
}
▶ 试一试

输出:

TEXT 📖 仅展示
请输入成绩(0-100):
优秀!评级:A
良好!评级:B
中等!评级:C
及格!评级:D
不及格!评级:F

运行效果:

TEXT 📖 仅展示
请输入成绩(0-100):85
良好!评级:B

💡 技巧: else if (score >= 80) 其实隐含了 score < 90 的条件(因为如果 score >= 90 为真,程序就不会走到这里)。



4. 嵌套 if

if 语句里面可以再放 if,这叫嵌套

▶ 示例 4:判断闰年(难度⭐⭐)

CPP
#include <iostream>

int main() {
 int year;
 std::cout << "请输入年份:";
 std::cin >> year;
 
 if (year % 400 == 0) {
 std::cout << year << " 是闰年" << std::endl;
 } else {
 if (year % 4 == 0) {
 if (year % 100 != 0) {
 std::cout << year << " 是闰年" << std::endl;
 } else {
 std::cout << year << " 不是闰年" << std::endl;
 }
 } else {
 std::cout << year << " 不是闰年" << std::endl;
 }
 }
 
 return 0;
}
▶ 试一试

输出:

TEXT 📖 仅展示
请输入年份:
 是闰年
 是闰年
 不是闰年
 不是闰年

💡 提示: 这个程序可以用逻辑运算符简化(第04课学过):

CPP
bool isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
if (isLeapYear) {
 std::cout << year << " 是闰年" << std::endl;
} else {
 std::cout << year << " 不是闰年" << std::endl;
}


5. switch-case 语句

当要判断的条件是整数的等值比较时,可以用 switch-case 代替 if-else if 链。

(1) 5.1 基本语法

CPP
switch (表达式) {
 case 值1:
 // 当表达式 == 值1 时执行
 break;
 case 值2:
 // 当表达式 == 值2 时执行
 break;
 ...
 default:
 // 当以上都不匹配时执行
 break;
}

▶ 示例 5:简单的计算器(难度⭐⭐)

CPP
#include <iostream>

int main() {
 double num1, num2;
 char op;
 
 std::cout << "请输入第一个数字:";
 std::cin >> num1;
 
 std::cout << "请输入运算符(+ - * /):";
 std::cin >> op;
 
 std::cout << "请输入第二个数字:";
 std::cin >> num2;
 
 switch (op) {
 case '+':
 std::cout << num1 << " + " << num2 << " = " << num1 + num2 << std::endl;
 break;
 case '-':
 std::cout << num1 << " - " << num2 << " = " << num1 - num2 << std::endl;
 break;
 case '*':
 std::cout << num1 << " * " << num2 << " = " << num1 * num2 << std::endl;
 break;
 case '/':
 if (num2 != 0) {
 std::cout << num1 << " / " << num2 << " = " << num1 / num2 << std::endl;
 } else {
 std::cout << "错误:除数不能为0!" << std::endl;
 }
 break;
 default:
 std::cout << "错误:不支持的运算符!" << std::endl;
 break;
 }
 
 return 0;
}
▶ 试一试

输出:

TEXT 📖 仅展示
请输入第一个数字:
请输入运算符(+ - * /):
请输入第二个数字:
 +  = 
 -  = 
 *  = 
 /  = 
错误:除数不能为0!
错误:不支持的运算符!

(2) 5.2 break 的作用

break 用来跳出 switch 语句。如果忘记写 break,程序会继续执行下一个 case(这叫"穿透")。

CPP
int day = 2;

switch (day) {
 case 1:
 std::cout << "星期一" << std::endl;
 // ❌ 没有 break,会继续执行 case 2
 case 2:
 std::cout << "星期二" << std::endl;
 break;
 case 3:
 std::cout << "星期三" << std::endl;
 break;
}
// 输出:
// 星期二

💡 提示: 有时故意利用穿透可以简化代码(比如多个 case 执行相同代码),但要加注释说明。

CPP
char grade = 'B';

switch (grade) {
 case 'A':
 case 'B': // 故意穿透:A 和 B 都执行同一段代码
 case 'C':
 std::cout << "及格了!" << std::endl;
 break;
 case 'D':
 case 'F':
 std::cout << "没及格..." << std::endl;
 break;
}


6. 条件运算符(三元运算符)

C++ 有一个"简写"的 if-else,叫三元运算符

(1) 6.1 基本语法

TEXT 📖 仅展示
条件 ? 表达式1 : 表达式2

含义: 如果条件为真,返回表达式1的值;否则返回表达式2的值。

▶ 示例 6:找出最大值(难度⭐)

CPP
#include <iostream>

int main() {
 int a = 10, b = 20;
 
 int max = (a > b) ? a : b; // 如果 a > b 为真,max = a;否则 max = b
 
 std::cout << "最大值是:" << max << std::endl; // 输出:最大值是:20
 
 return 0;
}
▶ 试一试

输出:

TEXT 📖 仅展示
最大值是:20

💡 提示: 三元运算符适合简单的条件赋值。如果逻辑复杂,还是用 if-else 更清晰。



7. 实战:猜数字游戏

▶ 示例 7:猜数字(难度⭐⭐)

CPP
#include <iostream>
#include <cstdlib> // 用于 rand() 和 srand()
#include <ctime> // 用于 time()

int main() {
 // 用当前时间作为随机数种子(后面会详细讲)
 std::srand(static_cast<unsigned int>(std::time(nullptr)));
 
 int secretNumber = std::rand() % 100 + 1; // 生成 1-100 的随机数
 int guess;
 int attempts = 0;
 
 std::cout << "========== 猜数字游戏 ==========\n";
 std::cout << "我想了一个 1-100 的数字,你来猜!\n\n";
 
 do {
 std::cout << "请输入你的猜测:";
 std::cin >> guess;
 attempts++;
 
 if (guess > secretNumber) {
 std::cout << "大了!再试试。\n";
 } else if (guess < secretNumber) {
 std::cout << "小了!再试试。\n";
 } else {
 std::cout << "\n🎉 恭喜你!猜对了!\n";
 std::cout << "你一共猜了 " << attempts << " 次。\n";
 }
 
 } while (guess != secretNumber);
 
 return 0;
}
▶ 试一试

输出:

TEXT 📖 仅展示
========== 猜数字游戏 ==========

我想了一个 1-100 的数字,你来猜!


请输入你的猜测:
大了!再试试。

小了!再试试。


🎉 恭喜你!猜对了!

你一共猜了  次。

运行效果:

TEXT 📖 仅展示
========== 猜数字游戏 ==========
我想了一个 1-100 的数字,你来猜!

请输入你的猜测:50
大了!再试试。
请输入你的猜测:25
小了!再试试。
请输入你的猜测:37
大了!再试试。
请输入你的猜测:31
🎉 恭喜你!猜对了!
你一共猜了 4 次。

💡 提示: 这个程序用到了 do-while 循环(第07课会详细讲),你可以先照抄,理解大概思路。


❓ 常见问题

Q 为什么 if (x = 5) 不会报错?
A 赋值表达式 x = 5 的值是 5(非0视为true),所以条件永远为真。防坑技巧:把常量写在左边——if (5 = x) 会编译报错,if (5 == x) 才正确。
Q if 后面能直接写整数吗?比如 if (5)?
A 可以。C++ 中 0 视为 false,非0视为 true。但这样写不直观,不推荐。
Q switch-case 能判断浮点数吗?
A 不能。switch 的表达式必须是整数类型(intcharenum)。判断浮点数只能用 if-else,且要注意浮点数精度比较问题。
Q 为什么我的 if-else 链只执行了第一个 if?
A 通常是条件写错或大括号作用域问题。调试技巧:在每个分支里加 std::cout 输出标记,看看程序走到了哪个分支。

📖 小节


📝 作业

  1. 基础题 (Difficulty ⭐): 编写一个程序,让用户输入一个整数,判断它是正数、负数还是零。
TEXT 📖 仅展示
请输入一个整数:-5
-5 是负数
  1. 进阶题 (Difficulty ⭐⭐): 编写一个程序,让用户输入一个年份,判断它是否是闰年。

  2. 闰年规则:能被4整除但不能被100整除,或者能被400整除

  3. if-else 实现

  4. 挑战题 (Difficulty ⭐⭐⭐): 编写一个程序,实现"简易计算器":

  5. 让用户输入两个数字和一个运算符(+ - * /)

  6. switch-case 实现

  7. 如果除数是0,提示错误

  8. 如果运算符不支持,提示错误

  9. 运行效果:

TEXT 📖 仅展示
请输入第一个数字:10
请输入运算符:/
请输入第二个数字:3
结果:10 / 3 = 3.33333

8. 🚀 下一步

学会了条件判断,接下来我们学习 循环结构(for、while、do-while)(第07课)—— 让程序能重复执行某些代码,不用手动写100遍!

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏