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