跳到主要内容
C++流程控制语句详解:顺序、选择与循环结构 | 极客日志
C++ 算法
C++流程控制语句详解:顺序、选择与循环结构 综述由AI生成 详细讲解了 C++ 流程控制语句,涵盖顺序结构、选择结构(if-else、switch-case)、循环结构(while、do-while、for)、跳转语句(break、continue、return、goto)以及异常处理机制。通过基础示例、应用场景分析及综合猜数字游戏案例,帮助读者掌握构建结构化程序的核心逻辑,提升代码可读性与可维护性。内容包含完整代码示例与练习题,适合初学者系统学习 C++ 控制流。
ByteFlow 发布于 2026/2/10 更新于 2026/6/2 4.4K 浏览C++流程控制语句详解:顺序、选择与循环结构
一、学习目标与重点
本章将深入探讨 C++ 流程控制语句的核心概念和应用。通过学习,你将能够:
掌握 C++ 的三种基本流程控制结构 :顺序结构、选择结构和循环结构
理解并熟练应用各类条件判断语句 ,包括 if-else、switch-case 等
掌握各类循环语句的使用方法 ,包括 for、while、do-while 等
学会使用跳转语句 ,包括 break、continue、return 和 goto
培养编写结构化程序的能力 ,提升代码的可读性和可维护性
理解异常处理机制 ,学会处理程序运行时的错误
二、顺序结构与简单流程
2.1 顺序结构的基本概念
顺序结构是最简单的程序控制结构,程序按照代码的书写顺序依次执行。在 C++ 中,大多数程序都是由顺序结构构成的。
2.2 顺序结构示例
让我们通过一个简单的示例来理解顺序结构:
#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;
return 0 ;
}
三、选择结构:if-else 语句
3.1 if 语句的基本用法
if 语句是 C++ 中最常用的条件判断语句,用于根据条件的真假执行不同的代码块:
#include <iostream>
int main () {
std::cout << "=== if 语句示例 ===" << std::endl;
int age;
std::cout << "请输入您的年龄:" ;
std::cin >> age;
if (age >= 18 ) {
std::cout << "您已经成年,可以参加投票" << std::endl;
}
return 0 ;
}
3.2 if-else 语句 if-else 语句用于在条件为真和条件为假时执行不同的代码块:
#include <iostream>
int main () {
std::cout << "=== if-else 语句示例 ===" << std::endl;
int age;
std::cout << "请输入您的年龄:" ;
std::cin >> age;
if (age >= 18 ) {
std::cout << "您已经成年,可以参加投票" << std::endl;
} else {
std::cout << "您尚未成年,暂时不能参加投票" << std::endl;
}
return 0 ;
}
3.3 if-else if-else 语句 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 << "您的成绩等级: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 << "您的成绩等级:E" << std::endl;
}
return 0 ;
}
3.4 嵌套 if 语句 #include <iostream>
int main () {
std::cout << "=== 嵌套 if 语句示例 ===" << std::endl;
int age;
bool hasLicense;
std::cout << "请输入您的年龄:" ;
std::cin >> age;
std::cout << "您是否有驾驶执照 (1 表示有,0 表示没有):" ;
std::cin >> hasLicense;
if (age >= 18 ) {
if (hasLicense) {
std::cout << "您可以驾驶车辆" << std::endl;
} else {
std::cout << "您已经成年,但没有驾驶执照,不能驾驶车辆" << std::endl;
}
} else {
std::cout << "您尚未成年,不能驾驶车辆" << std::endl;
}
return 0 ;
}
四、选择结构:switch-case 语句
4.1 switch-case 语句的基本用法 switch-case 语句用于根据表达式的值选择执行不同的代码块:
#include <iostream>
int main () {
std::cout << "=== switch-case 语句示例 ===" << std::endl;
int day;
std::cout << "请输入一个数字 (1-7):" ;
std::cin >> day;
switch (day) {
case 1 :
std::cout << "星期一" << std::endl;
break ;
case 2 :
std::cout << "星期二" << std::endl;
break ;
case 3 :
std::cout << "星期三" << std::endl;
break ;
case 4 :
std::cout << "星期四" << std::endl;
break ;
case 5 :
std::cout << "星期五" << std::endl;
break ;
case 6 :
std::cout << "星期六" << std::endl;
break ;
case 7 :
std::cout << "星期日" << std::endl;
break ;
default :
std::cout << "输入无效,请输入 1-7 之间的数字" << std::endl;
break ;
}
return 0 ;
}
4.2 switch-case 语句的注意事项 在使用 switch-case 语句时,需要注意以下几点:
switch 后面的表达式必须是整数类型(int、char、枚举等)
case 后面的常量表达式必须是唯一的
每个 case 分支可以有多个语句,无需使用大括号
必须使用 break 语句来跳出 switch 语句,否则会继续执行下一个 case 分支
default 分支是可选的,用于处理所有未匹配的情况
五、循环结构:while 循环
5.1 while 循环的基本用法 #include <iostream>
int main () {
std::cout << "=== while 循环示例 ===" << std::endl;
int count = 1 ;
while (count <= 10 ) {
std::cout << count << " " ;
count++;
}
std::cout << std::endl;
return 0 ;
}
5.2 while 循环的应用场景 #include <iostream>
int main () {
std::cout << "=== while 循环应用场景示例 ===" << std::endl;
int sum = 0 ;
int number;
std::cout << "请输入一系列整数,输入 0 结束:" << std::endl;
while (true ) {
std::cin >> number;
if (number == 0 ) {
break ;
}
sum += number;
}
std::cout << "输入的整数之和:" << sum << std::endl;
return 0 ;
}
六、循环结构:do-while 循环
6.1 do-while 循环的基本用法 do-while 循环与 while 循环类似,但它会先执行一次循环体,然后再检查条件:
#include <iostream>
int main () {
std::cout << "=== do-while 循环示例 ===" << std::endl;
int count = 1 ;
do {
std::cout << count << " " ;
count++;
} while (count <= 10 );
std::cout << std::endl;
return 0 ;
}
6.2 do-while 循环的应用场景 do-while 循环常用于至少需要执行一次的循环操作:
#include <iostream>
#include <string>
int main () {
std::cout << "=== do-while 循环应用场景示例 ===" << std::endl;
std::string password;
std::string correctPassword = "123456" ;
do {
std::cout << "请输入密码:" ;
std::cin >> password;
} while (password != correctPassword);
std::cout << "密码正确,欢迎登录!" << std::endl;
return 0 ;
}
七、循环结构:for 循环
7.1 for 循环的基本用法 for 循环是 C++ 中最常用的循环语句,它将初始化、条件判断和迭代放在一起:
#include <iostream>
int main () {
std::cout << "=== for 循环示例 ===" << std::endl;
for (int i = 1 ; i <= 10 ; i++) {
std::cout << i << " " ;
}
std::cout << std::endl;
return 0 ;
}
7.2 for 循环的高级用法 for 循环有多种高级用法,包括范围 for 循环(C++11 及以后)和嵌套 for 循环:
#include <iostream>
#include <vector>
int main () {
std::cout << "=== for 循环高级用法示例 ===" << std::endl;
std::vector<int > numbers = {1 , 2 , 3 , 4 , 5 };
std::cout << "范围 for 循环: " ;
for (int num : numbers) {
std::cout << num << " " ;
}
std::cout << std::endl;
std::cout << "嵌套 for 循环:" << std::endl;
for (int i = 1 ; i <= 5 ; i++) {
for (int j = 1 ; j <= i; j++) {
std::cout << "* " ;
}
std::cout << std::endl;
}
return 0 ;
}
八、跳转语句:break、continue、return 和 goto
8.1 break 语句 break 语句用于跳出当前循环或 switch 语句:
#include <iostream>
int main () {
std::cout << "=== break 语句示例 ===" << std::endl;
for (int i = 1 ; i <= 10 ; i++) {
if (i == 5 ) {
break ;
}
std::cout << i << " " ;
}
std::cout << std::endl;
return 0 ;
}
8.2 continue 语句 continue 语句用于跳过当前循环的剩余部分,直接开始下一次循环:
#include <iostream>
int main () {
std::cout << "=== continue 语句示例 ===" << std::endl;
for (int i = 1 ; i <= 10 ; i++) {
if (i % 2 == 0 ) {
continue ;
}
std::cout << i << " " ;
}
std::cout << std::endl;
return 0 ;
}
8.3 return 语句 return 语句用于结束函数的执行,并返回一个值(如果函数有返回类型):
#include <iostream>
int add (int a, int b) {
return a + b;
}
int main () {
std::cout << "=== return 语句示例 ===" << std::endl;
int result = add (3 , 5 );
std::cout << "3 + 5 = " << result << std::endl;
return 0 ;
}
8.4 goto 语句 goto 语句用于无条件跳转到程序的其他位置,但应尽量避免使用,因为它会破坏程序的结构化:
#include <iostream>
int main () {
std::cout << "=== goto 语句示例 ===" << std::endl;
int count = 1 ;
label:
std::cout << count << " " ;
count++;
if (count <= 10 ) {
goto label;
}
std::cout << std::endl;
return 0 ;
}
九、异常处理机制
9.1 异常处理的基本概念 C++ 提供了异常处理机制,用于处理程序运行时的错误:
#include <iostream>
#include <stdexcept>
int divide (int a, int b) {
if (b == 0 ) {
throw std::invalid_argument ("除数不能为零" );
}
return a / b;
}
int main () {
std::cout << "=== 异常处理示例 ===" << std::endl;
int x = 10 , y = 0 ;
try {
int result = divide (x, y);
std::cout << "结果:" << result << std::endl;
} catch (const std::invalid_argument& e) {
std::cout << "错误:" << e.what () << std::endl;
} catch (...) {
std::cout << "未知错误" << std::endl;
}
return 0 ;
}
9.2 异常处理的最佳实践
只在发生真正的错误时抛出异常
使用标准异常类型或自定义异常类型
确保所有资源都能正确释放
避免在析构函数中抛出异常
提供适当的错误信息
十、综合案例:实现一个简单的猜数字游戏 #include <iostream>
#include <cstdlib>
#include <ctime>
int main () {
std::cout << "=== 猜数字游戏 ===" << std::endl;
std::srand (std::time (nullptr ));
int target = std::rand () % 100 + 1 ;
int guess;
int attempts = 0 ;
do {
std::cout << "\n请输入您的猜测 (1-100): " ;
std::cin >> guess;
attempts++;
if (guess < 1 || guess > 100 ) {
std::cout << "请输入 1-100 之间的数字" << std::endl;
continue ;
}
if (guess < target) {
std::cout << "太小了,再试试" << std::endl;
} else if (guess > target) {
std::cout << "太大了,再试试" << std::endl;
} else {
std::cout << "恭喜你,猜对了!" << std::endl;
std::cout << "你用了" << attempts << "次尝试" << std::endl;
}
} while (guess != target);
return 0 ;
}
十一、总结与练习
11.1 本章总结 本章介绍了 C++ 流程控制语句的核心知识,包括:
顺序结构的基本概念
选择结构:if-else、switch-case 等语句的用法
循环结构:while、do-while、for 等循环语句的用法
跳转语句:break、continue、return 和 goto 的用法
异常处理机制的基本概念和最佳实践
综合案例:实现一个简单的猜数字游戏
11.2 练习题
写一个程序,使用 if-else 语句判断一个数是正数、负数还是零。
编写一个程序,使用 switch-case 语句实现一个简单的计算器。
写一个程序,使用 while 循环计算 1 到 100 的和。
实现一个程序,使用 for 循环输出所有的水仙花数(三位数,其各位数字的立方和等于该数本身)。
写一个程序,使用异常处理机制处理文件读写错误。
11.3 进阶挑战
研究 C++ 中的范围 for 循环,并实现一个支持范围 for 循环的自定义容器。
学习如何使用 C++ 的标准算法库(如 std::find、std::sort 等)来替代手动编写的循环。
研究 C++ 中的异常类继承体系,并实现一个自定义的异常类。
学习如何使用 C++ 的函数式编程特性,如 lambda 表达式,来简化循环和条件判断。
相关免费在线工具 加密/解密文本 使用加密算法(如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