C++流程控制语句:构建结构化程序的核心

C++流程控制语句:构建结构化程序的核心

C++流程控制语句:构建结构化程序的核心

在这里插入图片描述

一、学习目标与重点

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

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

二、顺序结构

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

#include<iostream>#include<string>intmain(){ 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;// 计算并输出BMIdouble bmi = height >0? age /(height * height):0; std::cout <<"BMI: "<< bmi << std::endl;return0;}

三、选择结构:if-else语句

3.1 if语句

#include<iostream>intmain(){ std::cout <<"=== if语句示例 ==="<< std::endl;int score; std::cout <<"请输入成绩: "; std::cin >> score;if(score >=60){ std::cout <<"成绩合格"<< std::endl;}return0;}

3.2 if-else语句

#include<iostream>intmain(){ 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;}return0;}

3.3 if-else if-else语句

#include<iostream>intmain(){ std::cout <<"=== if-else if-else语句示例 ==="<< std::endl;int score; std::cout <<"请输入成绩: "; std::cin >> score;if(score >=90){ std::cout <<"优秀"<< std::endl;}elseif(score >=80){ std::cout <<"良好"<< std::endl;}elseif(score >=70){ std::cout <<"中等"<< std::endl;}elseif(score >=60){ std::cout <<"及格"<< std::endl;}else{ std::cout <<"不及格"<< std::endl;}return0;}

3.4 嵌套if语句

#include<iostream>intmain(){ 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;}return0;}

四、选择结构:switch语句

4.1 基本switch语句

#include<iostream>intmain(){ std::cout <<"=== switch语句示例 ==="<< std::endl;int choice; std::cout <<"请输入操作编号(1-4): "; std::cin >> choice;switch(choice){case1: std::cout <<"执行操作1"<< std::endl;break;case2: std::cout <<"执行操作2"<< std::endl;break;case3: std::cout <<"执行操作3"<< std::endl;break;case4: std::cout <<"执行操作4"<< std::endl;break;default: std::cout <<"无效的操作编号"<< std::endl;break;}return0;}

4.2 多个case共享代码块

#include<iostream>intmain(){ 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;}return0;}

4.3 switch语句的限制

#include<iostream>intmain(){ std::cout <<"=== switch语句的限制示例 ==="<< std::endl;// switch语句的表达式必须是整数类型或枚举类型double value =1.5;switch(static_cast<int>(value)){case1: std::cout <<"整数部分是1"<< std::endl;break;case2: std::cout <<"整数部分是2"<< std::endl;break;default: std::cout <<"其他值"<< std::endl;break;}return0;}

五、循环结构

5.1 while循环

#include<iostream>intmain(){ std::cout <<"=== while循环示例 ==="<< std::endl;int count =1;while(count <=5){ std::cout <<"计数: "<< count << std::endl; count++;}return0;}

5.2 do-while循环

#include<iostream>intmain(){ std::cout <<"=== do-while循环示例 ==="<< std::endl;int count =1;do{ std::cout <<"计数: "<< count << std::endl; count++;}while(count <=5);return0;}

5.3 for循环

#include<iostream>intmain(){ std::cout <<"=== for循环示例 ==="<< std::endl;for(int i =1; i <=5; i++){ std::cout <<"计数: "<< i << std::endl;}return0;}

5.4 范围for循环(C++11及以后)

#include<iostream>#include<vector>intmain(){ std::cout <<"=== 范围for循环示例 ==="<< std::endl; std::vector<int> numbers ={1,2,3,4,5};for(int num : numbers){ std::cout <<"数字: "<< num << std::endl;}return0;}

5.5 嵌套循环

#include<iostream>intmain(){ 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;}return0;}

六、跳转语句

6.1 break语句

#include<iostream>intmain(){ 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;return0;}

6.2 continue语句

#include<iostream>intmain(){ 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;return0;}

6.3 return语句

#include<iostream>// 返回两个数中的最大值intfindMax(int a,int b){if(a > b){return a;}else{return b;}}intmain(){ std::cout <<"=== return语句示例 ==="<< std::endl;int x =10, y =20;int max =findMax(x, y); std::cout <<"最大值: "<< max << std::endl;return0;}

七、综合案例:实现一个简单的猜数字游戏

7.1 项目结构

GuessingGame/ ├── include/ │ └── Game.h ├── src/ │ ├── Game.cpp │ └── main.cpp └── build/ 

7.2 核心代码

// include/Game.h#ifndefGAME_H#defineGAME_H#include<random>#include<string>classGuessingGame{private:int target;int min;int max;int attempts; std::mt19937 rng;public:GuessingGame(int min =1,int max =100);voidstart();voidreset();boolguess(int number);intgetAttempts()const;intgetTarget()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<unsignedint>(seed));reset();}voidGuessingGame::reset(){ std::uniform_int_distribution<int>dist(min, max); target =dist(rng); attempts =0;}voidGuessingGame::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;}elseif(!this->guess(guess)){ std::cout <<getHint(guess)<< std::endl;}}while(guess != target);}boolGuessingGame::guess(int number){return number == target;}intGuessingGame::getAttempts()const{return attempts;}intGuessingGame::getTarget()const{return target;} std::string GuessingGame::getHint(int guess)const{int difference = std::abs(guess - target);if(difference <=5){return"非常接近!";}elseif(difference <=10){return"接近!";}elseif(difference <=20){return"比较远!";}else{return"非常远!";}}// src/main.cpp#include<iostream>#include<string>#include<Game.h>intmain(){ 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;return0;}

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++的函数式编程特性实现递归循环。