结构体共用体练习题

有若干个学校人员的信息,包括学生和教师。

学生的数据包括:姓名、性别、职业s/S、分数。

教师的数据包括:姓名、性别、职业t/T、职务。

要求用同一个表格来处理以上数据。

1,定义函数在堆区申请空间

2,定义函数实现录入学校人员信息

3,定义函数输出学校人员信息

4,定义函数计算学生平均成绩

5,定义函数计算老师的个数

6,释放存储空间

head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

typedef struct
{
        char name[10];
        char sex[10];
        char job[10];
        union {
                float score;
                char occupation[10];
        };
}People,*Pointer;

Pointer Space(int n);

void input(Pointer p,int n);
void output(Pointer p,int n);
float average_s(Pointer p,int n);
int count_t(Pointer p,int n);

#endif

func.c

#include "head.h"

Pointer Space(int n)
{
        Pointer p=(People*)malloc(sizeof(People)*n);
        if(!p)
                return NULL;
        return p;
}

void input(Pointer p,int n)
{
        char tmp[10];
        bool flag=false;
        for (int i=0; i<n; i++)
        {
                printf("name:");
                scanf("%s",p[i].name);
                printf("sex:");
                scanf("%s",p[i].sex);
                do
                {
                        printf("job:");
                        scanf("%s",tmp);
                        if(!strcmp(tmp,"s")||!strcmp(tmp,"S"))
                        {
                                printf("score:");
                                scanf("%f",&p[i].score);
                                flag=true;
                        }
                        else if(!strcmp(tmp,"t")||!strcmp(tmp,"T"))
                        {
                                printf("occupation:");
                                scanf("%s",p[i].occupation);
                                flag=true;
                        }
                        else
                        {
                                printf("error\n");
                        }
                } while (!flag);
                strcpy(p[i].job,tmp);
                flag=false;
        }
}

void output(Pointer p,int n)
{
        for (int i=0; i<n; i++)
        {
                if(!strcmp(p[i].job,"s")||!strcmp(p[i].job,"S"))
                {
                        printf("name:%s sex:%s job:%s score:%.2f\n",p[i].name,p[i].sex,p[i].job,p[i].score);
                }
                else
                {
                        printf("name:%s sex:%s job:%s occupation:%s\n",p[i].name,p[i].sex,p[i].job,p[i].occupation);
                }
        }
}

float average_s(Pointer p,int n)
{
        float sum=0;
        int count=0;
        for (int i=0; i<n; i++)
        {
                if(!strcmp(p[i].job,"s")||!strcmp(p[i].job,"S"))
                {
                        sum+=p[i].score;
                        count++;
                }
        }
        return sum/count;
}

int count_t(Pointer p,int n)
{
        int count=0;
        for (int i=0; i<n; i++)
        {
                if(!strcmp(p[i].job,"t")||!strcmp(p[i].job,"T"))
                {
                        count++;
                }
        }
        return count;
}

main.c

#include "head.h"
#define N 5
int main(int argc, const char *argv[])
{
        Pointer p=Space(N);
        input(p,N);
        output(p,N);
        int count=count_t(p,N);
        int average=average_s(p,N);
        printf("teacher:%d\naverage:%d\n",count,average);
        free(p);
        return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值