C++ 流程控制语句详解:顺序、选择与循环结构
一、学习目标与重点
本章将深入探讨 C++ 中的流程控制语句,这些语句是构建结构化程序的核心。通过学习,你将能够:
- 理解流程控制的基本概念,掌握顺序、选择和循环三种基本控制结构
- 学会使用 if-else 语句,实现条件判断和分支逻辑
- 掌握 switch 语句,处理多分支选择问题
- 学会使用循环语句,包括 for、while 和 do-while
- 理解跳转语句,包括 break、continue 和 return
- 培养结构化编程思维,编写清晰、可维护的代码
二、顺序结构
顺序结构是最简单的程序结构,代码按照从上到下的顺序依次执行。
#include <iostream>
#include <string>
int main() {
std::cout << "=== 顺序结构示例 ===" << std::endl;
// 声明变量
std::string name;
int age;
double height;
// 输入数据
std::cout << "请输入姓名:";
std::cin >> name;
std::cout << "请输入年龄:";
std::cin >> age;
std::cout << "请输入身高 (米):";
std::cin >> height;
// 输出信息
std::cout << "\n个人信息:" << std::endl;
std::cout << "姓名:" << name << std::endl;
std::cout << "年龄:" << age << "岁" << std::endl;
std::cout << "身高:" << height << "米" << std::endl;
// 计算并输出 BMI
double bmi = height > 0 ? age / (height * height) : 0;
std::cout << "BMI: " << bmi << std::endl;
return 0;
}
三、选择结构:if-else 语句
3.1 if 语句
#include <iostream>
int main() {
std::cout << "=== if 语句示例 ===" << std::endl;
int score;
std::cout << "请输入成绩:";
std::cin >> score;
if (score >= 60) {
std::cout << "成绩合格" << std::endl;
}
return 0;
}
3.2 if-else 语句
#include <iostream>
int main() {
std::cout << "=== if-else 语句示例 ===" << std::endl;
int score;
std::cout << "请输入成绩:";
std::cin >> score;
if (score >= 60) {
std::cout << "成绩合格" << std::endl;
} else {
std::cout << "成绩不合格" << std::endl;
}
return 0;
}
3.3 if-else if-else 语句
#include <iostream>
int main() {
std::cout << "=== if-else if-else 语句示例 ===" << std::endl;
int score;
std::cout << "请输入成绩:";
std::cin >> score;
if (score >= 90) {
std::cout << "优秀" << std::endl;
} else if (score >= 80) {
std::cout << "良好" << std::endl;
} else if (score >= 70) {
std::cout << "中等" << std::endl;
} else if (score >= 60) {
std::cout << "及格" << std::endl;
} else {
std::cout << "不及格" << std::endl;
}
return 0;
}
3.4 嵌套 if 语句
#include <iostream>
int main() {
std::cout << "=== 嵌套 if 语句示例 ===" << std::endl;
int age;
bool isStudent;
std::cout << "请输入年龄:";
std::cin >> age;
std::cout << "是否是学生 (1 是,0 否):";
std::cin >> isStudent;
if (age >= 18) {
if (isStudent) {
std::cout << "成年学生,享受学生优惠" << std::endl;
} else {
std::cout << "成年非学生,不享受学生优惠" << std::endl;
}
} else {
std::cout << "未成年人,享受半价优惠" << std::endl;
}
return 0;
}
四、选择结构:switch 语句
4.1 基本 switch 语句
#include <iostream>
int main() {
std::cout << "=== switch 语句示例 ===" << std::endl;
int choice;
std::cout << "请输入操作编号 (1-4):";
std::cin >> choice;
switch (choice) {
case 1:
std::cout << "执行操作 1" << std::endl;
break;
case 2:
std::cout << "执行操作 2" << std::endl;
break;
case 3:
std::cout << "执行操作 3" << std::endl;
break;
case 4:
std::cout << "执行操作 4" << std::endl;
break;
default:
std::cout << "无效的操作编号" << std::endl;
break;
}
return 0;
}
4.2 多个 case 共享代码块
#include <iostream>
int main() {
std::cout << "=== switch 语句共享代码块示例 ===" << std::endl;
char grade;
std::cout << "请输入成绩等级 (A/B/C/D):";
std::cin >> grade;
switch (grade) {
case 'A':
case 'B':
std::cout << "成绩优秀" << std::endl;
break;
case 'C':
std::cout << "成绩中等" << std::endl;
break;
case 'D':
std::cout << "成绩不及格" << std::endl;
break;
default:
std::cout << "无效的成绩等级" << std::endl;
break;
}
return 0;
}
4.3 switch 语句的限制
#include <iostream>
int main() {
std::cout << "=== switch 语句的限制示例 ===" << std::endl;
// switch 语句的表达式必须是整数类型或枚举类型
double value = 1.5;
switch (static_cast<int>(value)) {
case 1:
std::cout << "整数部分是 1" << std::endl;
break;
case 2:
std::cout << "整数部分是 2" << std::endl;
break;
default:
std::cout << "其他值" << std::endl;
break;
}
return 0;
}
五、循环结构
5.1 while 循环
#include <iostream>
int main() {
std::cout << "=== while 循环示例 ===" << std::endl;
int count = 1;
while (count <= 5) {
std::cout << "计数:" << count << std::endl;
count++;
}
return 0;
}
5.2 do-while 循环
#include <iostream>
int main() {
std::cout << "=== do-while 循环示例 ===" << std::endl;
int count = 1;
do {
std::cout << "计数:" << count << std::endl;
count++;
} while (count <= 5);
return 0;
}
5.3 for 循环
#include <iostream>
int main() {
std::cout << "=== for 循环示例 ===" << std::endl;
for (int i = 1; i <= 5; i++) {
std::cout << "计数:" << i << std::endl;
}
return 0;
}
5.4 范围 for 循环(C++11 及以后)
#include <iostream>
#include <vector>
int main() {
std::cout << "=== 范围 for 循环示例 ===" << std::endl;
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
std::cout << "数字:" << num << std::endl;
}
return 0;
}
5.5 嵌套循环
#include <iostream>
int main() {
std::cout << "=== 嵌套循环示例 ===" << std::endl;
// 打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
std::cout << j << "×" << i << "=" << (i * j) << "\t";
}
std::cout << std::endl;
}
return 0;
}
六、跳转语句
6.1 break 语句
#include <iostream>
int main() {
std::cout << "=== break 语句示例 ===" << std::endl;
for (int i = 1; i <= 10; i++) {
if (i == 6) {
break; // 遇到 6 时跳出循环
}
std::cout << "数字:" << i << std::endl;
}
std::cout << "循环结束" << std::endl;
return 0;
}
6.2 continue 语句
#include <iostream>
int main() {
std::cout << "=== continue 语句示例 ===" << std::endl;
for (int i = 1; i <= 10; i++) {
if (i == 6) {
continue; // 遇到 6 时跳过当前循环
}
std::cout << "数字:" << i << std::endl;
}
std::cout << "循环结束" << std::endl;
return 0;
}
6.3 return 语句
#include <iostream>
// 返回两个数中的最大值
int findMax(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
int main() {
std::cout << "=== return 语句示例 ===" << std::endl;
int x = 10, y = 20;
int max = findMax(x, y);
std::cout << "最大值:" << max << std::endl;
return 0;
}
七、综合案例:实现一个简单的猜数字游戏
7.1 项目结构
GuessingGame/
├── include/
│ └── Game.h
├── src/
│ ├── Game.cpp
│ └── main.cpp
└── build/
7.2 核心代码
// include/Game.h
#ifndef GAME_H
#define GAME_H
#include <random>
#include <string>
class GuessingGame {
private:
int target;
int min;
int max;
int attempts;
std::mt19937 rng;
public:
GuessingGame(int min = 1, int max = 100);
void start();
void reset();
bool guess(int number);
int getAttempts() const;
int getTarget() const;
std::string getHint(int guess) const;
};
#endif // GAME_H
// src/Game.cpp
#include "Game.h"
#
GuessingGame::( min, max) : (min), (max), () {
seed = std::chrono::high_resolution_clock::().().();
rng = std::(< >(seed));
();
}
{
;
target = (rng);
attempts = ;
}
{
guess;
std::cout << << std::endl;
std::cout << << min << << max << << std::endl;
{
std::cout << ;
std::cin >> guess;
attempts++;
(guess < min || guess > max) {
std::cout << << min << << max << << std::endl;
} (!->(guess)) {
std::cout << (guess) << std::endl;
}
} (guess != target);
}
{
number == target;
}
{
attempts;
}
{
target;
}
{
difference = std::(guess - target);
(difference <= ) {
;
} (difference <= ) {
;
} (difference <= ) {
;
} {
;
}
}
{
std::cout << << std::endl;
min, max;
std::cout << ;
std::cin >> min;
std::cout << ;
std::cin >> max;
;
game.();
std::cout << << game.() << << game.() << << std::endl;
;
}
7.3 项目构建与运行
# 创建构建目录
mkdir -p build && cd build
# 配置 CMake
cmake -DCMAKE_BUILD_TYPE=Release ..
# 编译项目
cmake --build . --config Release
# 运行游戏
./GuessingGame
八、总结与练习
8.1 本章总结
本章介绍了 C++ 中的流程控制语句,包括:
- 顺序结构的基本使用
- 选择结构的使用,包括 if-else 语句和 switch 语句
- 循环结构的使用,包括 while、do-while、for 和范围 for 循环
- 跳转语句的使用,包括 break、continue 和 return
- 综合案例:实现一个简单的猜数字游戏
8.2 练习题
- 写一个程序,使用 if-else 语句判断一个数是否是偶数或奇数。
- 编写一个程序,使用 switch 语句根据月份输出对应的季节。
- 写一个程序,使用 for 循环计算 1 到 100 的和。
- 实现一个函数,使用 while 循环计算阶乘。
- 写一个程序,使用嵌套循环打印一个菱形图案。
8.3 进阶挑战
- 研究如何使用 C++ 的异常处理机制处理输入错误。
- 学习如何使用 C++ 的模板技术实现通用的循环函数。
- 研究如何使用 C++ 的并发编程特性实现并行循环。
- 学习如何使用 C++ 的范围库(C++20 及以后)简化范围操作。
- 研究如何使用 C++ 的函数式编程特性实现递归循环。


