MST

星途 面试题库

面试题:C语言联合体指针在复杂数据结构中的应用

假设有一个结构体,其中包含一个联合体成员。结构体用于表示不同类型的图形信息,联合体中分别存储圆形的半径(浮点数)和矩形的长和宽(两个浮点数)。请编写代码,使用指针访问并计算不同图形的面积。通过用户输入选择图形类型并输入相应参数,然后输出计算得到的面积。
14.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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;
}

代码说明

  1. 联合体 ShapeData:用于存储圆形的半径或矩形的长和宽。
  2. 结构体 Shape:包含图形类型(type)和联合体数据(data)。
  3. 计算函数calculateCircleArea 用于计算圆形面积,calculateRectangleArea 用于计算矩形面积。
  4. 主函数 main:通过用户输入选择图形类型,并输入相应参数,使用指针访问结构体成员并计算面积,最后输出结果。