注册 登录
编程论坛 C++教室

[求助]哪里排序错了??

HaPpY随心 发布于 2007-10-06 18:38, 793 次点击

//今有8个学生,该学期有5门课程,请用叔祖存储学生学号、成绩,并把计算出来的
//总成绩、名次等也存储入该数组
//作者 HaPpY随心
//日期 2007/10/6
#include <iostream>
struct student
{ int num;
int score[5];
int tnum;
int rank;
};
using namespace std;
int main()
{ struct student a[8];
int i,j,k,tmp;
for(j=0;j<8;j++)
{
a[j].num=j+1;
}

for(j=1;j<=8;j++)
{
cout <<"N0"<<j<<"输入成绩:"<<endl;
for(i=0;i<5;i++)
{
cin >>a[j-1].score[i];
}
for(i=0,a[j-1].tnum=0;i<5;i++)
{
a[j-1].tnum+=a[j-1].score[i];
}
}
cout <<"NO"<<"\t"<<"score1"<<"\t"<<"score2"<<"\t"<<"score3";
cout <<"\t"<<"score4"<<"\t"<<"score5"<<"\t"<<"total"<<endl;
for(j=0;j<8;j++)
{
cout <<a[j].num<<"\t";
for(i=0;i<5;i++)
{
cout <<a[j].score[i]<<"\t";
}
cout <<a[j].tnum<<endl;
}
for(j=0;j<8;j++)
{
for(i=j;i<7;i++)
{
if(a[i].tnum>a[i+1].tnum)
{ k=i;
}
else k=i+1;

}
a[k].rank=j+1;
tmp=a[k].tnum;
a[k].tnum=a[j].tnum;
a[j].tnum=tmp;

}
cout <<"NO"<<"\t"<<"名次"<<endl;
for(j=0;j<8;j++)
{cout <<a[j].num<<"\t"<<a[j].rank<<endl;
}
}

10 回复
#2
栖柏2007-10-06 18:43
j=7和j=6时,a[k]是多少?
我想问下,你把问题具体说来
#3
csmenglei9512007-10-06 20:31
看的头疼...
#4
HaPpY随心2007-10-06 21:37
回复:(HaPpY随心)[求助]哪里排序错了??

for(j=0;j<8;j++)
{
for(i=j;i<7;i++)
{
if(a[i].tnum>a[i+1].tnum)
{ k=i;
}
else k=i+1;

}
a[k].rank=j+1;
tmp=a[k].tnum;
a[k].tnum=a[j].tnum;
a[j].tnum=tmp;

我是想根据a[I].tnum的比较,先找出最大的,对应的值为j+1(1);a[j].tnum和a[k].tnum交换位置,然后j++;使i从下一个开始
再找出次大的,对应的值为j+1(2);

#5
nuciewth2007-10-06 22:03

for(j=0;j<8;j++)
{
for(i=j;i<7;i++)//我觉得你的选择也有问题
{
if(a[i].tnum>a[i+1].tnum)
{ k=i;
}
else k=i+1;

}
a[k].rank=j+1;
//下面的交换,你只做了一个交换,应该是整个记录做交换.
tmp=a[k].tnum;
a[k].tnum=a[j].tnum;
a[j].tnum=tmp;

}

#6
HaPpY随心2007-10-06 23:23
回复:(nuciewth)for(j=0;j
谢谢BZ来知道
BZ可以对“整个记录做交换”做下说明么;
另外:可以介绍一些其他的排序方法么
#7
nuciewth2007-10-07 13:26
temp=a[k];
a[k]=a[j];
a[j]=temp;

这样就是整个记录做交换了.
#8
HaPpY随心2007-10-07 13:48
回复:(nuciewth)temp=a[k]; a[k]=a[j]; ...
谢谢,BZ指点
小弟刚学C++,以后还请多多指导
#9
nuciewth2007-10-07 13:58
呵呵.我只懂语法的一点皮毛.
再说我也不是C++的斑竹.
哈哈.
一起学习.
#10
HaPpY随心2007-10-07 14:47
回复:(nuciewth)呵呵.我只懂语法的一点皮毛.再说我...

//今有8个学生,该学期有5门课程,请用叔祖存储学生学号、成绩,并把计算出来的
//总成绩、名次等也存储入该数组
//作者 HaPpY随心
//日期 2007/10/6
#include <iostream>
struct student
{ int num;
int score[5];
int tnum;
int rank;
};
using namespace std;
int main()
{ struct student a[8],tmp;
int i,j,k,temp;
for(j=0;j<8;j++)
{
a[j].num=j+1;
}

for(j=1;j<=8;j++)
{
cout <<"N0"<<j<<"输入成绩:"<<endl;
for(i=0;i<5;i++)
{
cin >>a[j-1].score[i];
}
for(i=0,a[j-1].tnum=0;i<5;i++)
{
a[j-1].tnum+=a[j-1].score[i];
}
}
cout <<"NO"<<"\t"<<"score1"<<"\t"<<"score2"<<"\t"<<"score3";
cout <<"\t"<<"score4"<<"\t"<<"score5"<<"\t"<<"total"<<endl;
for(j=0;j<8;j++)
{
cout <<a[j].num<<"\t";
for(i=0;i<5;i++)
{
cout <<a[j].score[i]<<"\t";
}
cout <<a[j].tnum<<endl;
}
for(j=0;j<7;j++)
{
for(i=j,temp=a[i].tnum,k=i;i<7;i++)
{
if(temp>=a[i+1].tnum) continue;
if(temp<a[i+1].tnum)
{
k=i+1;
temp=a[i+1].tnum;
}

}
a[k].rank=j+1;
tmp=a[k];
a[k]=a[j];
a[j]=tmp;

}
a[j].rank=j+1;
cout <<"NO"<<"\t"<<"名次"<<endl;
for(j=0;j<8;j++)
{cout <<a[j].num<<"\t"<<a[j].rank<<endl;
}
}

#11
HaPpY随心2007-10-07 14:48
回复:(nuciewth)呵呵.我只懂语法的一点皮毛.再说我...
总算调试成功了
1