1. 实验一:结构体与联合体的使用

1.1 实验目的

本实验旨在让学生掌握结构体和联合体的定义、使用以及内存分配的特点。

1.2 实验内容

  1. 定义一个学生结构体,包含学号、姓名、年龄和成绩等信息。
  2. 创建一个学生结构体数组,并初始化。
  3. 使用结构体数组进行遍历,打印所有学生的信息。
  4. 定义一个联合体,包含整数和浮点数两种类型,演示联合体的内存分配特点。

1.3 实验代码

#include <stdio.h>

// 定义学生结构体
typedef struct {
    int id;
    char name[50];
    int age;
    float score;
} Student;

// 定义联合体
typedef union {
    int i;
    float f;
} UnionType;

int main() {
    // 创建学生结构体数组
    Student students[3] = {
        {1, "Alice", 20, 90.5},
        {2, "Bob", 21, 85.0},
        {3, "Charlie", 22, 92.0}
    };

    // 遍历学生结构体数组
    for (int i = 0; i < 3; i++) {
        printf("Student %d: %s, %d, %d, %.1f\n", students[i].id, students[i].name, students[i].age, students[i].id, students[i].score);
    }

    // 定义联合体变量
    UnionType ut;
    ut.i = 10;
    printf("Union i: %d\n", ut.i);
    ut.f = 3.14;
    printf("Union f: %.2f\n", ut.f);

    return 0;
}

1.4 实战技巧

  1. 结构体和联合体的定义要清晰,避免冗余字段。
  2. 结构体和联合体在内存分配上的区别要理解透彻。
  3. 结构体和联合体的使用要合理,避免内存浪费。

2. 实验二:枚举类型的使用

2.1 实验目的

本实验旨在让学生掌握枚举类型的定义和使用。

2.2 实验内容

  1. 定义一个颜色枚举类型。
  2. 创建一个颜色枚举变量,并初始化。
  3. 打印颜色枚举变量的值。

2.3 实验代码

#include <stdio.h>

// 定义颜色枚举类型
typedef enum {
    RED,
    GREEN,
    BLUE
} Color;

int main() {
    // 创建颜色枚举变量
    Color color = GREEN;

    // 打印颜色枚举变量的值
    printf("Color: %d\n", color);

    return 0;
}

2.4 实战技巧

  1. 枚举类型要具有明确的含义,避免使用过于抽象的名称。
  2. 枚举类型的使用要合理,避免重复定义。

3. 实验三:位字段的使用

3.1 实验目的

本实验旨在让学生掌握位字段的使用。

3.2 实验内容

  1. 定义一个包含位字段的联合体。
  2. 创建一个联合体变量,并初始化。
  3. 打印联合体变量的值。

3.3 实验代码

#include <stdio.h>

// 定义包含位字段的联合体
typedef union {
    unsigned int code;
    struct {
        unsigned int a : 1;
        unsigned int b : 2;
        unsigned int c : 5;
        unsigned int d : 24;
    } bits;
} BitFieldUnion;

int main() {
    // 创建联合体变量
    BitFieldUnion bf;
    bf.bits.a = 1;
    bf.bits.b = 3;
    bf.bits.c = 12;
    bf.bits.d = 0x12345678;

    // 打印联合体变量的值
    printf("Code: %u\n", bf.code);
    printf("Bits a: %u, b: %u, c: %u, d: %u\n", bf.bits.a, bf.bits.b, bf.bits.c, bf.bits.d);

    return 0;
}

3.4 实战技巧

  1. 位字段的使用要合理,避免浪费内存。
  2. 位字段的使用要结合实际需求,避免过于复杂。