C语言问题。定义一个二维数组

定义1个二维数组:int arr[5][6],然后从键盘输入5行6列共30个整数,编程求出所有元素中的最大值、最小值及其下标,同时求出每行元素的平均值,并在屏幕上打印输出。
我是这么写的,错在哪里?

#include<stdio.h>
int main()
{
int arr[5][6];
int i,j,max,min,sum,a,b,c,d,e;
float ave;
printf("Input 30 numbers:\n");
for(i=0;i<5;i++)
for(j=0;j<6;j++)
scanf("%d",&arr[5][6]);
printf("\n");
max=arr[0][0];
for(i=0;i<5;i++)
for(j=0;j<6;j++)
{
if(max<arr[i][j])
{max=arr[i][j];
a=i;
b=j;
}
}
printf("max=arr[%d][%d]=%d\n",a,b,max);

min=arr[0][0];
for(i=0;i<5;i++)
for(j=0;j<6;j++)
{
if(min>arr[i][j])
{
min=arr[i][j];
c=i;
d=j;
}
}
printf("min=arr[%d][%d]=%d\n",c,d,min);
sum=0;
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
sum+=arr[i][j];
e=i;
ave=sum/6;
printf("ave=arr[%d]=%f\n",e,ave);
}
return 0;
}

#include<stdio.h>
int main()
{
    int arr[5][6];
    int i,j,max,min,sum,a,b,c,d,e;
    float ave;
    printf("Input 30 numbers:\n");
    for(i=0;i<5;i++)
for(j=0;j<6;j++)
scanf("%d",&arr[i][j]);//此处为srr[i][j],你写成srr[5][6]就成了为crr第6行第七列赋值了,不但错误,更是越界了!
    printf("\n");
    min=max=arr[0][0];//将最大值与最小值都初始化为第一个元素
a=b=c=d=0;//下标也要初始化!
    for(i=0;i<5;i++)
        for(j=0;j<6;j++)
{
if(max<arr[i][j])
{
max=arr[i][j];
a=i;
b=j;
}
if(min>arr[i][j])
{
min=arr[i][j];
c=i;
d=j;
}
}
    printf("max=arr[%d][%d]=%d\n",a,b,max);
    printf("min=arr[%d][%d]=%d\n",c,d,min);

    sum=0;
    for(i=0;i<5;i++)
    {
for(j=0;j<6;j++)
sum+=arr[i][j];
e=i;
ave=sum/6.0;//写成6.0使得sum提升到浮点型
printf("ave=arr[%d]=%f\n",e,ave);
}
    return 0;
}

楼主基本没有大错误,只是不够仔细,用来保存特定值的变量使用前一定要初始化,如本例中的最大值,最小值,下标,都是必须初始化的!

整型与整型运算会得到整型,1/2=0,5/4=1;系统会舍去小数部分。只要将其中一个提升至浮点型即可,如1.0/2,5/4.0,如果是两个整型变量,可以写成(float)a/b,即可使得得到浮点型结果!


2013 5 25 7:05

1L

耗时 4min

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-25
第七行scanf("%d",&arr[5][6]);这句就有问题了,首先应改为scanf("%d",&arr[i][j]);还有其他错误,修改后:
#include<stdio.h>
int main()
{
int arr[5][6];
int i,j,max,min,sum,a=0,b=0;
float ave;
printf("Input 30 numbers:\n");

for(i=0;i<5;i++)
for(j=0;j<6;j++)
{
scanf("%d",&arr[i][j]);
if(j==5)
printf("\n"); }

max=arr[0][0];
for(i=0;i<5;i++)
for(j=0;j<6;j++)
if(max<arr[i][j])
{
max=arr[i][j];
a=i;
b=j; }
else ;
printf("max=arr[%d][%d]=%d\n",a,b,max);

a=0,b=0;
min=arr[0][0];
for(i=0;i<5;i++)
for(j=0;j<6;j++)
if(min>arr[i][j])
{
min=arr[i][j];
a=i;
b=j; }
else ;
printf("min=arr[%d][%d]=%d\n",a,b,min);

for(i=0;i<5;i++)
{sum=0;
for(j=0;j<6;j++)
{
sum+=arr[i][j];
if(j==5)
{
ave=(float)sum/6;
printf("ave=arr[%d]=%f\n",i,ave);
}
}
}
return 0;
}
第2个回答  2013-05-25
scanf("%d",&arr[5][6]);

应该改为:
scanf("%d",&arr[i][j]);
相似回答