c语言中函数调用和数组部分的程序,求纠错!

/* Note:Your choice is C IDE */
#include <stdio.h>
extern int i,j;
void input(float a[4][5])
{
printf("请输入三个同学的成绩:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for (i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%8.2f",a[i][j]);
printf("\n");
}
printf("\n");
}
int i,j;
void compute(float a[4][5])
{
float p[4][5];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
a[i][5]+=a[i][j];
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
p[4][j]+=a[i][j];
a[4][j]=p[4][j]/3;
}
}
void output(float a[4][5])
{
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
printf("%8.2f ",a[i][j]);
printf("\n");
}
}
void main()
{
float a[4][5];
input(a);
compute(a);
output(a);
}

第1个回答  2011-12-22
#include <stdio.h>
extern int i,j;
void input(float a[4][5])
{
printf("请输入三个同学的成绩:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for (i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%8.2f",a[i][j]);
printf("\n");
}
printf("\n");
}
int i,j;
void compute(float a[4][5])
{
float p[4][5];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
a[i][4]+=a[i][j];
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
p[3][j]+=a[i][j];
a[3][j]=p[3][j]/3;
}
}
void output(float a[4][5])
{
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%8.2f ",a[i][j]);
printf("\n");
}
}
void main()
{
float a[4][5];
input(a);
compute(a);
output(a);
}
同学,你越界了。你有个问题,定义数组float a[4][5],是说明这个数组是一个4*5的二维数组,最大的下标不是4*5,而应该是3*4,因为起始坐标是【0】【0】而不是【1】【1】。改了之后就好了。比较一下。本回答被提问者采纳
第2个回答  2011-12-22
void compute(float a[4][5])
{
float p[4][5];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
a[i][4]+=a[i][j];
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
p[3][j]+=a[i][j];
a[3][j]=p[3][j]/3;
}
}
第二个函数,数组下标越界了
注意,数组下标是从0开始的
第3个回答  2011-12-22
楼上都说LZ数组越界了,其实没有!如果你在IDE运行下就知道,最终输出的结果是个3行4列的矩阵!
相似回答