调整课次结构:前9节重新排序,新建第06课一维数组,后3节不变

This commit is contained in:
chengzi
2026-07-03 15:27:11 +08:00
parent 30f803784a
commit b973fb7825
29 changed files with 1301 additions and 13 deletions

View File

@@ -0,0 +1,171 @@
# 第9课数组计数法学生版
## 教学目标
- 理解“数值作下标、次数存数组”的计数思想
- 掌握数组计数的核心写法
- 能用计数数组完成频次统计、最高频查找和去重升序输出
- 知道数组计数法的适用条件和下标范围限制
## 核心考点:数值映射为下标的数组计数思想
### 考什么
统计整数的出现次数寻找最高频数字或完成________和有序输出。
### 必须理解
用数组下标 x 表示________`cnt[x]` 表示________。每读到一次 x就执行________。数组大小必须覆盖题目给出的全部________。
### 核心写法
```cpp
int cnt[________] = {};
for (int i = 0; i < n; i++) {
int x;
cin >> x;
____________________;
}
for (int i = 0; i <= 100; i++) {
if (____________________) cout << i;
}
```
### 常见错误
- 范围是0100时数组为什么要开101________________
- 计数数组为什么必须清零________________
- 负数能否直接作为数组下标________
### 判断是否掌握
- [ ] 我能根据数据范围确定数组大小。
- [ ] 我能解释下标与计数值分别代表什么。
- [ ] 我能用计数数组完成频次或去重任务。
---
## 课前认识:什么是数组计数法
如果输入的数字都在 `0~100` 之间,可以准备一个 `cnt[101]` 数组。
- 数字 `x` 对应数组下标________
- `cnt[x]` 保存________________
- 每读到一个数字 x执行________________
---
## 课堂编程题
### 课堂1成绩频次表【适中】
**题目描述:** 输入若干名学生的成绩,按分数从小到大输出每个出现过的分数及人数。
**输入格式:** 第一行输入学生人数;第二行输入每名学生的成绩。
**输出格式:** 每行输出一个出现过的分数和对应人数。
**数据范围:** 学生人数为 11000成绩为 0100。
**输入样例:**
```text
6
80 90 80 75 90 80
```
**输出样例:**
```text
75 1
80 3
90 2
```
**解题思路:** 分数可直接作为下标;每读到一个分数,对应计数加一,最后从 0 遍历到 100。
**易错提醒:** 允许分数 100所以数组至少需要 101 个位置。
---
### 课堂2最受欢迎的号码【适中】
**题目描述:** 输入若干个 150 的号码,输出出现次数最多的号码及次数;若并列,输出较小号码。
**输入格式:** 第一行输入号码总数;第二行输入所有号码。
**输出格式:** 输出最受欢迎的号码及其出现次数。
**数据范围:** 号码总数为 11000。
**输入样例:**
```text
7
8 3 8 5 3 8 3
```
**输出样例:**
```text
3 3
```
**解题思路:** 先计数,再从小到大打擂台;只有次数严格更多才更新,便能保留并列时较小号码。
**易错提醒:** 更新条件不能写大于等于,否则并列时会留下较大号码。
---
### 课堂3去重并升序输出【适中】
**题目描述:** 输入若干个 0100 的整数,去掉重复数字并升序输出,同时输出不同数字的个数。
**输入格式:** 第一行输入整数数量;第二行输入所有整数。
**输出格式:** 第一行输出不同数字的个数;第二行升序输出不同数字。
**数据范围:** 整数数量为 11000。
**输入样例:**
```text
8
4 2 4 1 2 9 1 5
```
**输出样例:**
```text
5
1 2 4 5 9
```
**解题思路:** 计数后从小到大遍历下标,次数大于 0 就输出一次并增加不同数字个数。
**易错提醒:** 下标从小到大遍历时,答案天然有序。
---
### 课堂4温度统计【适中】
**题目描述:** 输入若干个 -2050 的整数温度,输出每个出现过的温度及次数,并输出出现次数最多的温度;并列取较低温度。
**输入格式:** 第一行输入记录数量;第二行输入所有温度。
**输出格式:** 先按温度从低到高输出频次表,最后一行输出最高频温度。
**数据范围:** 记录数量为 11000。
**输入样例:**
```text
6
-2 0 -2 3 0 -2
```
**输出样例:**
```text
-2 3
0 2
3 1
BEST -2
```
**解题思路:** 温度加 20 后映射到 070输出和比较时再把下标减 20 还原。
**易错提醒:** 负数不能直接作为数组下标;映射和还原必须使用相同偏移量。
---
## 课后作业
> 请完成本课对应的课后作业,见编程题文件。