- juxq 的博客
流程控制之顺序结构教学讲义
- @ 2026-4-4 10:45:54
流程控制之顺序结构教学讲义
1. 顺序结构简介
1.1 顺序结构定义
顺序结构(Sequential Structure):程序按照代码书写的先后顺序,自上而下逐条执行,每条语句执行完毕后自动进入下一条语句,直到程序结束。
这是程序设计的默认控制结构,也是最自然、最基础的程序执行方式。我们编写的绝大多数代码行都属于顺序结构。
图示:顺序执行流程
┌──────────────┐
│ 语句 1 │
└──────┬───────┘
│ (自动)
▼
┌──────────────┐
│ 语句 2 │
└──────┬───────┘
│
▼
┌──────────────┐
│ 语句 3 │
└──────┬───────┘
│
▼
......
1.2 算法意义
顺序结构体现了算法的有穷性和确定性:每一步操作都有明确的顺序,计算机严格按照这个顺序执行。在解决实际问题时,我们往往需要将解题步骤拆解为一系列先后完成的动作,这正是顺序结构的用武之地。
核心思想:任何复杂算法都可以分解为“先做什么、再做什么、最后做什么”的顺序步骤。
2. 顺序结构的基本要素
在 C++ 中,顺序结构由以下基本语句组成:
| 语句类型 | 示例 | 作用 |
|---|---|---|
| 定义语句 | int a, b; |
声明/定义变量 |
| 赋值语句 | a = 5; |
给变量赋值 |
| 输入语句 | cin >> a; |
从键盘读取数据 |
| 输出语句 | cout << a; |
向屏幕输出数据 |
| 运算表达式语句 | sum = a + b; |
计算并存储结果 |
| 函数调用语句 | swap(x, y); |
调用已有功能 |
这些语句按照书写顺序依次执行,构成了程序的主体。
3. 典型代码模型
3.1 基本顺序模型
#include <bits/stdc++.h>
using namespace std;
int main() {
// 步骤1:定义变量
int a, b, sum;
// 步骤2:输入数据
cin >> a >> b;
// 步骤3:处理数据
sum = a + b;
// 步骤4:输出结果
cout << sum << endl;
return 0;
}
上述代码演示了“输入 → 处理 → 输出”这一最常见的顺序结构模式。
3.2 变量交换(经典案例)
问题:交换两个变量
a和b的值。例如,交换前a=3, b=5,交换后a=5, b=3。
方法一:临时变量法(理解本质)
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 3, b = 5;
int temp; // 临时变量
// 顺序交换三步
temp = a; // 1. 将 a 的值暂存到 temp
a = b; // 2. 将 b 的值赋给 a
b = temp; // 3. 将 temp 中原来的 a 值赋给 b
cout << a << " " << b << endl; // 输出 5 3
return 0;
}
图示:变量交换过程
初始: a=3, b=5, temp=?
步骤1: temp = a; → temp=3, a=3, b=5
步骤2: a = b; → a=5, b=5, temp=3
步骤3: b = temp; → a=5, b=3, temp=3
结果: a=5, b=3
方法二:使用 swap() 函数
C++ 标准库提供了 swap() 函数,可直接交换两个变量的值。
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 3, b = 5;
swap(a, b); // 交换 a 和 b
cout << a << " " << b << endl; // 输出 5 3
return 0;
}
注意:
swap()函数内部也是通过临时变量或位运算实现的,但作为库函数,它使代码更简洁。
4. 课堂例题
例题1:计算圆的周长和面积
题目描述
输入圆的半径
r(浮点数),输出圆的周长和面积,结果保留两位小数。圆周率取 3.14159。公式:周长 = 2 × π × r,面积 = π × r²。
输入:一行一个浮点数
r。 输出:两行,第一行为周长,第二行为面积,均保留两位小数。
思路解析
本题属于典型的顺序结构应用。解题步骤非常清晰:
- 定义变量存储半径、周长、面积。
- 从键盘读入半径。
- 根据公式计算周长和面积(注意使用浮点类型)。
- 按格式输出结果。
重点:浮点数运算、格式化输出。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
const double PI = 3.14159; // 定义圆周率常量
double r; // 半径
double circumference, area; // 周长、面积
// 1. 输入
cin >> r;
// 2. 计算
circumference = 2 * PI * r;
area = PI * r * r;
// 3. 输出(保留两位小数)
cout << fixed << setprecision(2);
cout << circumference << endl;
cout << area << endl;
return 0;
}
例题2:三位数各位数字之和
题目描述
输入一个三位正整数
n(100 ≤ n ≤ 999),求其各位数字之和。输入:一行一个整数
n。 输出:一个整数,表示各位数字之和。
思路解析
此题需要将一个三位数的百位、十位、个位分别提取出来,然后相加。提取方法:
- 个位:
n % 10 - 十位:
n / 10 % 10 - 百位:
n / 100
这些操作通过整数除法和取模实现,属于顺序结构中的运算步骤。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
// 提取各位数字
int ge = n % 10; // 个位
int shi = n / 10 % 10; // 十位
int bai = n / 100; // 百位
// 计算和
int sum = ge + shi + bai;
// 输出
cout << sum << endl;
return 0;
}
例题3:温度转换
题目描述
输入华氏温度
f,将其转换为摄氏温度c,公式为:c = 5 × (f - 32) / 9。结果保留两位小数。输入:一行一个浮点数
f。 输出:一行一个浮点数,表示摄氏温度。
思路解析
本题直接套用公式计算即可,但需要注意运算顺序:先计算 f - 32,再乘以 5,最后除以 9。由于乘除优先级相同且从左到右结合,不加括号也能正确计算,但为了清晰,可以加括号。另外,使用浮点数避免整数除法截断。
代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
double f, c;
cin >> f;
// 按照公式计算
c = 5 * (f - 32) / 9;
cout << fixed << setprecision(2) << c << endl;
return 0;
}
5. 常见错误与注意事项
-
变量未初始化:使用变量前必须赋予确定的值(输入或赋值)。
int sum; // 未初始化 sum = sum + a; // 错误!sum 是垃圾值 -
整数除法截断:两个整数相除会舍弃小数部分。
int a = 5, b = 2; double c = a / b; // c = 2.0,不是 2.5 // 应改为:double c = 1.0 * a / b; -
语句顺序错误:交换变量时若顺序写错,会导致数据丢失。
// 错误示例 a = b; b = a; // 此时 a 已经是 b 的值,b 无法获得原 a 的值 -
输入/输出格式不匹配:
cin和cout自动识别类型,但scanf/printf需严格匹配格式符。
6. 顺序结构的局限与扩展
顺序结构虽然简单,但只能解决“直线型”问题。当程序需要根据不同情况执行不同代码时(如判断成绩是否及格),就需要引入分支结构;当需要重复执行某段代码时(如计算 1+2+...+100),就需要引入循环结构。
顺序结构是后两者的基础,任何分支和循环内部都是由顺序语句组成的。
7. 课后练习
- P1000 超级玛丽游戏(洛谷) —— 纯输出,练习顺序输出语句。
- P5703 【深基2.例5】苹果采购 —— 输入两个整数,输出乘积。
- P5704 【深基2.例6】字母转换 —— 输入小写字母,输出大写字母(利用 ASCII 码运算)。
- P5705 【深基2.例7】数字反转 —— 输入一个三位数,反转后输出(提示:使用取模和除法)。
- P5706 【深基2.例8】再分肥宅水 —— 计算平均分,浮点数输出。
8. 总结
| 知识点 | 要点 |
|---|---|
| 顺序结构定义 | 程序按书写顺序逐条执行 |
| 核心操作 | 输入、赋值、运算、输出 |
| 典型应用 | 数据交换、简单计算、单位换算、数字分解 |
| 时间复杂度 | 所有语句依次执行一次,总时间与语句数量成正比(O(1)) |
| 注意事项 | 变量初始化、整数除法、语句顺序、格式化输出 |
教练寄语:顺序结构看似简单,却是构建复杂算法的基石。务必熟练掌握变量、输入输出、基本运算,做到“不假思索”地写出正确的顺序代码。当你能够流畅地将一个自然语言描述的步骤转化为 C++ 语句时,你就迈出了信息学竞赛的第一步。
参考资料
- 【书籍】《信息学奥赛一本通》第1章:顺序结构程序设计
- 【书籍】《C++ Primer Plus》第2章:开始学习 C++
- 【在线资源】洛谷 - 顺序结构题目集