159 lines
3.4 KiB
Markdown
159 lines
3.4 KiB
Markdown
# 第6课:一维数组
|
||
|
||
## 教学目标
|
||
- 掌握一维数组的定义、初始化和访问
|
||
- 能使用数组进行遍历、查找、统计等基本操作
|
||
- 理解数组逆序和冒泡排序的原理
|
||
|
||
## 核心考点:数组下标、遍历与越界
|
||
|
||
### 考什么
|
||
使用数组完成读入、统计、查找和排序,并判断每个元素对应的________。
|
||
|
||
### 必须理解
|
||
长度为 n 的数组,合法下标从________到________。`arr[i]` 表示第________个元素。访问 `arr[n]` 会发生________。
|
||
|
||
### 核心写法
|
||
```cpp
|
||
for (int i = ________; i < ________; i++) cin >> arr[i];
|
||
|
||
int maximum = ________;
|
||
for (int i = ________; i < n; i++) {
|
||
if (arr[i] > maximum) ____________________;
|
||
}
|
||
```
|
||
|
||
### 常见错误
|
||
- `i <= n` 为什么会越界?________________
|
||
- 全是负数时,最大值能否初始化为0?________________
|
||
- "第5个元素"的下标是多少?________
|
||
|
||
### 判断是否掌握
|
||
- [ ] 我能说出数组的首尾合法下标。
|
||
- [ ] 我能写出无越界的遍历循环。
|
||
- [ ] 我能用数组完成查找和打擂台。
|
||
|
||
---
|
||
|
||
## 题目一:数组入门 — 求最大值与平均值
|
||
|
||
### 核心代码(一句话)
|
||
> 数组遍历的核心:**`______`**,下标从 ______ 开始,到 ______ 结束;打擂台求最值,先请 ______ 当擂主。
|
||
|
||
### 自然语言思路
|
||
|
||
|
||
|
||
### 伪代码
|
||
```
|
||
1. 输入 n
|
||
2. 定义数组 ______
|
||
3. for i = 0 到 ______:
|
||
4. 输入 ______ // 读入数组
|
||
5. maxVal = ______ // 擂主
|
||
6. sum = ______
|
||
7. for i = ______ 到 ______:
|
||
8. if arr[i] ______ maxVal: // 打擂
|
||
9. maxVal = ______
|
||
10. sum += ______ // 累加
|
||
11. avg = ________________ // 整数转浮点数
|
||
12. 输出 maxVal 和 avg
|
||
```
|
||
|
||
### 真实代码
|
||
```cpp
|
||
|
||
```
|
||
|
||
### 注意点
|
||
|
||
|
||
|
||
---
|
||
|
||
## 题目二:查找元素 — 找目标值
|
||
|
||
### 核心代码(一句话)
|
||
> 查找的核心:**遍历 + 比较 + ______**,找到了就记录位置并退出,用一个 ______ 表示"没找到"。
|
||
|
||
### 自然语言思路
|
||
|
||
|
||
|
||
### 伪代码
|
||
```
|
||
1. 输入 n, 数组 arr, target
|
||
2. index = ______ // 哨兵:默认没找到
|
||
3. for i = 0 到 ______:
|
||
4. if arr[i] ______ target:
|
||
5. index = ______
|
||
6. ______ // 找到就停
|
||
7. if index ______ -1:
|
||
8. 输出 "找到,下标:" + index
|
||
9. else:
|
||
10. 输出 "未找到"
|
||
```
|
||
|
||
### 真实代码
|
||
```cpp
|
||
|
||
```
|
||
|
||
### 注意点
|
||
|
||
|
||
|
||
---
|
||
|
||
## 题目三:数组逆序与冒泡排序
|
||
|
||
### 核心代码(一句话)
|
||
> 逆序的核心:**首尾交换,只换 ______**;冒泡排序的核心:**相邻两两比较,______**,每轮确定一个最大值的位置。
|
||
|
||
### 自然语言思路
|
||
|
||
|
||
|
||
### 伪代码
|
||
|
||
**数组逆序**:
|
||
```
|
||
1. for i = 0 到 ______:
|
||
2. temp = ______
|
||
3. arr[i] = ______
|
||
4. arr[______] = temp
|
||
```
|
||
|
||
**冒泡排序**:
|
||
```
|
||
1. for i = 0 到 ______: // 外层:第 i 轮
|
||
2. for j = 0 到 ______: // 内层:相邻比较
|
||
3. if arr[j] ______ arr[j+1]:// 前面大就交换
|
||
4. temp = ______
|
||
5. arr[j] = ______
|
||
6. arr[j+1] = ______
|
||
```
|
||
|
||
### 真实代码
|
||
```cpp
|
||
|
||
```
|
||
|
||
### 注意点
|
||
|
||
|
||
|
||
---
|
||
|
||
## 本课打油诗
|
||
|
||
>
|
||
|
||
---
|
||
|
||
## 课后作业
|
||
1. 输入 n 个数,求第二大值(注意可能有重复最大值)
|
||
2. 输入 n 个数,将它们逆序存储后输出(不能用第二个数组)
|
||
3. 输入 n 个数,统计其中不同数字的个数
|
||
4. 输入 n 个数,使用冒泡排序从小到大排序后输出
|