Files
project1/第01课-数据类型与分支结构/教案-教师版.md

7.4 KiB
Raw Blame History

第4课数据类型、ASCII码与分支结构

教学目标

  • 掌握五种常用数据类型int、char、double、bool、string
  • 理解 char 的 ASCII 码本质
  • 能用 ASCII 码判断和转换字符类型
  • 掌握 double 的格式化输出
  • 掌握输入输出、算术/关系/逻辑运算与类型转换
  • 掌握 if、else if、else、switch 和三目运算
  • 掌握普通打擂台与带并列规则的二次打擂台

核心考点:数据类型、类型转换与数据范围

考什么

考试会要求判断变量应使用哪种类型、计算表达式结果、完成字符与整数转换,或分析整数溢出和小数精度。真正的重点是:数据以什么形式存储,会直接影响运算结果。

必须理解

int 存整数,范围有限;较大的整数应使用 long longdouble 存小数,但可能存在微小精度误差。char 表面是字符,内部保存对应的 ASCII 整数,因此 '7' - '0' 得到整数 7。两个整数相除仍做整数除法小数部分会被截掉只要一边先转成 double,才会保留小数。赋值或运算时发生类型转换,可能扩大范围,也可能丢失信息。

核心写法

double average = 1.0 * sum / n; // 先变成浮点运算
int digit = c - '0';            // 数字字符转整数
char c = digit + '0';           // 0~9 转数字字符
long long product = 1LL * a * b;

1.0 触发浮点运算,1LL 让乘法从一开始就在 long long 范围内进行。

常见错误

  • double average = sum / n; 中右边先做整数除法,赋给 double 时小数已经丢失。
  • 把字符 '5' 当成整数 5它们的存储值不同。
  • 结果变量使用 long long,但 a * b 已先按 int 溢出。
  • == 直接比较复杂浮点计算结果,忽略精度误差。

判断是否掌握

能根据数据范围选择 intlong longdouble,能手算整数除法与类型转换结果,并能完成数字字符和整数之间的转换。


一级、二级核心:运算、转换与分支

输入输出与运算符

一级要求熟练使用 cincout,掌握算术、关系和逻辑运算:

int a, b;
cin >> a >> b;
cout << a + b << endl;

bool valid = (a >= 0 && a <= 100);

整数除法会丢弃小数部分;需要小数时,应让至少一个运算数先转成 double

隐式转换与强制转换

double average = 1.0 * sum / count;  // 隐式转换为 double
int code = (int)letter;              // 强制转换为 int
char letter = (char)code;            // 强制转换为 char

类型范围变大通常较安全;从浮点数转成整数会丢弃小数部分。

多层分支

if (score >= 90) {
    cout << "A";
} else if (score >= 80) {
    cout << "B";
} else if (score >= 60) {
    cout << "C";
} else {
    cout << "D";
}

多个条件互斥时使用 else if,避免多个独立 if 重复执行。

switch 语句

switch (choice) {
    case 1: cout << "加法"; break;
    case 2: cout << "减法"; break;
    default: cout << "无效选择";
}

switch 适合根据一个整数或字符的不同取值进行分支。每个 case 后通常需要 break,否则会继续执行后面的分支。

三目运算

int bigger = (a > b) ? a : b;

三目运算适合简单的二选一,不适合代替复杂的多层分支。

打擂台与二次规则

寻找最接近目标值的数时,先比较距离;距离相同再比较数值:

if (abs(x - target) < abs(best - target) ||
    (abs(x - target) == abs(best - target) && x < best)) {
    best = x;
}

擂主必须用第一个合法候选值初始化,不能随意设为 0。

题目一判断字符类型并输出ASCII码

核心代码(一句话)

字符类型判断的核心:char 本质是整数ASCII码可以在字符范围和整数之间自由比较和转换。

自然语言思路

键盘上敲的每个字符,在计算机里都存成了一个整数——这就是 ASCII 码

记住三个关键 ASCII 码:

  • '0' = 48'1'~'9' 依次递增
  • 'A' = 65'B'~'Z' 依次递增
  • 'a' = 97'b'~'z' 依次递增

所以判断一个字符是什么类型,有两种方法:

方法一(看 ASCII 码范围)

  • 如果 c'A' ~ 'Z' 之间(即 65~90→ 大写字母
  • 如果 c'a' ~ 'z' 之间(即 97~122→ 小写字母
  • 如果 c'0' ~ '9' 之间(即 48~57→ 数字
  • 否则 → 其他字符

方法二用第1课学的自带函数

  • isupper(c) → 大写字母
  • islower(c) → 小写字母
  • isdigit(c) → 数字

最后,int(c)(int)c 直接输出字符对应的 ASCII 码值。

伪代码

输入字符 ch

如果 ch 在 'A' ~ 'Z' 之间:
    输出 "大写字母"
否则如果 ch 在 'a' ~ 'z' 之间:
    输出 "小写字母"
否则如果 ch 在 '0' ~ '9' 之间:
    输出 "数字"
否则:
    输出 "其他字符"

输出 "ASCII码 = " + int(ch)

真实代码

#include <iostream>
#include <cctype>       // isupper、islower、isdigit
using namespace std;

int main() {
    char ch;
    cin >> ch;

    // 方法一ASCII 码范围判断
    if (ch >= 'A' && ch <= 'Z') {
        cout << "大写字母" << endl;
    } else if (ch >= 'a' && ch <= 'z') {
        cout << "小写字母" << endl;
    } else if (ch >= '0' && ch <= '9') {
        cout << "数字" << endl;
    } else {
        cout << "其他字符" << endl;
    }

    // 输出 ASCII 码值
    cout << "ASCII码 = " << (int)ch << endl;

    return 0;
}

方法二(用自带函数,更简洁)

if (isupper(ch)) {
    cout << "大写字母" << endl;
} else if (islower(ch)) {
    cout << "小写字母" << endl;
} else if (isdigit(ch)) {
    cout << "数字" << endl;
} else {
    cout << "其他字符" << endl;
}

注意点

  1. char 能直接比大小ch >= 'A' 就是在比较 ASCII 码值,不需要先转成 int。
  2. 字符写单引号'A' 不是 "A",单引号是 char双引号是字符串。
  3. ASCII 码值记忆技巧'0'=48'A'=65'a'=97。小写字母 = 大写字母 + 32。
  4. 大小写互转:大写转小写 ch + 32,小写转大写 ch - 32。或者用 tolower(ch) / toupper(ch)(返回 int需要转回 char
  5. 不要混用 string 和 charstring 是字符串(双引号),char 是单个字符(单引号),两者不同。

题目二:(待橙子补充)

建议覆盖double 格式化输出、int vs long long 范围等


核心代码(一句话)

自然语言思路

伪代码

真实代码


注意点


题目三:(待橙子补充)

建议覆盖bool 类型、string 基本操作等


核心代码(一句话)

自然语言思路

伪代码

真实代码


注意点


本课打油诗

int 存整数范围广char 单字符本质藏。 double 小数保精度bool 对错分两旁。 string 处理字符串,五种类型记心上。


ASCII 码速查表(常用)

字符 ASCII 码
'0' ~ '9' 48 ~ 57
'A' ~ 'Z' 65 ~ 90
'a' ~ 'z' 97 ~ 122
空格 ' ' 32

记忆口诀:4A = 65,不是"4个A",是"数字4开头A是65"。小写比大写多32。


课后作业

(待补充) 1. 2.