实验六、结构体struct联合体union的应用
知识拓展:
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为: struct 结构体名{
结构体所包含的变量或数组
};
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。
C语言中的union 是联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值。
联合”与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。
traverseLinkedList.c 创建并遍历输出链表
(1)程序说明:利用定义结构体定义LNode指针节点,内部元素包括int类型变量 data,还有指向下一个LNode指针的next,实现初始化CreateList的方法,从控制台输入每个节点的值,以此来初始化链表实现print()函数来对链表进行遍历。
(2)实验代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
/*
程序说明:利用定义结构体定义LNode指针节点,内部元素包括int类型变量 data,还有指向下一个
LNode指针的next,实现初始化CreateList的方法,从控制台输入每个节点的值,以此来初始化链表
实现print()函数来对链表进行遍历。
*/
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
// 建立n个节点的链表
LinkList CreateList(int n);
void print(LinkList h);
int main()
{
LinkList Head=NULL;
int n;
printf("请输入将要输入数字的个数:\n");
scanf("%d",&n);
Head=CreateList(n);
printf("刚刚建立的各个链表元素的值为:\n");
print(Head);
printf("\n\n");
return 0;
}
LinkList CreateList(int n)
{
LinkList L,p;
int i;
L=(LNode*)malloc(sizeof(LNode));
/*
请在此完成功能:从输入台读入数据完成链表的初始化
*/
// for(i=1;i<=n;i++)
// {
// ...
// p=(LinkList)malloc(sizeof(LNode));
// printf("请输入第%d个元素的值:",i);
// scanf("%d",&(p->data));
// ...
// }
return L;
}
void print(LinkList h)
{
/*
请在此完成功能:将链表进行输出,如果链表节点为NULL,则退出。
*/
}
unionAndStruct.c 在结构体中使用union合同体
(1)程序说明:
设计程序,用结构体来存储姓名、学号、性别、职业,并且使用union来存储教师的课程名称或者学生的考试分数。其中性别用字符’f’和’m’表示女性和男性,职业用’s’和’t’表示学生和老师。要求从控制台读入四位人员的信息(包括姓名、学号、性别、职业),并打印在输出台
例如:
示例输入:
HanXiaoXiao 501 f s 89.5
YanWeiMin 1011 m t math
LiuZhenTao 109 f t English
ZhaoFeiYan 982 m s 95.0
示例输出:
Name Num Sex Profession Score / Course
HanXiaoXiao 501 f s 89.500000
YanWeiMin 1011 m t math
LiuZhenTao 109 f t English
ZhaoFeiYan 982 m s 95.000000
(2)实验代码:
/*
程序说明:设计程序,用结构体来存储姓名、学号、性别、职业,并且使用union来
存储教师的课程名称或者学生的考试分数。其中性别用字符'f'和'm'表示
女性和男性,职业用's'和't'表示学生和老师。
要求从控制台读入四位人员的信息(包括姓名、学号、性别、职业),并打印在输出台
例如:
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 / Course
HanXiaoXiao 501 f s 89.500000
YanWeiMin 1011 m t math
LiuZhenTao 109 f t English
ZhaoFeiYan 982 m s 95.000000
*/
#include <stdio.h>
#include <stdlib.h>
#define TOTAL 4 //人员总数
// 采用无名构造体 初始化了一个bodys数组,数组大小为TOTAL
struct{
/*
在此保存人员信息
*/
char name[20];
} bodys[TOTAL];
int main(){
int i;
//输入人员信息
for(i=0; i<TOTAL; i++){
/*
从控制台输入人员信息
*/
}
//输出人员信息
printf("\nName\t\tNum\tSex\tProfession\tScore / Course\n");
for(i=0; i<TOTAL; i++){
/*
向输出台输出人员信息
*/
}
return 0;
}