树莓派(5)C语言实验六

实验六、结构体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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值