例43:有若干个人员的数据,其中有学生和老师,学生的数据包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职务、职业。要求用C语言编程实现同一个表格输出。
解题思路:可以看出:学生和教师的数据的项目大多数是相同的,即职位不同,学生是班级,老师是职位,所以共同的部分可以用共用体。
main函数之前定义了外部的结构体数组person,在结构体类型声明中包括了共用体类型category成员,在这个共用体成员中又包括两个成员。
源代码演示:
#include<stdio.h>//头文件
struct //定义结构体
{
int num;//编号
char name[20];//姓名
char sex;//性别
char job;//工作
union //联合体
{
int class_Number;
char position[10];
} category; //共用体变量
}person[2];
int main()//主函数入口
{
int i;//定义整型变量
for(i=0;i<2;i++)//for循环2次
{
printf("请输入数据:\n");//提示语句
//输入信息
scanf("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job); //person[i].name前面不加&照样可以运行
if(person[i].job=='s')//如果工作是s
{
scanf("%d",&person[i].category.class_Number);
}
else if(person[i].job=='t')//如果工作是s
{
scanf("%s",&person[i].category.position);
}
else
{
printf("输入错误\n");//提示语句
}
}
printf("\n");//换行
printf("号码 名字 性别 工作 班级/职位\n");//提示语句
for(i=0;i<2;i++)//for循环2次
{
if(person[i].job=='s')//如果工作是s
{
//输出结果
printf("%-6d%-15s%-4c%-8c%-10d\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.class_Number);
}
else
{
//输出结果
printf("%-6d%-15s%-4c%-8c%-10s\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.position);
}
}
return 0;//主函数返回值为0
}
编译运行结果如下:
请输入数据:
10010 张三 M t teacher
请输入数据:
10012 李四 F s 404
号码 名字 性别 工作 班级/职位
10010 张三 M t teacher
10012 李四 F s 404
--------------------------------
Process exited after 35.61 seconds with return value 0
请按任意键继续. . .
更多案例可以go公众号:C语言入门到精通
正文完