用C语言结构体实现:3. 设有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求输入人员的数据,然后再输出。
时间: 2023-07-10 20:20:16 浏览: 108
好的,可以通过以下的 C 语言结构体代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_OCCUPATION_LEN 20
#define MAX_CLASS_LEN 20
#define MAX_POSITION_LEN 20
// 定义学生结构体
struct Student {
char name[MAX_NAME_LEN];
int id;
char gender;
char occupation[MAX_OCCUPATION_LEN];
char class[MAX_CLASS_LEN];
};
// 定义教师结构体
struct Teacher {
char name[MAX_NAME_LEN];
int id;
char gender;
char occupation[MAX_OCCUPATION_LEN];
char position[MAX_POSITION_LEN];
};
int main() {
int n;
printf("请输入人员的数量:");
scanf("%d", &n);
// 定义人员数组
struct Person {
int type;
union {
struct Student student;
struct Teacher teacher;
} data;
} persons[n];
// 输入人员数据
for (int i = 0; i < n; i++) {
printf("请输入第%d个人员的数据:\n", i + 1);
printf("类型(1为学生,2为教师):");
scanf("%d", &persons[i].type);
if (persons[i].type == 1) {
printf("姓名:");
scanf("%s", persons[i].data.student.name);
printf("号码:");
scanf("%d", &persons[i].data.student.id);
printf("性别:");
scanf(" %c", &persons[i].data.student.gender);
printf("职业:");
scanf("%s", persons[i].data.student.occupation);
printf("班级:");
scanf("%s", persons[i].data.student.class);
} else if (persons[i].type == 2) {
printf("姓名:");
scanf("%s", persons[i].data.teacher.name);
printf("号码:");
scanf("%d", &persons[i].data.teacher.id);
printf("性别:");
scanf(" %c", &persons[i].data.teacher.gender);
printf("职业:");
scanf("%s", persons[i].data.teacher.occupation);
printf("职务:");
scanf("%s", persons[i].data.teacher.position);
} else {
printf("类型错误,只能输入1或2\n");
i--; // 重新输入
}
}
// 输出人员数据
printf("\n人员数据如下:\n");
for (int i = 0; i < n; i++) {
printf("第%d个人员:\n", i + 1);
if (persons[i].type == 1) {
printf("姓名:%s\n", persons[i].data.student.name);
printf("号码:%d\n", persons[i].data.student.id);
printf("性别:%c\n", persons[i].data.student.gender);
printf("职业:%s\n", persons[i].data.student.occupation);
printf("班级:%s\n", persons[i].data.student.class);
} else {
printf("姓名:%s\n", persons[i].data.teacher.name);
printf("号码:%d\n", persons[i].data.teacher.id);
printf("性别:%c\n", persons[i].data.teacher.gender);
printf("职业:%s\n", persons[i].data.teacher.occupation);
printf("职务:%s\n", persons[i].data.teacher.position);
}
}
return 0;
}
```
以上代码定义了两个结构体 `Student` 和 `Teacher`,分别表示学生和教师。由于学生和教师的数据有些不同,因此需要分别定义不同的结构体。为了方便输入和输出,可以定义一个包含两种结构体的联合体 `data`,并定义一个包含类型和数据的结构体 `Person`。在输入和输出时,可以根据类型来判断数据是属于学生还是教师。
注意,在输入时需要对类型进行判断,只能输入 1 或 2,否则需要重新输入。此外,在输入字符串时需要注意使用 `%s` 而不是 `%c`。在输出时需要根据类型分别输出不同的数据。
阅读全文