第1个回答 推荐于2016-11-11
#include<stdio.h>
#include<string.h>
#define N 6 //定义实际参加考试的人数,我设的是30
#define M 3 //定义学号的位数,我设的是2位
int score[N][3]={{10,20,30},{40,50,60},{70,80,90},{15,25,35},{45,55,65},{75,85,95}};
int sum[N];
float aver[N];
char studentno[N][M]={"01","02","03","04","05","06"};
void jsaver()
{
int i;
for(i=0;i<N;i++)
aver[i]=(float)sum[i]/3; printf("%f\n",aver[0]);
}
void jssum()
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<3;j++)
sum[i]+=score[i][j];
}
}
void sum_px()
{
int i,j,k;int t;char s[M];
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(sum[i]<sum[j])
{
t=sum[i];
sum[i]=sum[j];
sum[j]=t;
for(k=0;k<3;k++)
{
t=score[i][k];
score[i][k]=score[j][k];
score[j][k]=t;
}
strcpy(s,studentno[i]);
strcpy(studentno[i],studentno[j]);
strcpy(studentno[j],s);
}
}
void findNO(char s[M])
{
int i;
for(i=0;i<N;i++)
if(strcmp(studentno[i],s)==0)
printf("学号为:%s,成绩排名第%3d位,数学%4d分,英语%4d分,物理%4d分,总分%4d\n",
s,i+1,score[i][0],score[i][1],score[i][2],sum[i]);
}
void main()
{
char s[M];
int i;
jssum();
sum_px();
jsaver();
printf("成绩表:\n");
printf("学号成绩排名 数学 英语 物理 总分 平均分\n");
for(i=0;i<N;i++)
printf("%s %3d %4d %4d %4d %4d %6.2f \n",studentno[i],i+1,score[i][0],score[i][1],score[i][2],sum[i],aver[i]);
printf("请输入要查询的学号:\n");
scanf("%s",s);
findNO(s);
}本回答被提问者采纳