游客 Signup | Login
中文 | En

2967 - 【设计型】第12章:结构体和共同体 实验题 学生成绩管理系统(4)

某班有不超过30人(具体人数有键盘输入)参加期末考试,最多不会超过6门(具体门数由键盘输入)。参考例12.7,定义数据类型,用结构体数组做函数参数,编程实现:录入每个学生的学号、姓名、和各科考试成绩,按每个学生的总分由高到低排出名次。(要求用子函数解决)

Input

输入学生数n;

输入课程数m;

输入学生的学号、姓名、成绩;

Output

每一行输出学生的学号,姓名,总分。(中间用空格间隔)

Examples

Input

2
3
20130143
李军
78
87
87
20130144
孙坚
97
97
97

Output

20130144 孙坚 291
20130143 李军 252

Solution C

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max_len 10
#define stu_num 30
#define course_num 6
typedef struct student 
{
	long num;
	char name[max_len];
	float score[course_num];
	float sum;
	float aver;	
}STU;
void ReadScore(STU stu[],int n,int m)
{
	int i,j;
	char ch;
	for(i=0;i<n;i++)
	{
		scanf("%ld",&stu[i].num);
		scanf("%s",stu[i].name);
		for(j=0;j<m;j++)
		{
			scanf("%f",&stu[i].score[j]);
		}
	}
}
void aver_sum(STU stu[],int n,int m) 
{
	int i,j;
	for(i=0;i<n;i++)
	{ 
		stu[i].sum=0;
		for(j=0;j<m;j++)
		{stu[i].sum=stu[i].sum+stu[i].score[j];
		 }
		 stu[i].aver=stu[i].sum/m;
	}
} 
int Ascending(float a,float b)
{
	return a<b;
} 
int Descending(float a,float b)
{
	return a>b;
}
void SwapFloat (float *x,float *y)
{
float temp;
temp=*x;
*x=*y;
*y=temp;	
} 
void SwapLong (long *x,long *y)
{
	long temp;
	temp=*x;
*x=*y;
*y=temp;
}
void SwapChar(char x[],char y [])
{
	char temp[max_len];
	strcpy(temp,x);
	strcpy (x,y);
	strcpy(y,temp);
}
void printscore (STU stu[],int n,int m )
{
int i;
for(i=0;i<n;i++)
{
	printf("%ld %s %.0f\n",stu[i].num,stu[i].name,stu[i].sum);
}	
}
void sortscore (STU stu[],int n,int m,int (*compare)(float a,float b))
{
	int i,j,k,t;
	for(i=0;i<n-1;i++)
	{
	k=i;	
	for(j=i+1;j<n;j++)
	{
		if((*compare)(stu[j].sum,stu[k].sum))k=j;
	}
	if(k!=i)
	{
		for(t=0;t<m;t++)
		{
			SwapFloat(&stu[k].score[t],&stu[i].score[t]);
		}
		SwapFloat (&stu[k].sum,&stu[i].sum);
		SwapFloat (&stu[k].aver,&stu[i].aver);
		SwapLong (&stu[k].num,&stu[i].num);
		SwapChar (stu[k].name,stu[i].name);
	}
	}
}

int main()
{
int n=0,m=0;
STU stu[stu_num];
scanf("%d",&n);
scanf("%d",&m);
ReadScore(stu,n,m);
aver_sum(stu,n,m);
sortscore(stu,n,m,Descending);
printscore(stu,n,m);
return 0;
}

Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题