用c语言写哪里错了?

三个学生、五门课程的成绩分别存放在4×6矩阵的前3×5列,计算出每个学生的平均成绩存放在该数组的最后一列的对应行上。计算单科的成绩总和存放在最后一行的对应列上,并输出单科成绩的平均分。
要求:
(1)数组类型为实型,输入成绩由scanf函数实现;
(2)输出已输入的原始成绩数据(3×5);
(3)计算每个学生的平均成绩以及单科的成绩总和并按要求填入到数组中,输出填入结果后的数组(4×6);
(4)计算单科平均成绩后输出。
(5)输出结果保留2位小数位
#include<stdio.h>
int main()
{
int a[4][6],i,j,s=0,t=0,n;
for(i=0;i<3;i++)
{for(j=0;j<5;j++)
scanf("%0.2d",a[i][j]);
}
for(i=0;i<3;i++)
{for(j=0;j<5;j++)
printf("%0.2d",a[i][j]);
}
for(i=0;i<3;i++)
{for(j=0;j<5;j++)
{s=s+a[i][j];
a[i][5]=s/5;}
}
for(j=0;j<5;j++)
{for(i=0;i<3;i++)
{t=t+a[i][j];
a[3][j]=t;
n=t/3;
printf("%0.2d",n);}
}
for(i=0;i<4;i++)
printf("%0.2d",a[i][5]);
for(j=0;j<6;j++)
printf("%0.2d",a[3][j]);
}

第1个回答  2018-11-14
int main(int argc,char *argv[]){
int /*a[4][6],*/i,j/*,s=0,t=0,n*/;//把a[4][6],和,s=0,t=0,n删除
double a[4][6],s,t;//加这一行,题目要求是实型而不是int型,s t n当然也就应该是double型了
for(i=0;i<3;i++){
for(j=0;j<5;j++)
//scanf("%0.2d",a[i][j]);
scanf("%lf",a[i]+j);//double型要用%lf控制输入数据,且不得限制精度,输出变量需要地址
}
printf("\n");//加回车调整版面
for(i=0;i<3;i++){
for(j=0;j<5;j++)
//printf("%0.2d",a[i][j]);
printf("%.2f ",a[i][j]);//实型的输出控制符是%f,%0.2f是占宽0列,小数点后保留2位,显然0就没有意义了,要有' '
printf("\n");//每一行加回车,否则版面太乱了
}
for(i=0;i<3;i++){
s=0;//s必须在每一行前都置0
for(j=0;j<5;j++){
s=s+a[i][j];
//a[i][5]=s/5;删除,逻辑有误,移{}外面去
}
a[i][5]=s/5;//移到这里来
}
for(j=0;j<5;j++){
t=0;//t必须在每列开始时都置0
for(i=0;i<3;i++){
t=t+a[i][j];
//a[3][j]=t;这3行逻辑有误,移到{}外面去,且不能在这里计算单科平均值和输出(调整到最后输出)
//n=t/3;
//printf("%0.2d",n);
}
a[3][j]=t;//前面3行移到这里来
}
//for(i=0;i<4;i++)这4行问题太多,要重写
// printf("%0.2d",a[i][5]);
//for(j=0;j<6;j++)
// printf("%0.2d",a[3][j]);
printf("\n");//加回车调整版面
for(i=0;i<4;i++){
for(j=0;j<6;j++)
if(i<3 || j<5)
printf("%-7.2f ",a[i][j]);
else
printf(" //");
printf("\n");
}
printf("\nSubject's average grades:\n");
for(i=0;i<5;i++)//单科输出移到这里来
printf("%.2f ",a[3][i]/3);
printf("\n\n");
return 0;
}

本回答被提问者采纳
相似回答