输入n个学生的学号、姓名、成绩。然后将学生按成绩从高到低排列后,输出排列后的结果。

输入n个学生的学号、姓名、成绩。然后将学生按成绩从高到低排列后,输出排列后的结果。(要求:1、排序使用冒泡法,将冒泡法利用指针写成函数;2、学生的信息可以定义一个结构类型的结构数组变量。)

注:输入信息要从终端输入
是的,这个程序是要C语言写出来的。。请大家把完整的程序代码写出来,不然我不给分哦

第1个回答  2007-01-20
如果用:
struct Student
{
char name[20];
int number ;
float score ;
struct Stuedent * next;
}Stu[20] ;

直接用套用(数组)冒泡法的算法.换个名字就可以了.你那应该有这算法把,不用我写出来.

若用连表的冒泡排序:
typedef struct Student
{
char name[20];
int number ;
float score ;
struct Stuedent * next;
}Stu ;

void print_elem(Stu * head)
{
Stu * temp ;
temp = head ;
while(temp)
{
printf("%s%d%f",temp->name,temp->number ,temp->score);
}
}

void sort(Stu * head)
{
Stu * p1;
Stu * p2;
Stu * change_temp = NULL ;
Stu * change_temp_pre = NULL;
p1 = p2 = head;

for( ; p1 ; p1 = p1->next )
{
change_temp = p1 ;
// 找到连表中的最大元素
for( p2=p1; p2 ; p2 = p2->next)
{
if( change_temp ->score = p2->score)
{
change_temp_pre = change_temp ;
change_temp = p2 ;
}
}
//使p1所指向找到的最大节点
if( change_temp != p1 )
{
change_temp_pre -> next = change_temp -> next ;
change_temp -> next = p1-next;
p1 -> next = change_temp ;
}
}
}
第2个回答  推荐于2018-03-22
下面程序运行成功:
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#define N 3 /*定义班级人数*/
struct Student /*学生信息结构体*/
{
char *number;
char *name;
float score;
}Stu[N];
boble(struct Student *a) /*冒泡排序算法*/
{
int i,j;
struct Student t;
for(j=1;j<N;j++) /*j用于控制i 的循环*/
for(i=0;i<N-j;i++) /*i每循环一次N值减少1,因为最大数已经沉底了*/
if (a[i].score>a[i+1].score) /*比较,如果当前数大于后一个数,就交换位置,这样每循环一次就有一个最大的数排到最后*/
{
t.number=a[i].number;
a[i].number=a[i+1].number;
a[i+1].number=t.number;

t.name=a[i].name;
a[i].name=a[i+1].name;
a[i+1].name=t.name;

t.score=a[i].score;
a[i].score=a[i+1].score;
a[i+1].score=t.score;

}
}
main()
{
int i,j;
float sc;
printf("input %d numbers like \"number name score\":\n",N); /*以学号 姓名 成绩顺序输入学生信息*/
for(i=0;i<N;i++) /*手动输入N个学生信息*/
{
Stu[i].number=(char *)malloc(20);
Stu[i].name=(char *)malloc(20);

scanf("%s %s %f",Stu[i].number,Stu[i].name,&sc);
Stu[i].score=sc;
}
boble(&Stu);/*调用冒泡函数*/
printf("\n");

printf("the sorted numbers :\n");
for(i=0;i<N;i++) /*列出排序结果,其中成绩保留两位小数*/
printf("%s %s %.2f\n",Stu[i].number,Stu[i].name,Stu[i].score);
}本回答被提问者和网友采纳
第3个回答  2007-01-19
晕,这个不是C语言嘛,2年前学的,忘记了哈哈
只记得,冒泡排序中,引用另外一个参数,来交换比较的两个数值的位置,