问答题
1. 学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数proc(),它的功能是:按分数的高低排列学生的记录,低分在前。
注意:部分源程序如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#detine M 16
typedef struct
{
char num[10];
int s;
}STREC;
void proc(STREC stu[])
{
}
void main()
{
STREC stu[M]={{"GA005",88},{"GA003",64},
{"GA002",77},{"GA004",89},{"GA001",54},
{"GA007",72},{"GA008",72},{"GA006",65},
{"GA015",83},{"GA013",95},{"GA012",55},
{"GA014",68},{"GA011",78},{"GA017",53},
{"GA018",92},{"GA016",82}};
int i;
proc(stu);
printf("The data after sorted:\n");
for(i=0;i<M;i++)
{
if((i)%4==0)
//每行输出4个学生记录
printf("\n");
printf("%s%4d",stu[i].num,stu[i].s);
}
printf("\n");
}
【正确答案】voidproc(STREC stu[])
{
inti,j;
STREC t:
for(i=1;i<M;i++) //用冒泡法来实现互换,即把小的放到前面
for(j=0;j<M-1;j++)
if(stu[j].s>stu[j+1].s)
{ //若if成立,则互换
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
【答案解析】 要实现按分数的高低排列学生的记录,可以用冒泡排序法:将每一个学生的成绩与前面学生的成绩比较,将成绩较低的学生的记录放在前面。