#include <stdio.h>
// 定义联合体,用于存储圆形半径或矩形的长和宽
union ShapeData {
float radius;
struct {
float length;
float width;
} rectangle;
};
// 定义结构体,包含图形类型和数据联合体
struct Shape {
int type; // 0表示圆形,1表示矩形
union ShapeData data;
};
// 计算圆形面积
float calculateCircleArea(float radius) {
return 3.14159 * radius * radius;
}
// 计算矩形面积
float calculateRectangleArea(float length, float width) {
return length * width;
}
int main() {
struct Shape *shapePtr;
struct Shape shape;
printf("请选择图形类型 (0: 圆形, 1: 矩形): ");
scanf("%d", &shape.type);
if (shape.type == 0) {
printf("请输入圆形半径: ");
scanf("%f", &shape.data.radius);
} else if (shape.type == 1) {
printf("请输入矩形的长: ");
scanf("%f", &shape.data.rectangle.length);
printf("请输入矩形的宽: ");
scanf("%f", &shape.data.rectangle.width);
} else {
printf("无效的图形类型选择。\n");
return 1;
}
shapePtr = &shape;
if (shapePtr->type == 0) {
float area = calculateCircleArea(shapePtr->data.radius);
printf("圆形的面积是: %.2f\n", area);
} else if (shapePtr->type == 1) {
float area = calculateRectangleArea(shapePtr->data.rectangle.length, shapePtr->data.rectangle.width);
printf("矩形的面积是: %.2f\n", area);
}
return 0;
}
代码说明
- 联合体
ShapeData
:用于存储圆形的半径或矩形的长和宽。
- 结构体
Shape
:包含图形类型(type
)和联合体数据(data
)。
- 计算函数:
calculateCircleArea
用于计算圆形面积,calculateRectangleArea
用于计算矩形面积。
- 主函数
main
:通过用户输入选择图形类型,并输入相应参数,使用指针访问结构体成员并计算面积,最后输出结果。