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,82 @@
# C++ 输入 (`cin`) 讲义
## 一、 程序只能算固定数据吗?
我们之前写的代码,所有的数字都是直接写在程序里的,比如 `int a = 5; int b = 3;`。这种写法把**数据写死**了。
大家思考一下,如果用户明天想算 `100 + 200` 怎么办?难道每次都要让程序员打开代码,改完数字再重新算一次吗?这显然是不现实的!
一个真正有价值的程序,应该是**智能的**——它能够随时接收用户提供的新数据,并自动计算出结果。今天,我们就要学习如何让程序接收用户提供的数据。
## 二、 认识 `cin`:控制台的数据接收员
为了让程序接收用户的键盘输入,C++ 提供了一个强大的工具:**`cin`**。
* **含义**:**`cin`** 是 Console Input(控制台输入)的缩写, c 对应着 Console, in 对应着 input。
* **作用**:**让用户在黑框框里==用键盘==输入数据**,然后程序会自动把这个数据==存入==我们提前准备好的==变量==中。
* **`cin` 使用 >> 运算符跟上准备好的变量来接收用户输入**。
### 1. `cin` 的运作过程
我们来看看 `cin` 是如何与我们之前学习的变量配合的:
```cpp
int num;
cin >> num;
cout << num;
```
1. **`int num;`** $\rightarrow$ 程序向内存申请了一个整数类型的空柜子,并在外面贴上名字标签 `num`。
2. **`cin >> num;`** $\rightarrow$ 程序==暂停运行==,等待用户操作。用户在键盘上敲下数字 `7` 并按下回车。**`>>`(称为提取符)**就像传送带一样,把键盘上的 `7` 抓过来,放进了名为 `num` 的抽屉里。
3. **`cout << num;`** $\rightarrow$ 获取名为 `num` 抽屉里的数据,并将其展示在屏幕上(输出 7)。
### 2. 语法与规则
输入单个数据:
**==语法格式==:** `cin >> 变量名;`
如果你想一次性让用户输入多个数据,那就需要准备多个变量,然后把传送带连起来用:
**==语法格式==:** `cin >> 变量名 >> 变量名 >> 变量名;` (可以通过 `>> 变量名` 的格式继续扩展)
```cpp
int a, b, c;
cin >> a; // 接收用户输入的一个整数到变量 a 中
cin >> b >> c; // 依次接收用户输入的两个整数到变量 b, c 中
```
> **输入规则:**
> 当使用 `cin >> a >> b;` 时,用户在黑框框里输入数据,**必须使用“空格”或者“回车”来隔开两个数字**(比如输入 `5 10`)。`cin` 它只要一遇到空格或回车,就知道第一个数据输入结束了,准备把下一个数据放进第二个抽屉里。
---
## 三、 解决题目中要求有输入的题目
现在我们拥有了所有的基础工具(变量、加减乘除、输入、输出)。接下来,我们要做一道完整的带有输入程序题。务必要记住:
==**"输入 -> 处理 -> 输出" 是完成程序题目的三个基本步骤。**==
**题目描述:请你实现输入两个整数,输出这两个整数的差。**
*(样例输入:2 3 $\rightarrow$ 样例输出:-1;样例输入:10 2 $\rightarrow$ 样例输出:8)*
**分析思路**:
1. **提取有效信息**:题目需要什么?(**==输入两个数==** $\rightarrow$ 相减 $\rightarrow$ 输出结果)。
2. **整理思路**:
* 准备两个变量(空抽屉)装输入的数。
* 用 `cin` 把用户敲的字放进抽屉。
* 处理数据:拿出来相减,结果放进第三个抽屉。
* 用 `cout` 展示第三个抽屉。
3. **将思路一步步翻译为C++ 代码**:
```cpp
int num1, num2; // 准备抽屉
cin >> num1 >> num2; // 接收输入
int diff = num1 - num2; // 计算并存入新抽屉
cout << diff; // 输出结果
```
4. **编译运行**:按下 F11。如果有报错,不要慌,检查是不是漏了分号,或者 `>>` 和 `<<` 的方向写反了。
5. **输入测试数据,验证结果**:在弹出的黑框里输入测试用例 `2 3`,看看结果是不是 `-1`。
6. **修正错误**:如果输出不对(比如输出了 5),说明语法没问题,但是**逻辑错了**。回去检查代码,是不是把减号写成加号了?修改后重新测试,直到完全正确为止。
@@ -0,0 +1,37 @@
### **C++ `cin` 输入 课后习题 - 答案**
#### **一、 填空题**
1. Console Input (或 控制台输入)
2. `>>` , 提取运算符
3. 输入 , 处理
4. 暂停 (或 阻塞)
5. 空格 , 回车
6. 定义
7. 放进
#### **二、 单项选择题**
1. **D**. `cin` 的核心就是获取键盘输入。
2. **C**. `cin` 使用提取运算符 `>>`,方向是从 `cin` 流向变量。
3. **C**. 链式输入使用 `>>` 连接多个变量。
4. **C**. `cin` 默认使用空白字符(空格、回车等)作为分隔符,逗号不是空白字符,无法正确分割。
5. **B**. `cin` 使得程序可以处理运行时才给定的数据,变得通用和灵活。
6. **B**. 程序先定义变量,然后通过 `cin` 获取值,再进行计算和输出,是完整的“输入-处理-输出”流程。
7. **C**. 两种写法在功能上完全相同,都能读取两个变量,但链式写法更为常用和简洁。
8. **B**. 程序能运行但结果不对,说明语法正确(不是CE),但计算或处理的思路(逻辑)错了。
9. **B**. `cin >> a;` 只会读取一个整数。它读到 `5`,遇到空格,就认为第一个数的输入结束了,所以 `a` 的值是 `5`。`6` 会留在输入缓冲区中等待下一次 `cin` 读取。
10. **C**. `int a, b;` 定义变量,`cin >> a >> b;` 使程序暂停,等待输入。
#### **三、 判断题**
1. × ( `c` 代表 "Console" (控制台)。)
2. √ (必须先准备好“抽屉”,才能往里面放东西。)
3. √ (`cin` 是输入,`cout` 是输出,方向和作用都相反。)
4. √ (`cin` 在读取数据前会跳过所有空白字符。)
5. × (回车也是一种空白分隔符,所以可以一个数字一行,分两行输入。)
6. √ (这是讲义中强调的程序设计基本结构。)
7. √ (这正是引入 `cin` 的核心价值。)
8. × (讲义中的6步法强调,应该先整理思路,再翻译成代码。)
9. √ (提取运算符 `>>` 的作用就是将读取到的值赋给变量。)
10. × ( `cout` 应该使用插入运算符 `<<`,正确的写法是 `cout << "请输入一个数字";`。)
@@ -0,0 +1,95 @@
### **C++ `cin` 输入 课后习题**
姓名: \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
#### **一、 填空题**
1. 在C++中,`cin` 是 \_\_\_\_\_\_\_\_\_\_\_\_\_\_ 的英文缩写,它的主要作用是接收用户的键盘输入。
2. `cin` 使用的运算符是 \_\_\_\_\_\_\_\_\_\_,这个运算符被称为 \_\_\_\_\_\_\_\_\_\_,它的箭头方向形象地表示数据从键盘流向变量。
3. 一个有输入功能的程序,其基本流程可以分为三个步骤:\_\_\_\_\_\_\_\_\_\_、处理和输出。
4. 当程序执行到 `cin >> a;` 语句时,会\_\_\_\_\_\_\_\_\_\_运行,并等待用户输入数据。
5. `cin` 通过空白字符来区分多个输入数据,最常见的两种空白字符是\_\_\_\_\_\_\_\_\_\_和\_\_\_\_\_\_\_\_\_\_。
6. 在使用 `cin >> num;` 之前,必须先\_\_\_\_\_\_\_\_\_\_变量 `num`,为输入的数据准备好存放空间。
7. 讲义中用生活中的例子做比喻,把变量比作“抽屉”,那么 `cin` 的作用就是把外面的数据\_\_\_\_\_\_\_\_\_\_“抽屉”里。
#### **二、 单项选择题**
( &nbsp; ) 1. 在C++中,`cin` 的核心功能是什么?
A. 在屏幕上打印文字和符号
B. 让程序暂停指定的时间
C. 定义新的变量类型
D. 从键盘读取数据并存入变量
( &nbsp; ) 2. 下面哪条语句可以正确地从键盘读取一个整数并存放到变量 `score` 中?
A. `cin << score;`
B. `cout >> score;`
C. `cin >> score;`
D. `cout << score;`
( &nbsp; ) 3. 如果要用一条语句连续读取用户的两个整数,分别存入变量 `width` 和 `height`,应该怎么写?
A. `cin >> width, height;`
B. `cin >> width; height;`
C. `cin >> width >> height;`
D. `cin << width << height;`
( &nbsp; ) 4. 对于语句 `cin >> x >> y;`,用户在键盘上**不正确**的输入方式是?
A. 输入 `10`,按空格键,再输入 `20`,按回车键
B. 输入 `10`,按回车键,再输入 `20`,按回车键
C. 输入 `10,20`,按回车键
D. 输入 `10`,按多个空格键,再输入 `20`,按回车键
( &nbsp; ) 5. `cin` 这个工具主要解决了程序中的什么根本性问题?
A. 计算速度太慢的问题
B. 只能计算和处理“写死”在代码里的固定数据的问题
C. 无法输出中文的问题
D. 代码必须从 `main` 函数开始的问题
( &nbsp; ) 6. 阅读以下代码,它的功能是什么?
```cpp
int base, height;
cin >> base >> height;
int area = base * height / 2;
cout << area;
```
​ A. 计算一个固定三角形的面积
​ B. 输入两个整数作为底和高,然后计算并输出三角形的面积
​ C. 只输入两个整数,不进行任何计算
​ D. 这段代码有语法错误,无法运行
( &nbsp; ) 7. `cin >> a; cin >> b;` 和 `cin >> a >> b;` 这两种写法是什么关系?
A. 前者正确,后者错误
B. 两者功能完全不同
C. 两者功能等价,但后者更简洁
D. 后者正确,前者错误
( &nbsp; ) 8. 编程的6个步骤中,如果在“输入测试数据,验证结果”时发现输出与预期不符,这通常说明发生了什么错误?
A. 语法错误
B. 逻辑错误
C. 编译错误
D. 硬件故障
( &nbsp; ) 9. 假如程序是 `int a; cin >> a;`,而用户输入了 `5 6` 然后按回车,那么变量 `a` 中存储的值是多少?
A. 56
B. 5
C. 6
D. 11
( &nbsp; ) 10. `int a, b; cin >> a >> b;` 这两行代码执行时,程序的行为是?
A. 立刻计算 a+b 的值
B. 在屏幕上输出 a 和 b
C. 定义了两个变量,然后暂停等待用户输入两个由空白字符隔开的数据
D. 定义了两个变量,然后程序直接结束
#### **三、 判断题 (对的打“√”,错的打“×”)**
1. `cin` 的 `c` 代表 "C++",`in` 代表 "input"。 ( &nbsp; )
2. 必须先定义变量,然后才能使用 `cin` 把数据存入这个变量。 ( &nbsp; )
3. `cin` 使用的运算符是 `>>`,`cout` 使用的运算符是 `<<`,两者方向相反,作用也相反。 ( &nbsp; )
4. `cin` 会自动忽略输入数据前多余的空格、Tab键或回车。 ( &nbsp; )
5. 如果写 `cin >> x >> y;`,用户必须在同一行内输入两个数字,不能换行输入。 ( &nbsp; )
6. “输入 -> 处理 -> 输出”是解决编程题目的三个基本步骤。 ( &nbsp; )
7. 一个好的程序应该通过 `cin` 接收用户的任意合法输入,而不是每次都让用户去修改源代码。 ( &nbsp; )
8. 在分析一个编程问题时,正确的做法是先动手写代码,再边写边想思路。 ( &nbsp; )
9. `cin >> a;` 这行代码执行后,变量 `a` 的值就变成了用户刚刚从键盘输入的值。 ( &nbsp; )
10. `cout >> "请输入一个数字";` 这行代码是正确的。 ( &nbsp; )