top1编程
← 返回题目
题解

计算长方形的周长和面积

1 条题解

  • 0
    @ 2026-8-5 23:54:04

    P4630 计算长方形的周长和面积(入门)

    解题思路

    这道题考察结构体的基本使用和浮点数的输出格式,分四步讲。

    第一步,回忆周长和面积的公式。 周长等于长加宽的和再乘 2,也就是围成长方形四周的总长度;面积等于长乘宽,也就是长方形所占的平面大小。打个比方:长方形像一块菜地,想围一圈篱笆,篱笆的总长就是周长;想知道菜地能种多少菜,就要算面积。

    第二步,用结构体把四个量装进一个"盒子"。 题目要求必须定义一个长方形结构体 rect,把长、宽、周长、面积四个量都放进去。为什么用结构体?如果四个量分散成四个普通变量,程序显得零散;把它们装进一个结构体,就像把四样东西放进同一个盒子,之后用 r.length、r.width 这样的方式取出即可。因为长和宽是小数,四个成员都用 double 类型。

    第三步,读入并计算。 先用 cin 读入长和宽,然后计算周长 perimeter = 2 × (length + width),计算面积 area = length × width,最后输出。

    第四步,控制输出格式。 题目要求保留两位小数。这里用 里的 printf("%.2f", x),%.2f 表示保留两位小数输出,比 iomanip 更简洁。比如长 6.3、宽 4.8:周长 2×(6.3+4.8)=22.2,输出时自动补成 22.20;面积 6.3×4.8=30.24,输出 30.24。题目保证 0<w<l≤1000,长宽一定是正的,不需要额外判断。

    **回顾总结。**这道题的三个要点:一是记住周长和面积公式,二是把四个量装进结构体一起管理,三是用 printf("%.2f") 控制两位小数。用结构体之后,程序里不再出现散落的变量,所有计算都围绕 r 这个盒子展开,读代码的人一眼就能看出每个量属于哪个长方形。只要公式不错、格式串写对,答案就能精确输出。

    参考代码

    // 程序用途:输入长方形的长和宽,用结构体保存并输出周长和面积(保留两位小数)
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    // 长方形结构体:保存长、宽、周长和面积
    struct rect {
        double length;    // 长
        double width;     // 宽
        double perimeter; // 周长
        double area;      // 面积
    };
    
    int main() {
        struct rect r;
        cin >> r.length >> r.width;                 // 读入长和宽
        r.perimeter = 2 * (r.length + r.width);     // 周长 = 2*(长+宽)
        r.area = r.length * r.width;                // 面积 = 长*宽
        printf("%.2f %.2f\n", r.perimeter, r.area); // 用 printf 保留两位小数输出
        return 0;
    }
    

    复杂度分析

    时间上,程序只做了一次输入和两次简单的乘加运算,不管数据多大,运算次数都是固定的,所以时间复杂度是 O(1)。空间上,只使用了一个结构体变量,占用内存也是固定的,所以空间复杂度是 O(1)。本题数据范围只有 1000,这样 O(1) 的算法完全可以轻松应对。

    • 1