计算长方形的周长和面积
1 条题解
-
0
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