1. 实验一:结构体与联合体的使用
1.1 实验目的
本实验旨在让学生掌握结构体和联合体的定义、使用以及内存分配的特点。
1.2 实验内容
- 定义一个学生结构体,包含学号、姓名、年龄和成绩等信息。
- 创建一个学生结构体数组,并初始化。
- 使用结构体数组进行遍历,打印所有学生的信息。
- 定义一个联合体,包含整数和浮点数两种类型,演示联合体的内存分配特点。
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 实战技巧
- 结构体和联合体的定义要清晰,避免冗余字段。
- 结构体和联合体在内存分配上的区别要理解透彻。
- 结构体和联合体的使用要合理,避免内存浪费。
2. 实验二:枚举类型的使用
2.1 实验目的
本实验旨在让学生掌握枚举类型的定义和使用。
2.2 实验内容
- 定义一个颜色枚举类型。
- 创建一个颜色枚举变量,并初始化。
- 打印颜色枚举变量的值。
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 实战技巧
- 枚举类型要具有明确的含义,避免使用过于抽象的名称。
- 枚举类型的使用要合理,避免重复定义。
3. 实验三:位字段的使用
3.1 实验目的
本实验旨在让学生掌握位字段的使用。
3.2 实验内容
- 定义一个包含位字段的联合体。
- 创建一个联合体变量,并初始化。
- 打印联合体变量的值。
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 实战技巧
- 位字段的使用要合理,避免浪费内存。
- 位字段的使用要结合实际需求,避免过于复杂。
