成绩统计

//试题名称 成绩统计
//时间限制: 1 秒
//内存限制: 256KB
//
//问题描述
//有N(0 //
//输入说明
//第一行输入学生个数N,然后逐行输入N个学生信息,包括学号,姓名,三门课成绩,学号为正整数,姓名不超过10个字符,各门课程成绩为整数,用空格分隔。
//
//输出说明
//按照平均成绩由高到低输出学生信息,平均成绩相同时,则按照学号从小到大顺序输出,输出信息包括学号、姓名、平均成绩(保留1位小数),用空格分隔,每个学生信息占一行。
//
//输入样例
//6
//18001 LiMing 88 45 90
//18003 WangWei 66 60 68
//18004 ZhangSan 77 90 83
//18110 HanMeiMei 88 77 97
//18122 SuSan 66 23 87
//18008 YangYang 88 45 90
//18001 LiMing 88 45 90
//18003 WangWei 88 45 90
//18004 ZhangSan 88 45 90
//18110 HanMeiMei 88 45 90
//18122 SuSan 66 23 87
//18008 YangYang 88 45 90
//
//输出样例
//18110 HanMeiMei 87.3
//18008 YangYang 86.3
//18004 ZhangSan 83.3
//18001 LiMing 74.3
//18003 WangWei 64.7
//18122 SuSan 58.7
1.0 版本

#include
#include
struct line
{char hao[100][6];
 char name[100][20];
 int  score[100][3];
 int n;
 float avr[100];
}Stu;
int main()
{struct line Stu={{'\0'},{'\0'},{0},0,{0}};
     int i,j;
   	scanf("%d",&Stu.n);
	for(i=0;i<Stu.n;i++)
	{ scanf("%s %s",&Stu.hao[i],&Stu.name[i]);
	  for(j=0;j<3;j++)
	{scanf("%d",&Stu.score[i][j]);
	}
   }
   for(i=0;i<Stu.n;i++)
	  {for(j=0;j<3;j++)
	{Stu.avr[i]=Stu.avr[i]+Stu.score[i][j];
	}
	Stu.avr[i]=Stu.avr[i]/3.0;
    } 
    float temp;
	  char t[20];
     for(i=0;i<Stu.n-1;i++)
	    for(j=0;j<Stu.n-1-i;j++)
	    {if(Stu.avr[j]<Stu.avr[j+1]||(Stu.avr[j]==Stu.avr[j+1]&&strcmp(Stu.hao[j],Stu.hao[j+1])>0))
	    {temp=Stu.avr[j];
	     Stu.avr[j]=Stu.avr[j+1];
	     Stu.avr[j+1]=temp;
	     strcpy(t,Stu.name[j+1]);
	     strcpy(Stu.name[j+1],Stu.name[j]);
	     strcpy(Stu.name[j],t);
	     strcpy(t,Stu.hao[j+1]);
	     strcpy(Stu.hao[j+1],Stu.hao[j]);
	     strcpy(Stu.hao[j],t);
		}
		}
		for(i=0;i<Stu.n;i++)
	{printf("%s %s %.1f",Stu.hao[i],Stu.name[i],Stu.avr[i]);
	printf("\n");
	}
		return 0;
}

75分,我觉得把学号拿来当字符是很方便的,结果数字???!!

#include
#include
//int cmp(int a[],int b[])
//{int i,flag=1;
// for(i=0;i<6;i++)
// {if(a[i]>b[i]) {break;}
//  else if(a[i]
//  else continue;
// }
// return flag;
//}
//void exchange(int a[][5],int b[][5])
//{int temp,i;
//}
struct line
{int hao[100];
 char name[100][20];
 int  score[100][3];
 int n;
 float avr[100];
}Stu;
int main()
{struct line Stu={{0},{'\0'},{0},0,{0}};
     int i,j,k;
   	scanf("%d",&Stu.n);
	for(i=0;i<Stu.n;i++)
	{
	 scanf("%d %s",&Stu.hao[i],&Stu.name[i]);
	  for(j=0;j<3;j++)
		{scanf("%d",&Stu.score[i][j]);
		}
	}
   for(i=0;i<Stu.n;i++)
	  {for(j=0;j<3;j++)
	{Stu.avr[i]=Stu.avr[i]+Stu.score[i][j];
	}
	Stu.avr[i]=Stu.avr[i]/3.0;
    } 
    float temp;
	  char t[20];
     for(i=0;i<Stu.n-1;i++)
	    for(j=0;j<Stu.n-1-i;j++)
	    {if(Stu.avr[j]<Stu.avr[j+1]||(Stu.avr[j]==Stu.avr[j+1]&&(Stu.hao[j]>Stu.hao[j+1])))
	    {temp=Stu.avr[j];
	     Stu.avr[j]=Stu.avr[j+1];
	     Stu.avr[j+1]=temp;
	     strcpy(t,Stu.name[j+1]);
	     strcpy(Stu.name[j+1],Stu.name[j]);
	     strcpy(Stu.name[j],t);
	     temp=Stu.hao[j];
	     Stu.hao[j]=Stu.hao[j+1];
	     Stu.hao[j+1]=temp;
		}
		}
		for(i=0;i<Stu.n;i++)
	   {
		 printf("%d %s %.1f",Stu.hao[i],Stu.name[i],Stu.avr[i]);
		 printf("\n");
		}
		return 0;
}

走火入魔了,一直想着学号怎么处理,用数组一个数字一个数字的扫描进去,结果出来很多垃圾值,才发现学号应该首先是一个数字;

你可能感兴趣的:(xdoj,算法)