Initial commit: C++ courseware

This commit is contained in:
xiaolinquan committed 2026-11-05 22:51:02 +08:00
commit 4a4ee7c287
1789 files changed
+373489

No files matched your search

@@ -0,0 +1,35 @@
### **C++ 顺序结构综合练习 课后习题 - 答案**
#### **一、 填空题**
1. 思考解题逻辑
2. 第三个变量,`num1 = num2;`
3. 分钟
4. `diff / 60` , `diff % 60`
5. CE (Compile Error)
6. WA (Wrong Answer)
7. `cout`
#### **二、 单项选择题**
1. **D**. 这是错误的交换方法。`num1 = num2;` 后,`num1` 的值变为20。`num2 = num1;` 后,`num2` 的值也保持为20。
2. **C**. 样例不通过说明程序逻辑有问题,需要调试修正。
3. **B**. `小时数 * 60 + 分钟数` 是正确的换算逻辑。
4. **B**. 百分比要换算成小数,且结果可能为小数,应用 `double` 类型存储。
5. **C**. AC代表通过了所有测试,是最终的正确结果。
6. **C**. WA代表程序能运行但结果不对,这是逻辑或格式上的错误。CE才是语法错误。
7. **A**. `125 / 60` 整数除法得 `2`。`125 % 60` 取余数得 `5`。
8. **B**. 程序的价值在于处理不确定的、任意的合法输入,所以必须用 `cin`。
#### **三、 判断题**
1. √ (这是标准的三变量交换法。)
2. √ (讲义的核心思想之一,清晰的逻辑远比盲目试错重要。)
3. × (CE是编译错误,即语法错误。WA或TLE等才是逻辑算法错误。)
4. × (这种方法无法处理分钟不够减需要向小时借位的情况,统一单位是更简单可靠的方法。)
5. × (OJ系统会有更多、更复杂的测试数据,样例通过只是第一步。)
6. √ (对于评测系统来说,它只关心最终打印到屏幕上的字符序列是否完全匹配。)
7. √ (这是讲义中重点推荐的调试逻辑错误的方法。)
8. √ (因为 `* 0.2` 这类运算可能产生小数,用 `int` 会丢失精度。)
9. × (这行代码的作用是从键盘读取两个值,分别存入变量 `a` 和 `b`。)
10. √ (OJ是“死脑筋”的,格式必须完全一致。)
@@ -0,0 +1,78 @@
### **C++ 顺序结构设计综合练习 课后习题**
姓名: \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
#### **一、 填空题**
1. 编程解题的“七步法”强调,在动手将思路翻译成代码之前,更重要的是先\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。
2. 为了交换变量 `num1` 和 `num2` 的值,我们需要借助_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。如果第一步是 `temp = num1;`,第三步是 `num2 = temp;`,那么中间的第二步应该是\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。
3. 在解决“小鱼的游泳时间”问题时,为了简化计算,我们采用“统一单位”的方法,将“时”和“分”都统一成最小单位\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。
4. 在解决“小鱼的游泳时间”问题时,在计算完毕小鱼从开始到结束的游泳时间 `diff` 分钟后,还需要将 `diff` 分钟的形式换算回小时和分钟,那么计算小鱼这天一共游的小时数的表达式为\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_;那么计算小鱼这天一共游的分钟数的表达式为\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_。
5. 如果在代码中漏写了分号或使用了中文标点,提交到OJ系统最可能收到的反馈是\_\_\_\_\_\_\_\_\_\_ (填写简称 CE/WA/AC)。
6. 如果程序的逻辑有漏洞,例如错把 `a > b` 写成了 `a < b`,导致计算结果错误,提交后最可能收到的反馈是\_\_\_\_\_\_\_\_\_\_\_\_\_\_ (填写简称CE/WA/AC)。
7. 当程序运行结果与预期不符时,可以在代码的关键位置加入临时的\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_语句来打印出中间变量的值,这种方法被称为“手动检查法”。
#### **二、 单项选择题**
( &nbsp; ) 1. 阅读以下代码,其最终输出是什么?
```cpp
int num1 = 10, num2 = 20;
num1 = num2;
num2 = num1;
cout << num1 << " " << num2;
```
​ A. 10 20 &emsp; B. 20 10 &emsp; C. 10 10 &emsp; D. 20 20
( &nbsp; ) 2. 根据编程解题“七步法”,当发现样例测试结果与预期不一致时,我们应该进入哪个环节?
A. 重新读题,理解要求
B. 检查输出格式
C. 使用“手动cout检查法”等手段,修复逻辑错误
D. 优化代码,提高运行速度
( &nbsp; ) 3. 对于“小鱼的游泳时间”问题,如果输入的开始时间是 `a` 时 `b` 分,那么将开始时间统一进制转换成分钟数的正确表达式是?
A. `a + b * 60` &emsp; B. `a * 60 + b` &emsp; C. `a * 60 + b * 60` &emsp; D. `(a + b) * 60`
( &nbsp; ) 4. 在“成绩计算”问题中,总成绩 `score = 作业(A)*20% + 小测(B)*30% + 期末(C)*50%`。以下哪段计算代码是正确的?
A. `int score = A * 20 + B * 30 + C * 50;`
B. `double score = A * 0.2 + B * 0.3 + C * 0.5;`
C. `int score = A * 0.2 + B * 0.3 + C * 0.5;`
D. `double score = A / 5 + B / 3 + C / 2;`
( &nbsp; ) 5. 在线评测系统(OJ)返回“Accepted (AC)”,这意味着什么?
A. 代码可以成功编译。
B. 代码通过了样例测试数据。
C. 代码通过了所有的测试数据,程序是完全正确的。
D. 代码的格式非常规范。
( &nbsp; ) 6. 某同学在提交代码后得到了“Wrong Answer (WA)”的反馈,有可能的原因是?
A. 代码中漏掉了一个分号`;`。
B. 变量名拼写错误。
C. 解题的逻辑思路存在问题,或者输出格式与要求不符。
D. 使用的变量太多,占用了过多内存。
( &nbsp; ) 7. 假设变量 `total_minutes` 的值为 `125`,执行以下代码后,输出是什么?
```cpp
int h = total_minutes / 60;
int m = total_minutes % 60;
cout << h << " " << m;
```
​ A. 2 5 &emsp; B. 2.08 5 &emsp; C. 2 15 &emsp; D. 2 25
( &nbsp; ) 8. “七步法”中“理解输入”这一步,下列说法正确的是什么?
A. 必须在代码中把变量赋值为样例输入的值,如 `int a = 12;`
B. 必须使用 `cin` 来从键盘获取不确定的输入值。
C. 必须给变量起一个和题目描述中一模一样的名字。
D. 必须一次性把所有需要的变量都在程序开头定义好。
#### **三、 判断题 (对的打“√”,错的打“×”)**
( &nbsp; ) 1. 交换两个变量 `a` 和 `b` 的值,代码 `int temp = a; a = b; b = temp;` 是正确的。
( &nbsp; ) 2. 在编程时,应该先思考好清晰的逻辑,再动手写代码,这样比直接埋头试错更高效。
( &nbsp; ) 3. 如果OJ返回 `Compile Error (CE)`,说明是程序的逻辑算法错了。
( &nbsp; ) 4. 在“小鱼的游泳时间”问题中,可以直接用结束的分钟减开始的分钟,小时减小时,不需要统一单位。
( &nbsp; ) 5. 一个程序在自己的电脑上用了一个样例测试通过了,那么提交到OJ就一定能获得 `AC`。
( &nbsp; ) 6. `cout << 6 << " " << 20;` 和 `cout << "6 20";` 对于OJ评测系统来说,输出结果是完全一样的。
( &nbsp; ) 7. “手动cout检查法”是定位逻辑错误的有效手段。
( &nbsp; ) 8. 在“成绩计算”问题中,因为成绩有小数,所以存储总分的变量最好声明为 `double` 类型。
( &nbsp; ) 9. `cin >> a >> b;` 这行代码的作用是,把 `a` 的值赋给 `b`。
( &nbsp; ) 10. OJ评测系统对输出格式要求极高,多一个或少一个空格都可能导致 `WA`。