top1编程
← 返回题目
题解

计算长方形的周长和面积

1 条题解

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

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

    解题思路

    这道题考察结构体(struct)的基本用法和小数输出格式,分四步来做。

    第一步,回忆周长和面积的公式。 周长等于(长加宽)乘 2,表示长方形四条边的总长度;面积等于长乘宽,表示长方形内部所占的平面大小。可以打个比方:把长方形想象成一块菜地,想给菜地围一圈篱笆,篱笆的总长就是周长;想知道菜地能种多少菜,就要算它的面积。

    第二步,把四个量装进结构体。 题目特别要求定义一个长方形结构体 rect,把长、宽、周长、面积四个量都放进去。为什么?因为四个量描述的是同一个长方形,装进一个结构体程序结构更清晰。结构体就像一个"小盒子",盒子里有四格分别放长、宽、周长、面积,用 r.length、r.width 这样的加点方式取出对应的一格。长和宽是小数,四个成员都用 double。

    第三步,读入并计算。 先定义结构体 rect,然后读入长和宽,接着计算周长 perimeter = 2 × (length + width) 和面积 area = length × width,最后输出。

    第四步,用 printf 保留两位小数。 题目要求保留两位小数。比如样例长 6.3、宽 4.8:周长 2×(6.3+4.8)=22.2,本来只有一位小数,输出时必须补 0 变成 22.20;面积 6.3×4.8=30.24 正好两位小数,直接输出。用 里 printf 的格式串 %.2f 就表示"保留两位小数输出",非常方便。题目保证长宽都是正数且不超过 1000,周长和面积都是正常正数,不需要处理特殊情况。

    **回顾总结。**这道题的写法很固定:定义结构体、读入长宽、算周长面积、printf 输出。结构体变量 r 用点号取成员,就像从盒子的某一格里取东西,取哪个写哪个。记住 double 存放小数、%.2f 保留两位,再配合"菜地围篱笆"的比喻记住公式,整道题就轻松拿下。

    参考代码

    // 程序用途:输入长方形的长和宽,用结构体保存并输出周长和面积(保留两位小数)
    #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)。空间上,只使用了一个结构体变量 rect,占用内存也是固定的,所以空间复杂度是 O(1)。本题数据范围长宽不超过 1000,O(1) 的算法可以瞬间得出答案。

    • 1