思维导图:
有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
typedef struct
{
char name[20];
char sex;
char job;
union
{
float score;
char position[20];
};
}B;
1,定义函数在堆区申请空间n
B p= (struct B * )malloc(sizeof(struct B) n );
2,定义函数实现录入学校人员信息
在输入分数或者职务是,需要判断职业。
3,定义函数输出学校人员信息
4,定义函数计算学生平均成绩
5,定义函数计算老师的个数
6,释放存储空间
mian:
#include "head.h"
//有若干个学校人员的信息,包括学生和教师。
//其中学生的数据包括:姓名、性别、职业s/S、分数。
//教师的数据包括:姓名、性别、职业t/T、职务。
//要求用同一个表格来处理以上数据。
int main(int argc, const char *argv[])
{
int n;
printf("请输入输入人员总个数:");
scanf("%d",&n);
person *p = create(n);
input(p,n);
output(p,n);
float ave = aver(p,n);
printf("学生的平均成绩为:%f\n",ave);
int num = num_t(p,n);
printf("老师的人数为:%d\n",num);
p = my_delete(p);
return 0;
}
test.c:
#include "head.h"
//1,定义函数在堆区申请空间n
// B *p= (struct B * )malloc(sizeof(struct B)* n );
person *create(int n)
{
person *p =(person *)malloc(sizeof(person)*n);
if (p==NULL){
printf("申请空间失败\n");
return NULL;
}
return p;
}
//2,定义函数实现录入学校人员信息
// 在输入分数或者职务是,需要判断职业。
void input(person *p,int n)
{
for(int i = 0;i<n;i++){
printf("请输入名字:");
scanf("%s",(p+i)->name);
printf("请输入性别:");
scanf(" %c",&(p+i)->sex);
printf("请输入职业:");
scanf(" %c",&(p+i)->job);
if ((p+i)->job=='s'||(p+i)->job=='S'){
printf("请输入成绩:");
scanf("%f",&(p+i)->score);
}
else if((p+i)->job=='t'||(p+i)->job=='T'){
printf("请输入职位:");
scanf("%s",(p+i)->position);
}
}
}
//3,定义函数输出学校人员信息
void output(person *p,int n)
{
for(int i = 0;i<n;i++){
printf("%s\t%c\t%c\t",(p+i)->name,(p+i)->sex,(p+i)->job);
if ((p+i)->job=='s'||(p+i)->job=='S'){
printf("%f\n",(p+i)->score);
}
else if((p+i)->job=='t'||(p+i)->job=='T'){
printf("%s\n",(p+i)->position);
}
}
}
//4,定义函数计算学生平均成绩
float aver(person *p,int n)
{
float a = 0,count = 0;
for(int i = 0;i<n;i++){
if((p+i)->job=='s'||(p+i)->job=='S')
a += (p+i)->score;
count++;
}
return a/count;
}
//5,定义函数计算老师的个数
int num_t(person *p,int n)
{
int count = 0;
for(int i = 0;i<n;i++){
if((p+i)->job=='t'||(p+i)->job=='T')
count++;
}
return count;
}
//6,释放存储空间
person *my_delete(person *p)
{
if(p==NULL)
return NULL;
free(p);
p = NULL;
return p;
}
head.h:
#ifndef Head_H
#define Head_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
char name[20];
char sex;
char job;
union
{
float score;
char position[20];
};
}person;
int num_t(person *p,int n);
person *my_delete(person *p);
float aver(person *p,int n);
person *create(int n);
void input(person * p,int n);
void output(person *p,int n);
#endif