求高手解答C++编程问题!感激不尽!

来源:百度知道 编辑:UC知道 时间:2024/06/11 02:50:51
题目:编一个C程序,它能读入一个学生登记表(学生数<100),并把它按6门课程成绩之和从小到大排序后输出,每个学生登记项包含学号(int型), 6门课程成绩(均为整型),当读到学号值为-1时,表示输入结束,-1不算在内。输入时,相邻两数据间用空格隔开。
以下是本人编写的程序,程序调试没什么错,但运行结果不对!请高手指教! #include<stdio.h>
#include<string.h>
#include<math.h>
struct student
{int num;
int score[6];
int total;
};
void main()
{struct student s[100],x;
int i=0,j,k,n,m;
printf("please enter student data:\n");
for(i=0;i<100;i++)
{scanf("%d",&s[i].num);
if(s[i].num==-1) break;
s[i].total=0;
for(m=0;m<6;m++)
{scanf("%d",&s[i].score[m]);
s[i].total+=s[i].score[m];
}
}
n=i;
for(k=0;k<n;k++)
for(j=n-1,i=0;i<n-k;i++,j--)
if(s[j].total<s[j-i].total)
{x.num=s[j].num;
for(m=0;m<6;m++)
x.score[m]=s[j].score[m];
x.total=s[j].total;
s[j].num=s[j-1].num;
for(m=0;m<6;m++)

稍微改了下,你的循环交换里面有点乱
#include<stdio.h>
#include<string.h>
#include<math.h>
struct student
{
int num;
int score[6];
int total;
};
void main()
{
struct student s[100],x;
int i=0,j,k,n,m;
printf("please enter student data:\n");
for(i=0;i<100;i++)
{
scanf("%d",&s[i].num);
if(s[i].num==-1)
break;
s[i].total=0;
for(m=0;m<6;m++)
{
scanf("%d",&s[i].score[m]);
s[i].total+=s[i].score[m];
}
}
n=i;
for(k=0;k<n;k++)
for(j=k+1;j<n;j++)
if(s[j].total<s[j-1].total)
{
x.num=s[j].num;
for(m=0;m<6;m++)
x.score[m]=s[j].score[m];
x.total=s[j].total;
x.num = s[j].num;

for(m=0;m<6;m++)
s[j].score[m]=s[j-1].score[m];
s[j].total=s[j-1].total;
s[j].num=s[j-1].