网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 395|回复: 0
打印 上一主题 下一主题

【C语言】共用体的应用

[复制链接]

686

主题

693

帖子

3101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3101
跳转到指定楼层
楼主
发表于 2024-6-24 16:25:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wander 于 2024-6-24 16:27 编辑

共用体在一般的编程中应用较少,在单片机中应用较多。对于 PC 机,经常使用到的一个实例是: 现有一张关于学生信息和教师信息的表格。学生信息包括姓名、编号、性别、职业、分数,教师的信息包括姓名、编号、性别、职业、教学科目。请看下面的表格:
NameNumSexProfessionScore / Course
HanXiaoXiao501fs89.5
YanWeiMin1011mtmath
LiuZhenTao109ftEnglish
ZhaoFeiYan982ms95.0

f 和 m 分别表示女性和男性,s 表示学生,t 表示教师。可以看出,学生和教师所包含的数据是不同的。现在要求把这些信息放在同一个表格中,并设计程序输入人员信息然后输出。

如果把每个人的信息都看作一个结构体变量的话,那么教师和学生的前 4 个成员变量是一样的,第 5 个成员变量可能是 score 或者 course。当第 4 个成员变量的值是 s 的时候,第 5 个成员变量就是 score;当第 4 个成员变量的值是 t 的时候,第 5 个成员变量就是 course。

经过上面的分析,我们可以设计一个包含共用体的结构体,请看下面的代码:
  • #include <stdio.h>
  • #include <stdlib.h>
  • #define TOTAL 4  //人员总数
  • struct{
  •     char name[20];
  •     int num;
  •     char sex;
  •     char profession;
  •     union{
  •         float score;
  •         char course[20];
  •     } sc;
  • } bodys[TOTAL];
  • int main(){
  •     int i;
  •     //输入人员信息
  •     for(i=0; i<TOTAL; i++){
  •         printf("Input info: ");
  •         scanf("%s %d %c %c", bodys[i].name, &(bodys[i].num), &(bodys[i].sex), &(bodys[i].profession));
  •         if(bodys[i].profession == 's'){  //如果是学生
  •             scanf("%f", &bodys[i].sc.score);
  •         }else{  //如果是老师
  •             scanf("%s", bodys[i].sc.course);
  •         }
  •         fflush(stdin);
  •     }
  •     //输出人员信息
  •     printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n");
  •     for(i=0; i<TOTAL; i++){
  •         if(bodys[i].profession == 's'){  //如果是学生
  •             printf("%s\t%d\t%c\t%c\t\t%f\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.score);
  •         }else{  //如果是老师
  •             printf("%s\t%d\t%c\t%c\t\t%s\n", bodys[i].name, bodys[i].num, bodys[i].sex, bodys[i].profession, bodys[i].sc.course);
  •         }
  •     }
  •     return 0;
  • }

运行 结果:
Input info: HanXiaoXiao 501 f s 89.5↙Input info: YanWeiMin 1011 m t math↙Input info: LiuZhenTao 109 f t English↙Input info: ZhaoFeiYan 982 m s 95.0↙Name            Num     Sex     Profession      Score / CourseHanXiaoXiao     501     f       s               89.500000YanWeiMin       1011    m       t               mathLiuZhenTao      109     f       t               EnglishZhaoFeiYan      982     m       s               95.000000



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 09:47 , Processed in 0.032655 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表