跳到主要内容
C++ 流程控制语句详解:顺序、选择与循环结构 | 极客日志
C++ 算法
C++ 流程控制语句详解:顺序、选择与循环结构 综述由AI生成 C++ 流程控制语句是构建结构化程序的基础,涵盖顺序、选择(if-else, switch)和循环(for, while, do-while)结构,以及跳转语句(break, continue, return)。文章通过多个代码示例演示了各语句的用法,并包含一个猜数字游戏的综合案例,帮助读者掌握条件判断与逻辑控制的核心技能。
MqEngine 发布于 2026/2/27 更新于 2026/5/31 30 浏览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;
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;
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 ;
}
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 ;
}
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 核心代码
#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
#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 "非常远!" ;
}
}
#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 ;
}
7.3 项目构建与运行
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release
./GuessingGame
八、总结与练习
8.1 本章总结
顺序结构的基本使用
选择结构的使用,包括 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++ 的函数式编程特性实现递归循环。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online