这个问题不是很菜
今天老师出了个问题,遇到一个瓶颈。问题是将学生的成绩排序,然后输出所有学生的名字。
排序很简单,我不能解决的是排序后会破坏以前的数组对应的值,感性些就是这样。
a[1]=4 a[2]=6 a[3]=1 a[4]=9
排序后角标对应的数字发生变化,在输出时学号与名次的对应不知道怎么算。
望各位指点一二
2011-04-18 19:45
程序代码:#include<stdio.h>
#define M 500
//定义结构体
struct student
{int student_num;
int grade;
};
//按学生的成绩对学生进行排序,由高分到低分
void bubblesort(struct student list[],int last)
{struct student temp;
for(int current=0;current<last;current++)
{for(int walk=last-1;walk>current;walk--)
{
if(list[walk].grade>list[walk-1].grade)
{
temp=list[walk];
list[walk]=list[walk-1];
list[walk-1]=temp;
}
}
}
return;
} //bubblesort
int main()
{ //local declaration
int num;
int i;
struct student student_arr[M];
//statements
scanf("%d",&num); //学生的个数
for(i=0;i<num;i++)
scanf("%d%d",&student_arr[i].student_num,&student_arr[i].grade); //输入学生的学号和学生的成绩
bubblesort(student_arr,num); //排序
for(i=0;i<num;i++)
printf("%d\n",student_arr[i].student_num);
return 0;
} //main

2011-04-18 20:04
2011-04-18 20:22
程序代码:#include<stdio.h>
int main()
{
int a[50],n;
printf("班级人数:\n");
scanf("%d",&n);
printf("依次按学号输入成绩:\n");
int i;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
int flag;
while(1)
{
flag=-1; //<----flag保存最大值
int s=-1; //<----s保存最大值的下标
int j;
for(j=1;j<=n;j++)
{
if(a[j]>flag)
{
flag = a[j];
s = j;
}
}
if(flag == -1) break;
a[s] = -1; //<-----当选出最大值后,将其置为-1
printf("%d号成绩%d.\n",s,flag);
}
system("pause");
return 0;
}
竟然Lz不会结构体,我弄了个数组
2011-04-22 16:13
2011-04-22 16:20
2011-04-22 18:05
2011-04-22 18:16