5.15作业

#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;
}

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值