调整课次结构:前9节重新排序,新建第06课一维数组,后3节不变
This commit is contained in:
289
第01课-数据类型与分支结构/教案-学生版.md
Normal file
289
第01课-数据类型与分支结构/教案-学生版.md
Normal file
@@ -0,0 +1,289 @@
|
||||
# 第4课:数据类型、ASCII码与分支结构
|
||||
|
||||
## 教学目标
|
||||
- 掌握五种常用数据类型:int、char、double、bool、string
|
||||
- 理解 char 的 ASCII 码本质
|
||||
- 能用 ASCII 码判断和转换字符类型
|
||||
- 掌握 double 的格式化输出
|
||||
- 掌握输入输出、运算符、类型转换和多层分支
|
||||
- 认识 switch、三目运算和打擂台
|
||||
|
||||
## 核心考点:数据类型、类型转换与数据范围
|
||||
|
||||
### 考什么
|
||||
选择正确的________,判断表达式结果,完成字符与整数转换,并识别溢出或精度问题。
|
||||
|
||||
### 必须理解
|
||||
两个整数相除会进行________除法,小数部分会________。`char` 内部保存字符对应的________码。较大整数通常使用________。
|
||||
|
||||
### 核心写法
|
||||
```cpp
|
||||
double avg = ________ * sum / n;
|
||||
int d = c - ________;
|
||||
char c = d + ________;
|
||||
long long mul = ________ * a * b;
|
||||
```
|
||||
|
||||
### 常见错误
|
||||
- 为什么 `double avg = sum / n;` 仍可能丢失小数?________
|
||||
- 字符 `'5'` 和整数 `5` 是否相同?________________
|
||||
- 怎样避免 `a * b` 在赋值前已经溢出?________________
|
||||
|
||||
### 判断是否掌握
|
||||
- [ ] 我能根据范围选择数据类型。
|
||||
- [ ] 我能判断整数除法和类型转换结果。
|
||||
- [ ] 我能转换数字字符与整数。
|
||||
|
||||
---
|
||||
|
||||
## 一级、二级核心:运算、转换与分支
|
||||
|
||||
### 类型转换
|
||||
|
||||
```cpp
|
||||
double avg = ______ * sum / cnt;
|
||||
int num = (int)ch;
|
||||
char ch = (char)num;
|
||||
```
|
||||
|
||||
整数除法会不会保留小数:______。
|
||||
|
||||
### 多层分支
|
||||
|
||||
```cpp
|
||||
if (score >= 90) {
|
||||
cout << "A";
|
||||
} else if (score >= 80) {
|
||||
cout << "B";
|
||||
} else {
|
||||
cout << "C";
|
||||
}
|
||||
```
|
||||
|
||||
### `switch` 语句
|
||||
|
||||
```cpp
|
||||
switch (op) {
|
||||
case 1: cout << "加法"; ______;
|
||||
case 2: cout << "减法"; ______;
|
||||
default: cout << "无效选择";
|
||||
}
|
||||
```
|
||||
|
||||
### 三目运算
|
||||
|
||||
```cpp
|
||||
int ma = (a > b) ? ______ : ______;
|
||||
```
|
||||
|
||||
### 二次打擂台
|
||||
|
||||
先比较 ______,相同时再比较 ______。擂主应使用第一个合法候选值初始化。
|
||||
|
||||
## 课堂编程题
|
||||
|
||||
### 数据类型部分
|
||||
|
||||
#### 课堂1:超大长方体体积【适中】
|
||||
|
||||
**题目描述:** 输入长方体的长、宽、高,输出体积。三个量都能用 `int` 保存,但乘积可能超过 `int` 范围。
|
||||
|
||||
**输入格式:** 输入三个正整数,依次表示长、宽和高。
|
||||
|
||||
**输出格式:** 长方体体积。
|
||||
|
||||
**数据范围:** `1≤a,b,c≤10^6`,答案不超过 `10^18`。
|
||||
|
||||
**输入样例:**
|
||||
```text
|
||||
100000 100000 2
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
```text
|
||||
20000000000
|
||||
```
|
||||
|
||||
**解题思路:** 用 `1LL*a*b*c` 使第一次乘法就按 `long long` 计算。
|
||||
|
||||
**易错提醒:** 只把结果变量写成 `long long` 不够,右侧的乘法也必须提前转换。
|
||||
|
||||
#### 课堂2:比赛平均分【适中】
|
||||
|
||||
**题目描述:** 输入三名选手的总分和比赛场数,分别输出三人的平均分,保留两位小数;最后输出最高平均分。
|
||||
|
||||
**输入格式:** 依次输入三名选手的总分和比赛场数。
|
||||
|
||||
**输出格式:** 第一行三个平均分;第二行最高平均分,均保留两位小数。
|
||||
|
||||
**数据范围:** `1≤n≤100`,`0≤s1,s2,s3≤10000`。
|
||||
|
||||
**输入样例:**
|
||||
```text
|
||||
25 20 29 3
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
```text
|
||||
8.33 6.67 9.67
|
||||
9.67
|
||||
```
|
||||
|
||||
**解题思路:** 用 `1.0*s/n` 触发浮点除法,使用 `fixed` 和 `setprecision(2)`。
|
||||
|
||||
**易错提醒:** `double a=s1/n` 仍会先做整数除法,小数已经丢失。
|
||||
|
||||
#### 课堂3:字母变身与平移【适中】
|
||||
|
||||
**题目描述:** 输入一个英文字母和整数 `k`。先把字母转换为相反大小写,再在保持新大小写的前提下向后循环平移 `k` 位。
|
||||
|
||||
**输入格式:** 输入一个英文字母和向后平移的位数。
|
||||
|
||||
**输出格式:** 转换并平移后的字母。
|
||||
|
||||
**数据范围:** `0≤k≤10^9`。
|
||||
|
||||
**输入样例:**
|
||||
```text
|
||||
Y 3
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
```text
|
||||
b
|
||||
```
|
||||
|
||||
**解题思路:** 大小写互转可利用 ASCII 差值;平移只需使用 `k%26`,公式为 `(c-base+k)%26+base`。
|
||||
|
||||
**易错提醒:** 平移必须循环;不能直接输出 `c+k`,否则可能越过字母范围。
|
||||
|
||||
#### 课堂4:账号检查器【适中】
|
||||
|
||||
**题目描述:** 输入一个不含空格的字符串。若长度不少于 6,且同时含有大写字母、小写字母和数字,输出 `YES`,否则输出 `NO`。
|
||||
|
||||
**输入格式:** 一个字符串。
|
||||
|
||||
**输出格式:** `YES` 或 `NO`。
|
||||
|
||||
**数据范围:** 字符串长度不超过 100。
|
||||
|
||||
**输入样例:**
|
||||
```text
|
||||
Abc123
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
```text
|
||||
YES
|
||||
```
|
||||
|
||||
**解题思路:** 用三个 `bool` 变量记录是否出现三类字符,遍历 `string` 后综合判断。
|
||||
|
||||
**易错提醒:** `bool` 只记录真假;三个条件必须同时满足,应使用 `&&`。
|
||||
|
||||
### 分支结构部分
|
||||
|
||||
#### 课堂5:阶梯电费【适中】
|
||||
|
||||
**题目描述:** 某月用电量不超过 180 度的部分每度 0.50 元;181~280 度的部分每度 0.60 元;超过 280 度的部分每度 0.80 元。若总电费超过 200 元再加收 5% 服务费。输出应付金额。
|
||||
|
||||
**输入格式:** 输入一个非负整数,表示本月用电量。
|
||||
|
||||
**输出格式:** 应付金额,保留两位小数。
|
||||
|
||||
**数据范围:** `0≤n≤10000`。
|
||||
|
||||
**输入样例:**
|
||||
```text
|
||||
300
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
```text
|
||||
166.00
|
||||
```
|
||||
|
||||
**解题思路:** 用多层 `if-else if-else` 分段累计;计算完成后再独立判断是否加收服务费。
|
||||
|
||||
**易错提醒:** 阶梯收费是分段累计,不是把全部用电量直接乘最高档单价。
|
||||
|
||||
#### 课堂6:游乐园购票方案【适中】
|
||||
|
||||
**题目描述:** 输入年龄、身高和是否有成人陪同。身高低于 120 厘米免费;否则年龄不满 12 岁时,有成人陪同票价 30 元,无陪同不得入园;12~59 岁票价 80 元;60 岁及以上票价 40 元。周末所有非免费票加收 10 元。
|
||||
|
||||
**输入格式:** 依次输入年龄、身高、是否有成人陪同和是否为周末;后两项用 0 或 1 表示。
|
||||
|
||||
**输出格式:** 免费输出 `FREE`,不得入园输出 `DENIED`,否则输出票价。
|
||||
|
||||
**数据范围:** `1≤age≤120`,`50≤height≤220`。
|
||||
|
||||
**输入样例:**
|
||||
```text
|
||||
10 135 1 1
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
```text
|
||||
40
|
||||
```
|
||||
|
||||
**解题思路:** 先判断身高;不免费时再按年龄嵌套判断,儿童分支中继续判断陪同;最后对合法票价判断周末加价。
|
||||
|
||||
**易错提醒:** "不得入园"不是票价 0;输出后应立即结束,避免继续加价。
|
||||
|
||||
#### 课堂7:最佳选手【适中】
|
||||
|
||||
**题目描述:** 输入 `n` 名选手的分数,输出最高分和第一次取得该分数的选手编号。
|
||||
|
||||
**输入格式:** 第一行输入选手人数;第二行输入每名选手的分数。
|
||||
|
||||
**输出格式:** 最高分和选手编号(从 1 开始)。
|
||||
|
||||
**数据范围:** `1≤n≤100`,分数为 `0~100`。
|
||||
|
||||
**输入样例:**
|
||||
```text
|
||||
5
|
||||
88 95 90 95 70
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
```text
|
||||
95 2
|
||||
```
|
||||
|
||||
**解题思路:** 用第一名选手初始化擂主;只有出现严格更高分时才更新,便可保留最早编号。
|
||||
|
||||
**易错提醒:** 擂主必须用第一个合法数据初始化;相等时不更新才能保留第一次出现的位置。
|
||||
|
||||
#### 课堂8:最接近目标的候选人【适中】
|
||||
|
||||
**题目描述:** 输入目标分 `target` 以及 `n` 名候选人的编号和分数。选择与目标分距离最小者;距离相同时选分数较高者;仍相同则选编号较小者。
|
||||
|
||||
**输入格式:** 第一行输入候选人数和目标分;随后每行输入一名候选人的编号和分数。
|
||||
|
||||
**输出格式:** 入选者编号和分数。
|
||||
|
||||
**数据范围:** `1≤n≤100`,编号互不相同,分数为 `0~100`。
|
||||
|
||||
**输入样例:**
|
||||
```text
|
||||
4 80
|
||||
3 76
|
||||
8 84
|
||||
2 84
|
||||
5 90
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
```text
|
||||
2 84
|
||||
```
|
||||
|
||||
**解题思路:** 依次比较距离、分数、编号,三层优先级构成完整更新条件。
|
||||
|
||||
**易错提醒:** 三层规则按先后顺序连接,每个次级规则都只能在前级相等时生效。
|
||||
|
||||
## 课后作业
|
||||
|
||||
> 请完成本课对应的课后作业,见编程题文件。
|
||||
Reference in New Issue
Block a user