题目如下:
此题虽然看上去复杂,但是仔细想一想其实就是一个二维数组的运用,另外再注意一下输出格式就可以了(注意表头不能用一个字符串全部输入!!!因为输入时表头间的空格数不一定和输出时要求的空格数相同(虽然给出的测试样例是这样,但是经过亲测,结果为WA50%,说明可能有的测试点输入时表头的空格数不等于输出时所要求的空格数)此点下面的注释也稍有提及)。
下面是AC代码加注释:
#include<stdio.h>
#include<string.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
char s[n+2][60];
for(int i=0; i<n+1; i++) //由于表头各个字符间空格个数不确定,所以需要分别输入每个表头,再按照要求输出
scanf("%s",s[i]);
char name[m][10]; //每个同学的名字
double score[m][n]; //二维数组存储每个同学的每个分数
for (int i=0; i<m; i++)
{
scanf("%s",name[i]); //输入名字
for (int j=0; j<n; j++)
scanf("%lf",&score[i][j]); //输入成绩
}
double sum[m]; //每个同学的总分
for (int i=0; i<m; i++)
{
sum[i]=0;
for (int j=0; j<n; j++)
sum[i]+=score[i][j];
}
for(int i=0; i<n+1; i++) //以下代码为按照要求的格式输出
{
if(i==0)
printf("%-8s",s[i]);
else
printf(" %5s",s[i]);
}
printf(" sum\n");
for (int i=0; i<m; i++)
{
printf("%-8s",name[i]);
for (int j=0; j<n; j++)
printf(" %5.1lf",score[i][j]);
printf(" %5.1lf\n",sum[i]);
}
printf("average ");
double t; //t存储的为各科的总分
for(int i=0;i<n-1;i++)
{
t=0;
for(int j=0;j<m;j++)
t+=score[j][i];
printf("%5.1lf ",t/m);
}
t=0;
for(int j=0;j<m;j++)
t+=score[j][n-1];
printf("%5.1lf\n",t/m);
}
如果有不同的意见或有需要改进的地方欢迎大家在评论区提出。
继续加油!!!