给地毯店当小助手:客人要铺满一块地,需要多少块 1×1 的方砖?「多少块」就是面积——长方形数砖、三角形拼一拼、圆用 π 估一估。
想象你开一家地毯店:每块方砖都是 1 厘米 × 1 厘米 = 1 平方厘米。客人指着地板说「铺满这块地要多少钱」,你只要数一下:要多少块砖?这个数就是面积(单位:平方厘米 cm²)。
长方形最简单:4 厘米 × 3 厘米的地,横着铺 4 块、竖着铺 3 排,4 × 3 = 12 块砖 → 面积 12。所以长方形面积 = 长 × 宽。
三角形呢?拿两个完全一样的三角形拼一拼——正好拼成一个平行四边形(长方形是特殊的平行四边形)!所以三角形面积 = 底 × 高 ÷ 2,那个 ÷2 就是「我只有一半,另一半是别人的」。
圆没法数砖,古人用π(3.14…)估:圆面积 = π r²(r 是半径,圆心到边缘的距离)。π 是「圆周长 ÷ 直径」,不管圆多大这个比值都一样——这就是 π 的魔力。
组合图形(比如「房子」= 长方形墙 + 三角形屋顶):把它切成会算的部分,分别求面积再加起来。这就是几何编程的三板斧。
地毯店开张第一单:一块 4 厘米 × 3 厘米 的地板要铺 1×1 方砖。横着一排铺 4 块,一共铺 3 排:
// 数砖法:一排 4 块 × 3 排 = 12 块 → 面积 = 12 cm² // 不用真数——直接乘: S = 长 × 宽 = 4 × 3 = 12 cm² // 正方形是「长 = 宽」的长方形:边长 5 cm S = 边长 × 边长 = 5 × 5 = 25 cm² // 长条地板:8 cm × 2 cm S = 8 × 2 = 16 cm² // 逆用公式:已知面积和长,求宽 // S = 长 × 宽 → 宽 = S ÷ 长 S = 24 cm²,长 = 8 cm → 宽 = 24 ÷ 8 = 3 cm // ⚠️ 周长 ≠ 面积(单位都不同!) // 4×3 的长方形: // 周长 = (4 + 3) × 2 = 14 cm ← 围一圈的长度(厘米) // 面积 = 4 × 3 = 12 cm² ← 铺满的砖数(平方厘米)
三角形没法直接数砖。秘诀:复制一个一模一样的三角形,拼起来——两个同底同高的三角形正好拼成一个平行四边形(长方形是特殊的平行四边形)。所以三角形面积 = 平行四边形面积 ÷ 2:
// 底 4 cm、高 3 cm 的三角形: // 拼成的长方形:4 × 3 = 12 cm² // 三角形只占一半: S = 底 × 高 ÷ 2 = 4 × 3 ÷ 2 = 6 cm² // 直角三角形:两条直角边互相垂直—— // 一条当底、一条就是高(不用额外画垂线!) // 直角边 3 cm 和 4 cm: S = 3 × 4 ÷ 2 = 6 cm² // 一般三角形找「高」:选一条边当底, // 从对角顶点向底(或其延长线)作垂线,垂线段 = 高。 // 底 10 cm、对应高 6 cm: S = 10 × 6 ÷ 2 = 30 cm² // 逆用:已知面积和底,求高 // S = 底 × 高 ÷ 2 → 高 = 2 × S ÷ 底 S = 18 cm²,底 = 6 cm → 高 = 2 × 18 ÷ 6 = 6 cm
圆没法数砖,古人发现一个神奇的事实:不管圆多大,周长 ÷ 直径 ≈ 3.14(这个比值就是 π)。有了 π,圆面积也能算:S = π r²(r 是半径,圆心到边缘的距离)。手推 r = 2 的圆:
// 圆:半径 r = 2 cm,π 取 3.14 // 面积:S = π × r² = 3.14 × (2 × 2) = 3.14 × 4 = 12.56 cm² // 周长:C = 2 × π × r = 2 × 3.14 × 2 = 12.56 cm // (r = 2 时,面积和周长的「数字」碰巧一样——单位不同,别得意!) // 再算两个: // r = 1:S = 3.14 × 1 = 3.14,C = 2 × 3.14 × 1 = 6.28 // r = 5:S = 3.14 × 25 = 78.5,C = 2 × 3.14 × 5 = 31.4 // 直径 d = 6(题目给直径时:r = d ÷ 2 = 3) // S = 3.14 × 9 = 28.26 cm² // 代码里 r² 怎么写?C++ 没有「平方」符号: // r * r ← 两个 r 相乘(先算 r*r,再乘 3.14!) // double s = 3.14 * r * r; // ⚠️ 不是 3.14 * 2 * r(那是周长的一半),更不是 (3.14 * r) * (3.14 * r)
3.14 * r * r 和 2 * 3.14 * r 一字之差,答案差一倍还多。把三个公式装进一个程序:先问客人要算哪种图形(输入菜单号),再按类型读入不同参数。组合图形「房子」= 长方形墙 + 三角形屋顶,切开、分别算、加起来:
// 菜单结构(完整代码在下一节): int type; cin >> type; if (type == 1) { // 长方形:读 长 宽 double a, b; cin >> a >> b; cout << a * b << endl; } else if (type == 2) { // 三角形:读 底 高 double a, b; cin >> a >> b; cout << a * b / 2 << endl; } else { // 圆:读 半径 double r; cin >> r; cout << 3.14 * r * r << endl; } // 「房子」组合图形:墙 4×3,屋顶底 4 高 2 // 第 1 步:墙(长方形)= 4 × 3 = 12 // 第 2 步:屋顶(三角形)= 4 × 2 ÷ 2 = 4 // 第 3 步:房子总面积 = 12 + 4 = 16 cm² // 代码:double house = wall + roof; // ⚠️ 整数除法陷阱:底×高为奇数时 a*b/2 会截断 // 3 × 3 / 2 = 9 / 2 = 4(int 除法丢 0.5!) // 解法:变量用 double 读入(cin >> a >> b 读进 double,9/2 = 4.5 ✓)
// 输入:type(菜单号 1~4);按类型再读参数 // 1 → 读 长 宽;2 → 读 底 高;3 → 读 半径;4 → 房子(固定尺寸) // 输出:对应图形的面积 // 示例:1 4 3 → 12;2 4 3 → 6;3 2 → 12.56;4 → 16 #include <iostream> using namespace std; double rectArea(double a, double b) { // 长方形:长 × 宽 return a * b; } double triArea(double base, double h) { // 三角形:底 × 高 ÷ 2 return base * h / 2; } double circleArea(double r) { // 圆:πr²(π ≈ 3.14,r*r 不是 r*2) return 3.14 * r * r; } int main() { int type; cin >> type; if (type == 1) { double a, b; cin >> a >> b; cout << rectArea(a, b) << endl; } else if (type == 2) { double base, h; cin >> base >> h; cout << triArea(base, h) << endl; } else if (type == 3) { double r; cin >> r; cout << circleArea(r) << endl; } else { // type == 4:房子 = 墙 + 屋顶 // 墙 4×3,屋顶底 4 高 2——切开、分别算、加起来 double house = rectArea(4, 3) + triArea(4, 2); cout << house << " cm²" << endl; } return 0; } // 动手验证:输入 1 4 3 → 12 // 输入 2 10 6 → 30;输入 3 5 → 78.5;输入 4 → 16 cm²