跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 流程控制语句详解:顺序、选择与循环结构

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

MqEngine发布于 2026/2/27更新于 2026/9/472 浏览
C++ 流程控制语句详解:顺序、选择与循环结构

C++ 流程控制语句详解:顺序、选择与循环结构

一、学习目标与重点

本章将深入探讨 C++ 中的流程控制语句,这些语句是构建结构化程序的核心。通过学习,你将能够:

  1. 理解流程控制的基本概念,掌握顺序、选择和循环三种基本控制结构
  2. 学会使用 if-else 语句,实现条件判断和分支逻辑
  3. 掌握 switch 语句,处理多分支选择问题
  4. 学会使用循环语句,包括 for、while 和 do-while
  5. 理解跳转语句,包括 break、continue 和 return
  6. 培养结构化编程思维,编写清晰、可维护的代码

二、顺序结构

顺序结构是最简单的程序结构,代码按照从上到下的顺序依次执行。

#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"
#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;
}
7.3 项目构建与运行
# 创建构建目录
mkdir -p build && cd build
# 配置 CMake
cmake -DCMAKE_BUILD_TYPE=Release ..
# 编译项目
cmake --build . --config Release
# 运行游戏
./GuessingGame

八、总结与练习

8.1 本章总结

本章介绍了 C++ 中的流程控制语句,包括:

  1. 顺序结构的基本使用
  2. 选择结构的使用,包括 if-else 语句和 switch 语句
  3. 循环结构的使用,包括 while、do-while、for 和范围 for 循环
  4. 跳转语句的使用,包括 break、continue 和 return
  5. 综合案例:实现一个简单的猜数字游戏
8.2 练习题
  1. 写一个程序,使用 if-else 语句判断一个数是否是偶数或奇数。
  2. 编写一个程序,使用 switch 语句根据月份输出对应的季节。
  3. 写一个程序,使用 for 循环计算 1 到 100 的和。
  4. 实现一个函数,使用 while 循环计算阶乘。
  5. 写一个程序,使用嵌套循环打印一个菱形图案。
8.3 进阶挑战
  1. 研究如何使用 C++ 的异常处理机制处理输入错误。
  2. 学习如何使用 C++ 的模板技术实现通用的循环函数。
  3. 研究如何使用 C++ 的并发编程特性实现并行循环。
  4. 学习如何使用 C++ 的范围库(C++20 及以后)简化范围操作。
  5. 研究如何使用 C++ 的函数式编程特性实现递归循环。

目录

  1. C++ 流程控制语句详解:顺序、选择与循环结构
  2. 一、学习目标与重点
  3. 二、顺序结构
  4. 三、选择结构:if-else 语句
  5. 3.1 if 语句
  6. 3.2 if-else 语句
  7. 3.3 if-else if-else 语句
  8. 3.4 嵌套 if 语句
  9. 四、选择结构:switch 语句
  10. 4.1 基本 switch 语句
  11. 4.2 多个 case 共享代码块
  12. 4.3 switch 语句的限制
  13. 五、循环结构
  14. 5.1 while 循环
  15. 5.2 do-while 循环
  16. 5.3 for 循环
  17. 5.4 范围 for 循环(C++11 及以后)
  18. 5.5 嵌套循环
  19. 六、跳转语句
  20. 6.1 break 语句
  21. 6.2 continue 语句
  22. 6.3 return 语句
  23. 七、综合案例:实现一个简单的猜数字游戏
  24. 7.1 项目结构
  25. 7.2 核心代码
  26. 7.3 项目构建与运行
  27. 创建构建目录
  28. 配置 CMake
  29. 编译项目
  30. 运行游戏
  31. 八、总结与练习
  32. 8.1 本章总结
  33. 8.2 练习题
  34. 8.3 进阶挑战

更多推荐文章

查看全部
  • MacOS 极简部署 OpenClaw:Docker 版 + 飞书集成
  • Boost 搜索引擎实战:日志宏与 Server 端实现细节
  • Flutter 三方库 webrtc_interface 的鸿蒙化适配指南
  • 中国信通院 2024 大模型典型示范应用案例集与学习指南
  • 临床智能体与环境感知 AI 融合:基于 Python 的医疗 NLP 实践
  • Java结构体实战:歌唱比赛评分与旗鼓相当对手匹配
  • 纯 QWidget 实现电子地图控件:多线程瓦片加载与图形覆盖
  • 前端开发中 Failed to fetch 错误的排查与解决
  • Python AI 开源工具精选:从 Agent 框架到大模型推理实战
  • 无人机接单平台推荐及求职指南
  • Spring 核心技术解析:Spring-Jcl 日志模块详解
  • AI 大模型的掌握与运用技巧
  • NotoSansSC-Regular.otf 字体特性与应用场景解析
  • 人工智能、机器学习与深度学习的本质区别
  • AI Agent 工程化的最后一道防线:Environment Engineering
  • 扩散模型(Diffusion Model)原理与图像生成实战
  • 开源 AI 编程工具 OpenCode 深度评测与实战
  • STM32 项目 Git 版本管理入门教程
  • Git 分布式版本控制系统:安装、配置与实战指南
  • FPGA 简介及开发流程

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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