[Day2]数据结构

该程序定义了一个结构体用于存储学生和教师的信息,包括姓名、性别、职业以及分数或职务。通过使用C语言的结构体和联合体,实现了数据录入、输出、计算学生平均成绩和统计老师数量的功能。程序包括创建内存空间、输入输出处理、计算平均分和计数等函数。
摘要由CSDN通过智能技术生成

思维导图:
在这里插入图片描述
有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值