学生成绩简单统计

写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),最后输出每门课的平均成绩(浮点表示)和最低最高成绩。

代码如下:

#include <stdio.h>

typedef struct {
    char name[20];
    int score[3];
} Student;
 
//    输入一个学生的数据
Student* student_input(Student *pStudent);
//    输出一个学生的数据,包括平均成绩
void student_print(const Student *pStudent);
//    计算一个学生的平均成绩
double student_average(const Student *pStudent);    
//    获得学生的一个成绩
int student_get_score(const Student *pStudent, int index);
//	  学生个数
double subject_average(const Student *pStudent, int index);
//	  各科平均分
int subject_min(const Student *pStudent,int index);
//	  各科最低分
int subject_max(const Student *pStudent,int index);
//    各科最高分

const int number = 10;		//总人数

Student* student_input(Student *pStudent)
{
	scanf("%s",&pStudent->name);
	for(int i=0;i<3;i++)
		scanf("%d",&pStudent->score[i]);
	return pStudent;
}

void student_print(const Student *pStudent)
{
	double avg=student_average(pStudent);
	printf("%s\t",pStudent->name);
	for(int i=0;i<3;i++)
	{
		printf("%d\t",pStudent->score[i]);
	}
	printf("%.5f\t",avg);
}

double student_average(const Student *pStudent)
{
	double sum=0.0;
	for(int i=0;i<3;i++)
	{
		sum+=pStudent->score[i];
	}
	return sum/3;
}

int student_get_score(const Student *pStudent, int index)
{
	return pStudent->score[index];
}

double subject_average(const Student *pStudent, int index)
{
	double sum=0.0;
	for(int i=0;i<number;i++)
	{
		sum+=student_get_score(pStudent,index);
		pStudent++;
	}
	return sum/number;
}

int subject_min(const Student *pStudent,int index)
{
	int minScore = student_get_score(pStudent,index);
	pStudent++;
	for(int i=1;i<number;i++)
	{
		int temp = student_get_score(pStudent,index);
		if(temp<minScore)
			minScore=temp;
		pStudent++;
	}
	return minScore;
}

int subject_max(const Student *pStudent,int index)
{
	int maxScore = student_get_score(pStudent,index);
	pStudent++;
	for(int i=1;i<number;i++)
	{
		int temp = student_get_score(pStudent,index);
		if(temp>maxScore)
			maxScore=temp;
		pStudent++;
	}
	return maxScore;
}

int main()
{
	printf("Enter name and scores which separated by a space.\n");
	Student student[number];
	Student *pStudent;
	pStudent=&student[0];
	int subject_number = sizeof(pStudent->score)/sizeof(pStudent->score[0]);	//总共多少科目
	for(int i=0;i<number;i++)
	{
		pStudent=student_input(&student[i]);
		pStudent++;
	}

	printf("no\tname\tscore1\tscore2\tscore3\taverage\n");
	pStudent=&student[0];
	for(int i=0;i<number;i++)
	{
		printf("%d\t",i+1);
		student_print(pStudent);
		pStudent++;
		printf("\n");
	}

	//平均分
	pStudent=&student[0];
	printf("\tAverage:");
	for(int i=0;i<subject_number;i++)
	{
		double avg=subject_average(pStudent,i);
		printf("%.1f\t",avg);
	}
	printf("\n");
	//min
	printf("\tMin:\t");
	for(int i=0;i<subject_number;i++)
	{
		int min=subject_min(pStudent,i);
		printf("%d\t",min);
	}
	printf("\n");
	//max
	printf("\tMax:\t");
	for(int i=0;i<subject_number;i++)
	{
		int max=subject_max(pStudent,i);
		printf("%d\t",max);
	}
	printf("\n");
	return 0;
}
效果如下:



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值