改好的参考(排序要函数,而函数不能定义在函数中的)
#include
#include
char id[10][4];//学号
// int number[10];//序号
float grade[10][3];//包括数学,英语,计算机
float sum[10]; //,ave[10];//总分和平均分,保证可以保留小数
void sort(int k)
{
int i,j,t;
float f[3],sf;
char s[4];
for(i=0; i
for(j=0; j
{
if(sum[j]
//要交换所有数据的,所以要全局的
{
strcpy(s,id[j+1]);
f[0]= grade[j+1][0];
f[1]= grade[j+1][1];
f[2]= grade[j+1][2];
sf= sum[j+1];
///
strcpy(id[j+1],id[j]);
grade[j+1][0]= grade[j][0];
grade[j+1][1]= grade[j][1];
grade[j+1][2]= grade[j][2];
sum[j+1]= sum[j];
///
strcpy(id[j],s);
grade[j][0]=f[0];
grade[j][1]=f[1];
grade[j][2]=f[2];
sum[j]=sf;
}
}
}
int main()
{
int i,j,k;//中间变量
printf("请确认学生总人数:");
scanf("%d",&k);//控制学生人数
printf("\n");//第一部分收集数据
for(i = 0; i < k; i++)
{
// number=i;
printf("请输入第%d个学生的信息:\n",i+1);
printf("学号:");
scanf("%s",&id[i]);//学号使用char,为%s,id长度为4
printf("数学:");
scanf("%f",&grade[i][0]);
printf("英语:");
scanf("%f",&grade[i][1]);
printf("计算机:");
scanf("%f",&grade[i][2]);
}//收集全部数据
printf("\n");//第二部分计算
for(i = 0; i < k; i++)
{
sum[i]=grade[i][0]+grade[i][1]+grade[i][2];//求和
// ave[i]=sum[i]/3;//求平均分
}
printf("\n");//第三部分排序
sort(k);
printf("\n");//第三部分输出
printf(" |序 号|学 号|数 学|英 语|计算机|总 分|平均分|\n");
for(i=0; i
{
printf(" |%5d",i+1);
printf("|%5s",id[i]);
for(j=0; j<3; j++)
{
printf("|%6.2f",grade[i][j]);
}
printf("|%6.2f",sum[i]);
printf("|%6.2f",sum[i]/3);
printf("|\n");
}
}