输入学生成绩按平均分排名。我平均分求出来了。
但是对结构体数组的排序一直没搞懂。
#include<stdio.h>
#include<string.h>
struct liebiao
{
int hao;
char name[20];
float fen1;
float fen2;
float fen3;
float pingjun;
}data[50],*p=data;
int pingjun();
void paiming();
main(void)
{
int j;
j=pingjun(p);
paiming(data[50]);
}
int pingjun(struct liebiao *q)
{
int i,j=0;
char panduan;
for(i=0;i<50;i++,q++,j++)
{
printf("输入学号:");
scanf("%d",&q->hao);
printf("输入姓名:");
fflush(stdin);
gets(q->name);
printf("输入第1科成绩:");
scanf("%f",&q->fen1);
printf("输入第2科成绩:");
scanf("%f",&q->fen2);
printf("输入第3科成绩:");
scanf("%f",&q->fen3);
q->pingjun=(q->fen1+q->fen2+q->fen3)/3;
printf("是否要继续?<y or n>");
fflush(stdin);
scanf("%c",&panduan);
if(panduan=='n')
{
printf("排序前的学员信息如下:\n");
printf("学号\t姓名\t平均成绩\n");
for (i=0;i<=j;i++)
printf("%d\t%s\t%0.2f\n",data[i].hao,data[i].name,data[i].pingjun);
return j;
break;
}
}
}//从这开始是排名。我头都大了。我写的一定不对了。
请高手帮我改改。
void paiming(struct liebiao (*q1)[50])
{
int n,u,i;
struct liebiao temp,*q2;
printf("排名后的学员信息如下:\n");
for(n=0;n<=y;n++,q1++)
{
for (u=1;u<=y;u++,q2++)
{
if (data[n].pingjun<data[u].pingjun)
temp=q1->data;
q1->data=q2->data;
q2->data=temp;
}
}
for (i=0;i<5;i++)
printf("%d\t%s\t%0.2f\n",data[i].hao,data[i].name,data[i].pingjun);
}
还有个问题我感觉结构体不能在子函数中转换呢。