#include <stdio.h>
#include<string.h>
#include<stdlib.h>
//1.定义结构体B-->>学生的基本信息和老师的基本信息-->>三个成员变量+匿名联合体
typedef struct{
char name[20];
char sex;
char job;
union
{
float score;
char position[20];
};
} B;
//2.在堆区动态分配内存空间创建一个"B"类型的数组
//2.1接受一个参数n,表示人员数量
//2.2返回指向该数组的指针
//2.3使用malloc函数动态分配了n个B类型的内存空间
B *createBArray(int n){
B *p=(B*)malloc(sizeof(B) * n);
if(p==NULL){
printf("内存分配失败!\n");
return NULL;
}
return p;
}
//3.释放在堆区动态分配的内存空间
//3.1接受一个参数p,表示学校人员信息结构体指针
void freeBArray(B* p){
free(p);
}
//4.定义函数实现录入学校人员的信息
//4.1接受一个参数p,表示学校人员信息结构体指针
//4.2接受一个参数n,表示录入人员数量
void inputBInfo(B* p,int n){
for(int i=0;i<n;i++){
printf("---------------------\n");
printf("请输入姓名:");
scanf("%s",(p+i)->name);
getchar();
printf("请输入性别:");
scanf("%c",&(p+i)->sex);
getchar();
printf("请输入职业:");
scanf("%c",&(p+i)->job);
getchar();
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);
}else{
printf("请输入正确格式!\n");
printf("请重新输入职务:");
scanf("%s",(p+i)->position);
}
}
}
//5.定义函数输出学校人员信息
//5.1接受一个参数p,表示学校人员信息结构体指针
//5.2接受一个参数n,表示人员数量
void printfBInfo(B *p,int n){
printf("------------------------------------------\n");
printf("姓名\t性别\t职务\t分数\t职务\n");
printf("------------------------------------------\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("%.2f\t-\n", (p + i)->score);
} else if ((p + i)->job == 't' || (p + i)->job == 'T') {
printf("-\t%s\n", (p + i)->position);
}
}
printf("------------------------------------------\n");
}
//6.定义函数计算学生平均成绩
//6.1接受一个参数p,表示学校人员信息结构体指针
//6.2接受一个参数n,表示录入人员数量
//6.3返回学生平均成绩
void calculateAverageScore(B *p,int n){
float totalsore;
int studentnumber=0;
for(int i=0;i<n;i++){
if ((p + i)->job == 's' || (p + i)->job == 'S') {
totalsore=totalsore+((p+i)->score);
studentnumber++;
}
}
printf("学生的平均成绩:%.2f\n",totalsore/studentnumber);
}
//7.定义函数计算老师个数
//7.1接受一个参数p,表示学校人员信息结构体指针
//7.2接受一个参数n,表示录入人员数量
void calculateTeacherCount(B *p,int n){
int teachercount=0;
for(int i=0;i<n;i++){
if ((p + i)->job == 't' || (p + i)->job == 'T') {
teachercount++;
}
}
printf("老师数量:%d\n",teachercount);
}
int main(int argc, const char *argv[])
{
int n;
printf("-------------------------------------\n");
printf("请输入录入人员信息个数:");
scanf("%d",&n);
B* p=createBArray(n);
inputBInfo(p,n);
printfBInfo(p,n);
calculateAverageScore(p,n);
calculateTeacherCount(p,n);
freeBArray(p);
return 0;
}
结果: