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

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

C++流程控制语句是构建结构化程序的基础,涵盖顺序、选择和循环三种基本结构。文章详细讲解了 if-else、switch 语句的使用场景及嵌套逻辑,对比了 while、do-while、for 及范围 for 循环的区别。此外还介绍了 break、continue 和 return 等跳转语句,并通过猜数字游戏案例演示了综合应用方法,帮助读者掌握编写清晰可维护代码的结构化编程思维。

赛博行者发布于 2026/2/10更新于 2026/10/21637 浏览
C++流程控制语句详解:顺序、选择与循环结构

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 >  ? age / (height * height) : ;
    std::cout <<  << bmi << std::endl;

     ;
}
0
0
"BMI: "
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 进阶挑战

更多推荐文章

查看全部
  • Python 爬虫入门实战指南
  • OpenVLA 详解:基于 Prismatic VLM 的通用机器人控制
  • AI 与数据驱动下的组织进化:未来三年技术与人才趋势
  • 嵌入式CAN通信:C++与SocketCAN的现代封装实践
  • Python 30 行实现公开接口数据本地化存储
  • 自然语言处理在社交媒体分析中的应用与实战
  • 位运算实战:两数之和、唯一数字与消失数字解析
  • Linux 多线程互斥与同步机制解析
  • 大模型应用优化:提示工程、RAG 与微调等 5 种方法
  • 医疗 NLP 实战:从电子病历分析到智能问答模型落地
  • HarmonyOS6 RcText 组件扩展能力详解
  • Dev C++ 安装与配置指南
  • 大型语言模型能否遵循简单规则:RULES 基准测试分析
  • C++ AVL 树概念讲解与模拟实现
  • Whisper-large-v3 多语言语音识别实测与优化建议
  • 大模型应用开发极简入门:基于 GPT-4 和 ChatGPT
  • AI 产品经理岗位需求激增:行业趋势与核心技能解析
  • ToDesk、顺网云与海马云部署 DeepSeek 大模型对比评测
  • C++ 哈希表链地址法(哈希桶)实现详解
  • browser-use:让 AI Agent 真正会用浏览器

相关免费在线工具

  • 加密/解密文本

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