各位高手,请帮我用C语言编写一个程序,急,在线等..

各位高手,请帮我用C语言编写一个程序,急,在线等..
已知某班N(<=50)名学生进行了高数,英语和C语言等3门课程考试,将3门课的成绩计算总分并存放在一个2维数组中,将学生姓名存放在另一个2维字符数组中,按总分(从高到低)将学生姓名排序并输出排序结果(序号和姓名)

#include<stdio.h>
main()
{
float score[50][4];
for(int i=0;i<50;i++)
{
for(int j=0;j<4;j++)
{
score[i][j]=0;
}
}
char name[50][20];
char sname[20];
float math=0,english=0,languagec=0,total=0;
printf("please input student's name(if you finish the inputing,please input # .)\nname:");
scanf("%s",sname);//输入学生名字时如果直接输入#,则表示输入完毕,然后自动显示排序结果
i=0;
while(sname[0]!='#')
{
i++;
printf("please input student's score .\nmath:");
scanf("%f",&math);
while(math>100||math<0)
{
printf("Out of range. please input again:\nmath:");
scanf("%f",&math);
}
printf("english:");
scanf("%f",&english);
while(english>100||english<0)
{
printf("Out of range. please input again:\nmath:");
scanf("%f",&english);
}
printf("languagec:");
scanf("%f",&languagec);
while(languagec>100||languagec<0)
{
printf("Out of range. please input again:\nmath:");
scanf("%f",&languagec);
}
total=math+english+languagec;
for(int j=0;j<i;j++)
if(total>score[j][3])break;
for(int k=i;k>j;k--)
{
for(int l=0;l<4;l++)
score[k][l]=score[k-1][l];
for(int m=0;m<20;m++)
name[k][m]=name[k-1][m];
}
for(int n=0;n<20;n++)name[j][n]=sname[n];
score[j][0]=math;
score[j][1]=english;
score[j][2]=languagec;
score[j][3]=total;
if(i==50)break;
printf("please input student's name(if you finish the inputing,please input # .)\nname:");
scanf("%s",sname);
}
printf("list order by total:\n");
for(int n=0;n<i;n++)
{
printf("%s:%3.1f\n",name[n],score[n][3]);
}

}

我做的是逐个输入学生的成绩。当你输完所有成绩后,在要求输入姓名时,输入#号,则输入结束。后面自动按总分对学生姓名排序。

要求加分
温馨提示:答案为网友推荐,仅供参考
相似回答