C语言 结构体的排序问题
定义一个5个元素的 struct STUDENT 数组,(1)从键盘输入5个学生的信息。
(2)按总分降序排序。
(3)按语文成绩降序排序。
(4)按姓名升序排序。
答案:#include<stdio.h>
#include<string.h>
typedef struct student
{
int no;//学号
char name[20];//姓名
float chinese;//语文成绩
float math;//数学成绩
float english;//英语成绩}STUDENT;
void SortByTotal(STUDENT stu[])
{
float total[5];
int i=0,j=0,k=0;
STUDENT temp;
for(i=0; i<5; i++)
{
total[i] = stu[i].chinese + stu[i].math + stu[i].english;
}
for(i=0; i<4; i++)
{
k = i;
for(j=i+1; j<5; j++)
{
if(total[k] < total[j])
{
k = j;
}
}
if(k != i)
{
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
}
void SortByChinese(STUDENT stu[])
{
int i=0,j=0,k=0;
STUDENT temp;
for(i=0; i<4; i++)
{
k = i;
for(j=i+1; j<5; j++)
{
if(stu[k].chinese < stu[j].chinese)
{
k = j;
}
}
if(k != i)
{
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
}
void SortByName(STUDENT stu[])
{
int i=0,j=0,k=0;
STUDENT temp;
for(i=0; i<4; i++)
{
k = i;
for(j=i+1; j<5; j++)
{
if(strcmp(stu[k].name,stu[j].name) > 0)
{
k = j;
}
}
if(k != i)
{
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
}
void main()
{
STUDENT stu[5];
int i=0;
for(i=0; i<5; i++)
{
printf("请输入第%d个人的信息(学号,姓名,语文成绩,数学成绩,英语成绩):\n",i+1);
scanf("%d%s%f%f%f",&stu[i].no,stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english);
}
printf("按总分降序排序后:\n");
SortByTotal(stu);
for(i=0; i<5; i++)
{
printf("%4d%20s%10g%10g%10g\n",stu[i].no,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english);
}
printf("按语文成绩降序排序后:\n");
SortByChinese(stu);
for(i=0; i<5; i++)
{
printf("%4d%20s%10g%10g%10g\n",stu[i].no,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english);
}
printf("按姓名升序排序后:\n");
SortByName(stu);
for(i=0; i<5; i++)
{
printf("%4d%20s%10g%10g%10g\n",stu[i].no,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english);
}
}
上一个:我想自学C语言,求指教!!!
下一个:C语言问题 欢迎高手进入