首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求教一个C语言标题,关于结构体的

2012-09-14 
求教一个C语言题目,关于结构体的Description给出一个班的成绩情况,请计算平均分,并按平均分进行排名。输入

求教一个C语言题目,关于结构体的
Description 
给出一个班的成绩情况,请计算平均分,并按平均分进行排名。输入 第一行是一个整数K,表示样例个数。每个样例的第一行是两个正整数N(N<=40)和M(M<=10),分别表示班上的人数信息,课程的门数。以后的N行,每行一个字符串和M个整数,字符串表示学生姓名(字符串不超过10个字符,只含英文字母),M个整数表示M门课的成绩。输出 每个样例输出一个排名结果,一行为一个学生的成绩信息。包含3个部分的信息,第一个是一个整数,表示排名,从1开始计数;第二部分是学生的姓名;第三部分是一个浮点数,表示学生的平均成绩,保留1位小数。排名按平均成绩从高到低排列,如果平均成绩相同,按姓名的字典序排列,其排名相同,后面的排名依次后推。三者之间用一个空格隔开,行末无空格。 
  
Sample Input  
1
4 2
eric 80 90
rose 70 80
john 80 70
jone 60 60 
  
Sample Output  
1 eric 85.0
2 john 75.0
2 rose 75.0
4 jone 60.0 

我的代码是这样的,测试结果是对的,但交到OJ上面总是爆错,wrong answer,请问一下是怎么回事?
#include<stdio.h>
#include<string.h>
struct Student
  {
  int num;
  char name[12];
  float score[12];
  float average;
  };
int main()
{
  struct Student stu[45]={};
  struct Student temp;
  int k,n,m,i,j,p,h,g;
  scanf("%d",&k);
  for(i=0;i<k;i++)
  {
  scanf("%d %d\n",&n,&m);
  for(j=0;j<n;j++)
  {
  scanf("%s",stu[j].name);
  for(p=0;p<m;p++)
  {
  scanf("%f",&stu[j].score[p]);
  }
  for(p=0;p<m;p++)
  {
  stu[j].average+=stu[j].score[p];
  }
  stu[j].average=stu[j].average/m;
  }
  for(j=0;j<n-1;j++)
  {
  h=j;
  for(p=j+1;p<n;p++)
  {
  if(stu[p].average>stu[h].average)h=p;
  }
  temp=stu[h];stu[h]=stu[j];stu[j]=temp; //先按成绩排序
  }
  for(j=0;j<n-1;j++)
  {
  for(p=j+1;p<n;p++)
  {
  if(stu[j].average==stu[p].average)
  {
  if(strcmp(stu[j].name,stu[p].name)>0)
  temp=stu[j];stu[j]=stu[p];stu[p]=temp; //再按姓名排序
  }
  }
  }
  for(j=0;j<n;j++)
  {
  stu[j].num=j+1;
  }
  for(j=0;j<n;j++)
  {
  if(stu[j].average==stu[j+1].average)
  stu[j+1].num=stu[j].num; //将相同成绩的同学序号弄成一样
  }
  for(j=0;j<n;j++)
  {
  printf("%d %s %.1f\n",stu[j].num,stu[j].name,stu[j].average);
  }
  }
  return 0;
}


[解决办法]

探讨

这个不是要自己手动输入的吗?那怎么初始化?引用:
把你的stu[45]初始化一下,不同的编译器可能给变量的初值不同

[解决办法]

for(p=0;p<m;p++)
{
stu[j].average+=stu[j].score[p];
}
因为对你这句可能会有影响。

热点排行