Appearance
✅09. 设计一个程序
我们已经学习了一些语法,也设计了一些简单的程序,这节课我们总结一下一些程序的基本要素,然后更加明确的学习如何设计一个程序。
这节课我们需要掌握3种循环结构的写法,以及循环输入和循环输出。
1. 三大流程结构
C++ 里最基本的三种控制结构,叫做三大基本流程控制结构,也是初学者应该掌握的流程:
顺序执行
分支(选择) ——
if、switch等循环 ——
for、while、do...while等
1.1 顺序执行
程序从上到下,一行一行按顺序执行,不跳过、不重复、不分支。
一个顺序结构的程序例子:
cpp
#include <iostream>
using namespace std;
int main() {
cout << "开始程序" << endl;
cout << "计算 3 + 5" << endl;
int result = 3 + 5;
cout << "结果是: " << result << endl;
cout << "程序结束" << endl;
return 0;
}输出:
开始程序
计算 3 + 5
结果是: 8
程序结束NOTE
这就是最基础的程序执行流程:顺序执行。每一行代码依次执行,直到结束。
1.2 分支(选择)
根据不同的条件,选择执行不同的代码。
一个 if分支语句的程序:
cpp
#include <iostream>
using namespace std;
int main() {
int score;
cout << "请输入你的分数:";
cin >> score;
if (score >= 60) {
cout << "及格了!" << endl;
} else {
cout << "不及格。" << endl;
}
return 0;
}输入:
70输出:
及格了!- 一个
switch分支语句的程序:
cpp
#include <iostream>
using namespace std;
int main() {
int day;
cout << "请输入今天是星期几(1-7):";
cin >> day;
switch (day) {
case 1:
cout << "今天是星期一" << endl;
break;
case 2:
cout << "今天是星期二" << endl;
break;
case 3:
cout << "今天是星期三" << endl;
break;
case 4:
cout << "今天是星期四" << endl;
break;
case 5:
cout << "今天是星期五" << endl;
break;
case 6:
cout << "今天是星期六" << endl;
break;
case 7:
cout << "今天是星期日" << endl;
break;
default:
cout << "输入有误" << endl;
}
return 0;
}TIP
switch 适合多个固定的选项,记得加上 break,否则会一直往下执行。
1.3 循环
重复执行一段代码,直到满足退出条件。
for 循环 —— 知道要重复多少次:
cpp
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) {
cout << "第 " << i << " 次循环" << endl;
}
return 0;
}输出:
第 1 次循环
第 2 次循环
第 3 次循环
第 4 次循环
第 5 次循环while循环 —— 不确定要执行的次数
cpp
#include <iostream>
using namespace std;
int main() {
int count = 1;
while (count <= 5) {
cout << "第 " << count << " 次循环" << endl;
count++;
}
return 0;
}do...while 循环 —— 先执行一次再说
cpp
#include <iostream>
using namespace std;
int main() {
int count = 1;
do {
cout << "第 " << count << " 次循环" << endl;
count++;
} while (count <= 5);
return 0;
}NOTE
do...while 保证至少执行一次。
1.4 三种循环的对比
| 结构 | 用途 | 是否先判断 |
|---|---|---|
for | 一般用于确定循环次数的程序 | 是 |
while | 一般用于不确定循环次数的程序 | 是 |
do...while | 先执行一次,再判断 | 否 |
2. IPO 模型详解
输入-处理-输出模型(Input - Processing - Output)是一种非常常见的程序结构,指的是一个程序由输入,数据处理,输出三个结构组成。计算器就是典型的例子,我们通过输入数据和计算符号,计算器通过处理后,给我们输出结果。
2.1 输入模块(Input)
输入:让程序从外部获取数据。常见输入来自于键盘、文件、传感器等。 在初学阶段,主要用 cin 从键盘输入。
2.1.1 单一输入
使用 cin 输入一个数值:
cpp
#include <iostream>
using namespace std;
int main() {
int number;
cin >> number;
return 0;
}NOTE
cin >> 变量名 可以把用户输入的值存入变量里。
2.1.2 循环输入
当需要多次输入时,可以配合循环使用,这也是初学者需要掌握的常用输入。
一个让用户输入 5 次数据的程序:
cpp
#include <iostream>
using namespace std;
int main() {
int num[5];
for (int i = 0; i < 5; i++) {
cin >> num[i];
}
return 0;
}TIP
一般我们使用数组来存放输入的多个数据,一是可以让程序精简,二是可以通过下标的方式管理它们。
上个程序我们使用了 for循环来输入一个确定循环次数的程序,接下来用while设计一个不确定输入次数的循环程序:
cpp
#include <iostream>
using namespace std;
int main() {
int num;
cout << "请输入数字(输入 0 结束):";
cin >> num;
while (num != 0) {
cout << "你输入的是:" << num << endl;
cout << "继续输入(输入 0 结束):";
cin >> num;
}
return 0;
}思考:这里可以使用数组来存储变量吗?可能遇到哪些问题,如何规避这些问题呢?
2.2 处理模块(Processing)
处理:让程序根据输入的数据进行计算、判断、排序、查找等操作。
一个简单的处理数据的程序:
cpp
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << "请输入两个整数:";
cin >> a >> b;
int sum = a + b;
int diff = a - b;
cout << "和为:" << sum << endl;
cout << "差为:" << diff << endl;
return 0;
}NOTE
处理部分的内容以后会学得越来越丰富,比如数组、函数、算法等。
2.3 输出模块(Output)
输出:把计算结果显示给用户或保存起来。
在初学阶段,主要用 cout 输出到屏幕。
2.3.1 单一的输出
cpp
#include <iostream>
using namespace std;
int main() {
int result = 10;
cout << "计算结果是:" << result << endl;
return 0;
}2.3.2 循环输出(批量输出)
一个输出1到5的例子:
cpp
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) {
cout << "当前数字:" << i << endl;
}
return 0;
}一个输出数组中的所有元素的例子:
cpp
#include <iostream>
using namespace std;
int main() {
int arr[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
cout << "第 " << i + 1 << " 个元素:" << arr[i] << endl;
}
return 0;
}