(5) 代数与平面几何
GESP C++ 八级考试大纲知识点梳理系列文章:
- 计数原理:加法与乘法
- 排列与组合
- 杨辉三角与组合数
- 倍增法
- 代数与平面几何 {: .prompt-tip}
继上一篇我们探讨了倍增法之后,我们继续深入 GESP C++ 八级大纲。今天我们来聊聊编程中必不可少的数学基础——代数与平面几何。
(5)掌握代数与平面几何基础知识(初中数学部分)。包括方程的概念及一元一次方程、二元一次方程的基本求解技巧,求基础平面几何概念、求基本图形(如长方形、三角形、圆形等)的面积等 {: .prompt-info}
虽然 GESP 是编程考试,但数学是算法的基石。在八级考试中,代数和几何通常不会像数学卷子那样考证明题,而是考查利用计算机计算公式的能力以及将几何/代数问题转化为代码逻辑的能力。
本人也是边学、边实验、边总结,且对考纲深度和广度的把握属于个人理解。因此本文更多的不是一个教程,而是个人知识梳理,如有遗漏、疏忽,欢迎指正、交流。 {: .prompt-warning}
一、代数基础:方程与求解
在计算机科学中,解方程通常是“模拟”或者“公式化”的过程。
1.1 方程的概念
方程是含有未知数的等式。 在 C++ 中,我们并不是像手算一样去“移项、合并同类项”,而是需要推导出一个通用的计算公式,然后让计算机套用公式算出结果。
1.2 一元一次方程 (Linear Equation in One Variable)
标准形式: (其中 是未知数,)
数学求解: 移项得 ,系数化为 1 得 。
编程实现思路: 如果题目给出 和 ,我们只需要一行代码:
double x = -b / a;注意:在编程中要特别注意 的情况(除数为 0 异常)。如果 且 ,有无数解;如果 且 ,无解。
1.3 二元一次方程组 (Linear Equations in Two Variables)
标准形式:
求解技巧:
在数学课上我们学过“代入消元法”和“加减消元法”。在编程中,为了通用性,我们通常使用公式法(基于克莱姆法则 Cramer’s Rule)或者高斯消元法(对于更多元方程)。对于二元一次方程组,公式法最直接。
我们通过加减消元可以推导出 和 的通解公式:
令分母 。 如果 ,则有唯一解:
代码示例:
#include <iostream>
#include <iomanip> // 用于保留小数
using namespace std;
int main() {
// 求解方程组:
// 2x + 3y = 8
// 3x - y = 1
double a1 = 2, b1 = 3, c1 = 8;
double a2 = 3, b2 = -1, c2 = 1;
double D = a1 * b2 - a2 * b1;
if (D == 0) {
cout << "无唯一解" << endl;
} else {
double x = (c1 * b2 - c2 * b1) / D;
double y = (a1 * c2 - a2 * c1) / D;
cout << "x = " << x << ", y = " << y << endl;
}
return 0;
}输出:x = 1, y = 2
二、平面几何基础:图形与面积
几何问题在编程中非常常见,主要涉及坐标计算和面积/周长公式。
2.1 常见面积公式
| 图形 | 面积公式 () | 周长公式 () | 备注 |
|---|---|---|---|
| 长方形 | 为长和宽 | ||
| 正方形 | 为边长 | ||
| 圆形 | 为半径, 常用 acos(-1.0) | ||
| 三角形 | 基础公式 |
2.2 勾股定理与距离公式 (Pythagorean Theorem)
勾股定理:直角三角形两条直角边 的平方和等于斜边 的平方,即 。
坐标系两点间距离: 已知两点 和 ,根据勾股定理,距离 为:
这是计算几何中最基础的公式,几乎每道几何题都会用到。
2.3 三角形的存在性原理
判断三条线段 能否组成三角形:
- 任意两边之和大于第三边: 且 且 。
- 任意两边之差小于第三边:。
编程判断时,通常写全三个条件。
2.4 海伦公式 (Heron’s Formula) —— 三角形面积神器
在编程题中,经常会给出三角形三个顶点的坐标,求面积。或者直接给出三边长 。 此时,求“高”比较麻烦,海伦公式是解决此类问题的首选。
步骤:
- 先计算半周长 :
- 再计算面积 :
代码实现:
#include <iostream>
#include <cmath> // 必须包含 cmath 以使用 sqrt
using namespace std;
// 给出三边长求面积
double triangle_area(double a, double b, double c) {
// 简单的三角形合法性判断 (两边之和大于第三边)
if (a + b <= c || a + c <= b || b + c <= a) return 0.0;
double p = (a + b + c) / 2.0;
return sqrt(p * (p - a) * (p - b) * (p - c));
}2.5 坐标几何基础
- 中点公式:点 和 的中点坐标为 。
- 曼哈顿距离:。常用于网格行走问题(只能走上下左右)。
2.6 几何中的
在 C++ 中使用 (圆周率),推荐使用反余弦函数 acos 计算,精度较高。
#include <cmath>
const double PI = acos(-1.0); // cos(PI) = -1, 所以 acos(-1) = PI
三、总结
- 方程思想:编程解方程更多是依赖公式推导。对于二元一次方程,熟记克莱姆法则(或者能够现场推导)非常有用。
- 几何公式:除了基础底乘高,海伦公式是竞赛高频考点,务必掌握。
- 浮点数精度:涉及几何和代数运算时,通常会出现小数。要注意使用
double类型,并在判断相等时考虑精度误差(EPS)。
掌握这些基础数学工具,能让你在解决物理模拟、计算几何等类型的编程题目时游刃有余。
本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP认证交流QQ群: 688906745
