有若干个学校人员的信息,包括学生和教师。
学生的数据包括:姓名、性别、职业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;
}