我看了你的程序,觉得你的程序需要用结构体才行,并做了修改。完整的程序如下:
#include
#define N 50
struct student{
int a,b,c,d,sum;
char string[10];
};
int main()
{
student stu[N],temp;
int i,n,p,j;
printf("输入学生人数:\n");
scanf("%d",&n);
for(i=0;i
printf("第%d个学生姓名: 学号: 语文成绩: 数学成绩: 英语成绩:\n ",i+1);
scanf("%s %d %d %d %d",&stu[i].string,&stu[i].a,&stu[i].b,&stu[i].c,&stu[i].d);
printf("%s的总分为%d\n",stu[i].string,stu[i].b+stu[i].c+stu[i].d);
}
printf("语文的分数与姓名排序为:" );
for(j=0;j
{ temp=stu[p];
stu[p]=stu[p+1];
stu[p+1]=temp;
}
}
for(p=0;p
printf("\n");
printf("数学的分数与姓名排序为:" );
for(j=0;j
{ temp=stu[p];
stu[p]=stu[p+1];
stu[p+1]=temp;
}
}
for(p=0;p
printf("\n");
printf("英语的分数与姓名排序为:" );
for(j=0;j
{ temp=stu[p];
stu[p]=stu[p+1];
stu[p+1]=temp;
}
}
for(p=0;p
printf("\n");
printf("总分数和姓名排序为:" );
for(i=0;i
for(j=0;j
for (p=0;p
{ temp=stu[p];
stu[p]=stu[p+1];
stu[p+1]=temp;
}
}
for(p=0;p
printf("\n");
return 0;
}
大致看了下,给分数排序的时候没纪录一个id ,这样排下来分数是按顺序排了,名字却还是原来的排序,比如:小王 2 ,小李 5, 小张 3
排下来变成: 2 小王,3 小李, 5 小张 这样就乱了
主要就是这里吧,在排序的时候应该给每个学生加一个编号的属性,排序只是改变编号顺序,读取的时候按编号读取就不会乱了,或者每次排序的时候所有的数值都要跟着变幻位置,比如
if (b[p]>b[p+1])
{ temp=b[p];
b[p]=b[p+1];
b[p+1]=temp;
}
} 里面应该写成
if (b[p]>b[p+1])
{ temp=b[p];
b[p]=b[p+1];
b[p+1]=temp;
temp=c[p];
c[p]=c[p+1];
c[p+1]=temp;
....
}
}
有说的不对的地方见谅
你可以再编译时候直接百度一下错误,上面会有解释的
不想看!