医药营销出来可以干嘛?:[向高手请教]C语言的一道小排序题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 15:38:12
题目大致是这样的:
有一组同学(人数不一定)的成绩(****要求是结构体形式*******)
我暂设八人,并设他们的学号,成绩分别为:
结构体如下:
mun score
1 48
2 86
3 100
4 96
5 60
6 83
7 21
8 88
要求按学生成绩从大到小排序输出(*****包括学号*****)
正常的排序我还会,但排序完后的结构体就改变的
但老师说********不许改变最初结构体的顺序*********
是不是要用两个结构体呀,一个是原始的,另一个是排序后的,然后输出后者,但我那样做程序运行不对,还请高手不吝赐教,感激万分!!!
(最好不用指针 最好有源代码 谢谢!谢谢!!)
正常的排序我还会,但排序完后的结构体就改变的
但老师说********不许改变最初结构体的顺序*********
是不是要用两个结构体呀,一个是原始的,另一个是排序后的,然后输出后者,但我那样做程序运行不对,还请高手不吝赐教,感激万分!!!
(最好不用指针 最好有源代码 谢谢!谢谢!!)

#include<stdio.h>
void main()
{
struct student
{
int num;
float score;
}stu[8]={1,48,2,86,3,100,4,96,5,60,6,83,7,21,8,88};//赋初值
int i,j,t,a[8];
for(i=0;i<8;i++)
a[i]=i;//这个数组是用来记录位置的,刚开始的时候第0位最大,第7位最小
for(i=1;i<8;i++)
for(j=0;j<8-i;j++)
if(stu[a[j]].score<stu[a[j+1]].score)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}//冒泡排序
printf("排序后的学号和分数\n");
printf("学号 分数\n");
for(i=0;i<8;i++)
printf("%d %.1f\n",stu[a[i]].num,stu[a[i]].score);
printf("未排序后的学号和分数\n");
printf("学号 分数\n");
for(i=0;i<8;i++)
printf("%d %.1f\n",stu[i].num,stu[i].score);//通过这个比较,应该可以看到结构体最初的顺序没有改变,不信你试
}

#define N 8
#include <stdio.h>
struct type{
int num;
int score;
}A[N];

void main()
{
int i,j;
/*
数组赋初值
*/
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(A[j].score<A[j+1].score)
{ int tmp;
tmp = A[j].num;A[j].num = A[j+1].num;A[j+1].num = tmp;
tmp = A[j].score;A[j].score = A[j+1].score;
A[j+1].score = tmp;

}
for(i=0;i<N;i++)
printf("num=%d,score=%d\n",A[i].num,A[i].score);