用devc++实现4.设有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。要求输入人员的数据,然后再输出。 要求使用结构体与共用体的知识
时间: 2023-07-10 13:06:22 浏览: 92
以下是使用结构体实现的代码:
```c++
#include <stdio.h>
#include <string.h>
struct Person {
char name[20];
char number[20];
char gender[10];
char job[20];
};
struct Student {
char name[20];
char number[20];
char gender[10];
char job[20];
char class[20];
};
struct Teacher {
char name[20];
char number[20];
char gender[10];
char job[20];
char position[20];
};
int main() {
int n;
printf("请输入人员数量:");
scanf("%d", &n);
struct Person people[n];
for (int i = 0; i < n; i++) {
printf("请输入第%d个人的姓名:", i + 1);
scanf("%s", people[i].name);
printf("请输入第%d个人的号码:", i + 1);
scanf("%s", people[i].number);
printf("请输入第%d个人的性别:", i + 1);
scanf("%s", people[i].gender);
printf("请输入第%d个人的职业:", i + 1);
scanf("%s", people[i].job);
if (strcmp(people[i].job, "学生") == 0) {
struct Student *student = (struct Student *) &people[i];
printf("请输入第%d个学生的班级:", i + 1);
scanf("%s", student->class);
} else if (strcmp(people[i].job, "教师") == 0) {
struct Teacher *teacher = (struct Teacher *) &people[i];
printf("请输入第%d个教师的职务:", i + 1);
scanf("%s", teacher->position);
}
}
printf("输出所有人员的信息:\n");
for (int i = 0; i < n; i++) {
printf("姓名:%s,号码:%s,性别:%s,职业:%s", people[i].name, people[i].number, people[i].gender, people[i].job);
if (strcmp(people[i].job, "学生") == 0) {
struct Student *student = (struct Student *) &people[i];
printf(",班级:%s\n", student->class);
} else if (strcmp(people[i].job, "教师") == 0) {
struct Teacher *teacher = (struct Teacher *) &people[i];
printf(",职务:%s\n", teacher->position);
}
}
return 0;
}
```
在输入人员数据时,根据职业判断是学生还是教师,使用强制类型转换将 `Person` 结构体转换为 `Student` 或 `Teacher` 结构体,然后再输入学生或教师特有的数据。在输出人员数据时,同样根据职业判断是学生还是教师,使用强制类型转换将 `Person` 结构体转换为 `Student` 或 `Teacher` 结构体,然后再输出学生或教师特有的数据。
以下是使用共用体实现的代码:
```c++
#include <stdio.h>
#include <string.h>
struct Person {
char name[20];
char number[20];
char gender[10];
char job[20];
union {
char class[20];
char position[20];
} info;
};
int main() {
int n;
printf("请输入人员数量:");
scanf("%d", &n);
struct Person people[n];
for (int i = 0; i < n; i++) {
printf("请输入第%d个人的姓名:", i + 1);
scanf("%s", people[i].name);
printf("请输入第%d个人的号码:", i + 1);
scanf("%s", people[i].number);
printf("请输入第%d个人的性别:", i + 1);
scanf("%s", people[i].gender);
printf("请输入第%d个人的职业:", i + 1);
scanf("%s", people[i].job);
if (strcmp(people[i].job, "学生") == 0) {
printf("请输入第%d个学生的班级:", i + 1);
scanf("%s", people[i].info.class);
} else if (strcmp(people[i].job, "教师") == 0) {
printf("请输入第%d个教师的职务:", i + 1);
scanf("%s", people[i].info.position);
}
}
printf("输出所有人员的信息:\n");
for (int i = 0; i < n; i++) {
printf("姓名:%s,号码:%s,性别:%s,职业:%s", people[i].name, people[i].number, people[i].gender, people[i].job);
if (strcmp(people[i].job, "学生") == 0) {
printf(",班级:%s\n", people[i].info.class);
} else if (strcmp(people[i].job, "教师") == 0) {
printf(",职务:%s\n", people[i].info.position);
}
}
return 0;
}
```
在 `Person` 结构体中定义了一个共用体 `info`,包括了学生的班级和教师的职务。在输入人员数据时,根据职业判断是学生还是教师,使用共用体中对应的成员变量输入数据。在输出人员数据时,同样根据职业判断是学生还是教师,使用共用体中对应的成员变量输出数据。
阅读全文