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

奇怪的排序有关问题!

2012-03-05 
奇怪的排序问题!!! 程序实现10个学生三门课成绩的输入,求出总成绩后并按高低从高到低排序。试过很多版本的

奇怪的排序问题!!!

程序实现10个学生三门课成绩的输入,求出总成绩后并按高低从高到低排序。试过很多版本的冒泡排序法,但都不能实现正常排序(当学生人数N较小时却可以正常排序)
请大虾指教!!!(下面的程序在排序时通过交换指向数组的数组指针来实现排序,没有改变数据的位置)

#include   <stdio.h>
#include   <string.h>


#define                 N                           10

struct   student   {
long   num;
int   math_score;
int   eng_score;
int   com_score;
int   totle;
float   ave;
};

void   order(struct   student   array[]   ,   struct   student   *poi[]);

void   main()
{  
int   i;
struct   student   p[N];
struct   student   *point[N];

printf   ( "%s%s ", "please   input   source   data:\n ",
"Student 's   ID   --   Maths   score   --   English   score   --   Computer   score   \n ");

for   (i   =   0;   i   <   N;   i++)
{
        scanf( "%ld   %d   %d   %d ",&p[i].num   ,&p[i].math_score   ,&p[i].eng_score,   &p[i].com_score);
p[i].totle   =   p[i].math_score   +   p[i].eng_score   +   p[i].com_score;
p[i].ave     =   (float)p[i].totle/3;
point[i]     =   p+i   ;
}

printf( "the   ordered   list   is:\n "
        "%5s   %15s   %10s   %10s   %10s   %10s   %10s\n ", "order ", "ID ", "maths ", "English ", "Computer ", "Totle ", "Average ");
        order(p   ,   point);

}


void   order   (struct   student   array[]   ,   struct   student   *poi[])
{
    struct   student   *temp;
int   i,j,k,n;
for(j   =   N   -   1;   j   >   0;   j--)
for(i   =   0;   i   <   j;   i++)
{
k   =   i   +   1;
if(array[i].ave   >   array[k].ave)
{
temp   =   poi[i];
poi[i]   =   poi[k];
poi[k]   =   temp;
}
}
n=0;
for(i=0;i <N   ;i++)
{
printf( "%3d   %18ld   %8d   %10d   %10d   %12d   %8.2f\n ",n   +   1,poi[i]-> num,poi[i]-> math_score   ,poi[i]-> eng_score   ,   poi[i]-> com_score   ,   poi[i]-> totle   ,   poi[i]-> ave);
n++;
printf( "\n ");
}
}

[解决办法]
/*if(array[i].ave > array[k].ave) */
if ( poi[i]-> ave > poi[k]-> ave )
{
temp = poi[i];
poi[i] = poi[k];
poi[k] = temp;
}

热点排行