Files

152 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# C++ 数学运算与在线评测 讲义
## 一、 双引号 —— 复读机
在开始让计算机进行数学运算前,我们必须先记住 `cout` 输出时的规则——**双引号的作用**。
- **带有双引号 `""`**:计算机将其视为**纯文本**。无论里面写了什么(就算是数学公式),编译器都会像复读机一样原样输出。
- **没有双引号**:计算机将其视为**数学公式**。编译器会在后台先计算出精确结果,然后再将结果输出。
> `cout` 完全可以输出数学运算的结果,前提是**不要**给算式加双引号。
------
## 二、 基础运算与编程题目(书本 P4 页 例 1-2)
**题目回顾(书本 P4 页):** 10 个苹果,小 A 拿走 2 个,Uim 拿走 4 个,八尾勇拿走剩下的。求:①小 A 和 Uim 共拿走多少?②八尾勇拿走多少?(要求:输出两个数字,中间用空格隔开)。
### 1. 任务拆解与算式转化
- **第一问**:小 A 和 Uim 一共拿走的数量 $\rightarrow$ 转化为算式:`2 + 4`
- **第二问**:八尾勇拿走剩下的数量 $\rightarrow$ 转化为算式:`10 - 2 - 4`
### 2. 书写代码
我们的目标是输出,因此必须调用 `cout` 工具。因为要输出两个数字,我们就可以把两个答案拼在一起:
- **答案一**:`2 + 4`
- **分隔符**:`" "`(注意:空格是纯文本,**必须**用双引号包裹,让编译器原样输出)
- **答案二**:`10 - 2 - 4`
**代码语句:**
```C++
cout << 2 + 4 << " " << 10 - 2 - 4;
```
*最后将这行核心的逻辑填入到 `int main() { ... }` 的大括号内部即可完成代码编写。*
------
## 三、 实战:将本题代码提交至 OJ 系统 (zmwl.online)
代码在本地电脑(Dev-C++)运行成功后,我们需要将其提交给**在线评测系统(OJ,考官)进行打分**,在之后的考试或者竞赛中,都是通过将代码提交到在线评测系统中打分的方式来获取成绩。
### 步骤 1:本地验证
在正式提交前,先在本地按下 **F11** 观察 Dev-C++ 的控制台。我们通过数学运算能知道最终的答案是 `6` 与 `4`,而题目要求的格式是输出两个数字,中间用空格隔,所以最终显示的数字必须是 `6 4`,不能有多余的数据或标点。
### 步骤 2:登录
1. **打开网站**:浏览器地址栏输入 `zmwl.online` 并回车。
2. **账号登录**:输入用户名,初始密码统一为 `zmwl0000`。
3. **寻找考题**:点击上方“题库”,在列表中点击编号为 **B0001** 的题目进入详情页。
### 步骤 3:代码复制搬运 (快捷键操作)
切换回 Dev-C++ 软件窗口,执行以下键盘指令:
- **全选**:按住 **Ctrl** 键不放,按 **A** 键。(代码区背景变蓝,全部圈中)
- **复制**:按住 **Ctrl** 键不放,按 **C** 键。(代码存入电脑的剪贴板中)
### 步骤 4:递交与查收结果
1. **准备粘贴**:回到浏览器 B0001 题目页,点击“**递交**”按钮,进入一个大空白输入框。
2. **执行粘贴**:鼠标左键点击空白框确保光标闪烁,按住 **Ctrl** 键不放,按 **V** 键。
3. **提交检验**:确认代码无误后,点击系统底部的递交按钮,等待系统判定正误。
------
## 四、 C++ 的特殊数学法则:除法与取余
C++ 中的加、减、乘以及运算优先级与小学数学一致,但**除法 (`/`)** 存在差异。
### 1. 除法 (`/`) 的两种形态
| **形态** | **触发条件** | **运算规则** | **代码示例** | **输出结果** |
| -------------- | ------------------------ | ------------------------------------ | ------------------ | ------------ |
| **整数相除** | 除数和被除数**都是整数** | 小数部分被**直接截断**(不四舍五入) | `cout << 7 / 2;` | **3** |
| **浮点数相除** | 至少有一个数是**小数** | 自动开启浮点除法,保留小数部分 | `cout << 7.0 / 2;` | **3.5** |
> **总结:**
>
> 1. 整数乘/除一个浮点数,结果是浮点数。
>
> 2. 整数加上一个浮点数,结果也是浮点数。
>
> *(例:6 元和 5 元平分,算式应写为 `(6 + 5) / 2.0` 以获取精确的小数结果)*
### 2. 取余运算 (`%`)
百分号 `%` 在 C++ 中是**取模运算(求余数)**。
- **`/` 关心商**:每个人平均分到几个?
- **`%` 关心余数**:大家都分完一样多后,还剩下几个?
**例 1-3 分苹果(题目编号 B0002,书本 P6 页):**
14 个苹果均分给 4 名同学。
```C++
#include <iostream>
using namespace std;
int main(){
cout << 14 / 4 << endl; // 每人分得几个? (输出 3)
cout << (14 / 4) * 4 << endl; // 一共分出去多少?(输出 12)
cout << 14 % 4 << endl; // 放回冰箱几个(即求余数)?(输出 2)
return 0;
}
```
------
## 五、 科学表示法与数学工具调用
### 1. 科学计数法(例 1-5)
在 C++ 中处理极大或极小的数字时,经常遇到包含字母 `e` 的表示法:
- `5e6` 代表 $5 \times 10^6$(即 5000000)。
- `5e-6` 代表 $5 \times 10^{-6}$(即 0.000005)。
### 2. 物理与几何题(例 1-6 & 例 1-7)
- **火车相遇问题(例 1-6)**:纯基础运算。相对速度与相对距离公式 $\rightarrow$ `cout << (260 + 220) / (12 + 20);`
- **对角线问题(例 1-7)**:长宽为 6 和 9 的长方形,根据勾股定理求对角线 $\sqrt{6^2+9^2}$。
### 3. 引入高级数学工具:`<cmath>`
C++ 内部预制了大量可以直接使用的数学工具(函数)。要使用它们,**必须在基础代码顶部加上 `#include <cmath>`**。
- **开平方工具:`sqrt()`**
- **用法**:把需要开根号的数字丢进括号里。
- **示例**:`cout << sqrt(9);` (输出 3)
- **求次方工具:`pow(x, y)`**
- **用法**:计算 $x$ 的 $y$ 次方,数字之间用逗号隔开。
- **示例**:`cout << pow(2, 3);` (计算 $2^3$,输出 8)
**例1-7 对角线问题代码:**
```C++
#include <iostream>
#include <cmath> // 必须引入数学的工具箱
using namespace std;
int main(){
// 计算过程:先算出 6 的 2 次方加上 9 的 2 次方,再对总和进行开根号
cout << sqrt(pow(6, 2) + pow(9, 2)) << endl;
return 0;
}
```