Files

6.3 KiB
Raw Blame History

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

代码语句:

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 名同学。

#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 对角线问题代码:

#include <iostream>
#include <cmath> // 必须引入数学的工具箱
using namespace std;

int main(){
    // 计算过程:先算出 6 的 2 次方加上 9 的 2 次方,再对总和进行开根号
    cout << sqrt(pow(6, 2) + pow(9, 2)) << endl;
    return 0;
}