主题:[原创]急求!请问大侠排序部分错在哪里?
标题: 学生信息管理
时 限: 1000 ms
内存限制: 20000 K
总时限: 3000 ms
描述: 用链式存储结构实现对一个班级学生信息管理。设计程序求出每个人的平均成绩并按平均成绩由高到底排序后输出学生记录。
输入: 人数n
人员记录1 (格式为: 学号 姓名 成绩1 成绩2 成绩3)
人员记录2
输出: 人员记录x 1
人员记录y 2
…
人员记录z n
输入样例: 3
1 孙俪莉 76 78 89
2 章子怡 72 56 67
3 刘德华 56 84 90
输出样例: 1 孙俪莉 76 78 89 81.00 1
3 刘德华 56 84 90 76.67 2
2 章子怡 72 56 67 65.00 3
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int num;
char name[20];
double mark[3];
double avr;
int rank;
struct LNode*next;
}Node;
int main()
{
int icount,jcount,sum=0,size;
/*-------------创建链表----------------------*/
Node*head,*p,*q,*s,*rear;
scanf("%d",&size);//输入链表尺寸;
p=(Node*)malloc(sizeof(Node));
p->next=NULL;
head=p;
for(icount=0;icount<size;icount++)
{
q=(Node*)malloc(sizeof(Node));
q->num=(icount+1);
sum=0;
scanf("%d%s",&q->rank,q->name);
for(jcount=0;jcount<3;jcount++)
{
scanf("%lf",&q->mark[jcount]);
sum=sum+q->mark[jcount];
}
q->avr=sum/3.00;
q->next=NULL;
p->next=q;
p=q;
}
/*------------链表建成-----------------*/
/*----------------排序----------------*/
rear=q->next=head->next;
sum=size;
p=q=rear->next;
for(icount=0;icount<size;icount++)
{
for(jcount=1;jcount<=sum;jcount++,p=p->next)
{
if(p->next->avr>q->avr){q=p;}
}
s=q->next;q->next=s->next;--sum;
printf("%s %lf\n",s->name,s->avr);
s->next=head->next;
head->next=s;q=p;
}
p=head->next;//output
for(icount=1;icount<=size;icount++)
{
printf("%d %s",p->rank,p->name);
for(jcount=0;jcount<3;jcount++)
{
printf(" %.2lf",p->mark[jcount]);
}
printf(" %.2lf",p->avr);
printf(" %d\n",icount);p=p->next;
}
return 0;
}
时 限: 1000 ms
内存限制: 20000 K
总时限: 3000 ms
描述: 用链式存储结构实现对一个班级学生信息管理。设计程序求出每个人的平均成绩并按平均成绩由高到底排序后输出学生记录。
输入: 人数n
人员记录1 (格式为: 学号 姓名 成绩1 成绩2 成绩3)
人员记录2
输出: 人员记录x 1
人员记录y 2
…
人员记录z n
输入样例: 3
1 孙俪莉 76 78 89
2 章子怡 72 56 67
3 刘德华 56 84 90
输出样例: 1 孙俪莉 76 78 89 81.00 1
3 刘德华 56 84 90 76.67 2
2 章子怡 72 56 67 65.00 3
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int num;
char name[20];
double mark[3];
double avr;
int rank;
struct LNode*next;
}Node;
int main()
{
int icount,jcount,sum=0,size;
/*-------------创建链表----------------------*/
Node*head,*p,*q,*s,*rear;
scanf("%d",&size);//输入链表尺寸;
p=(Node*)malloc(sizeof(Node));
p->next=NULL;
head=p;
for(icount=0;icount<size;icount++)
{
q=(Node*)malloc(sizeof(Node));
q->num=(icount+1);
sum=0;
scanf("%d%s",&q->rank,q->name);
for(jcount=0;jcount<3;jcount++)
{
scanf("%lf",&q->mark[jcount]);
sum=sum+q->mark[jcount];
}
q->avr=sum/3.00;
q->next=NULL;
p->next=q;
p=q;
}
/*------------链表建成-----------------*/
/*----------------排序----------------*/
rear=q->next=head->next;
sum=size;
p=q=rear->next;
for(icount=0;icount<size;icount++)
{
for(jcount=1;jcount<=sum;jcount++,p=p->next)
{
if(p->next->avr>q->avr){q=p;}
}
s=q->next;q->next=s->next;--sum;
printf("%s %lf\n",s->name,s->avr);
s->next=head->next;
head->next=s;q=p;
}
p=head->next;//output
for(icount=1;icount<=size;icount++)
{
printf("%d %s",p->rank,p->name);
for(jcount=0;jcount<3;jcount++)
{
printf(" %.2lf",p->mark[jcount]);
}
printf(" %.2lf",p->avr);
printf(" %d\n",icount);p=p->next;
}
return 0;
}