C++ 流程控制语句详解:顺序、选择与循环结构
一、学习目标与重点
本章将深入探讨 C++ 中的流程控制语句,这些语句是构建结构化程序的核心。通过学习,你将能够:
C++ 流程控制语句是构建结构化程序的基础,涵盖顺序、选择(if-else, switch)和循环(for, while, do-while)结构,以及跳转语句(break, continue, return)。文章通过多个代码示例演示了各语句的用法,并包含一个猜数字游戏的综合案例,帮助读者掌握条件判断与逻辑控制的核心技能。

本章将深入探讨 C++ 中的流程控制语句,这些语句是构建结构化程序的核心。通过学习,你将能够:
顺序结构是最简单的程序结构,代码按照从上到下的顺序依次执行。
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
#include <iostream>
int main() {
std::cout << "=== while 循环示例 ===" << std::endl;
int count = 1;
while (count <= 5) {
std::cout << "计数:" << count << std::endl;
count++;
}
return 0;
}
#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;
}
#include <iostream>
int main() {
std::cout << "=== for 循环示例 ===" << std::endl;
for (int i = 1; i <= 5; i++) {
std::cout << "计数:" << i << std::endl;
}
return 0;
}
#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;
}
#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;
}
#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;
}
#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;
}
#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;
}
GuessingGame/
├── include/
│ └── Game.h
├── src/
│ ├── Game.cpp
│ └── main.cpp
└── build/
// 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"
#include <chrono>
GuessingGame::GuessingGame(int min, int max) : min(min), max(max), attempts(0) {
// 使用系统时间作为随机数种子
auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
rng = std::mt19937(static_cast<unsigned int>(seed));
reset();
}
void GuessingGame::reset() {
std::uniform_int_distribution<int> dist(min, max);
target = dist(rng);
attempts = 0;
}
void GuessingGame::start() {
int guess;
std::cout << "=== 猜数字游戏 ===" << std::endl;
std::cout << "我已经想好了一个" << min << "到" << max << "之间的数字。" << std::endl;
do {
std::cout << "请输入你的猜测:";
std::cin >> guess;
attempts++;
if (guess < min || guess > max) {
std::cout << "请输入" << min << "到" << max << "之间的数字。" << std::endl;
} else if (!this->guess(guess)) {
std::cout << getHint(guess) << std::endl;
}
} while (guess != target);
}
bool GuessingGame::guess(int number) {
return number == target;
}
int GuessingGame::getAttempts() const {
return attempts;
}
int GuessingGame::getTarget() const {
return target;
}
std::string GuessingGame::getHint(int guess) const {
int difference = std::abs(guess - target);
if (difference <= 5) {
return "非常接近!";
} else if (difference <= 10) {
return "接近!";
} else if (difference <= 20) {
return "比较远!";
} else {
return "非常远!";
}
}
// src/main.cpp
#include <iostream>
#include <string>
#include "Game.h"
int main() {
std::cout << "=== 猜数字游戏 ===" << std::endl;
int min, max;
std::cout << "请输入最小数字:";
std::cin >> min;
std::cout << "请输入最大数字:";
std::cin >> max;
GuessingGame game(min, max);
game.start();
std::cout << "恭喜你!你用了" << game.getAttempts() << "次猜中了数字" << game.getTarget() << "." << std::endl;
return 0;
}
# 创建构建目录
mkdir -p build && cd build
# 配置 CMake
cmake -DCMAKE_BUILD_TYPE=Release ..
# 编译项目
cmake --build . --config Release
# 运行游戏
./GuessingGame
本章介绍了 C++ 中的流程控制语句,包括:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online