C语言关于二维数组编程问题在线等

编程,功能是求出二维数组周边元素并输出

我编的能运行但是结果一点也不对。。。求解

#include <stdio.h>
#define N 4
#define M 5
void main()
{
int a[N][M],i,j,k,n1,n2,n3,n4;
printf("please input:");printf("\n");
for(i=0;i<N;i++)for(j=0;j<M;j++)
{scanf("%d",&a[i][j]);}

if(i=0)
{
for(k=1;k<M;k++)
{a[i][j]+=a[i][j+k];}
n1=a[i][j];
for(k=1;k<M;k++)
{a[i][j]-=a[i][j+k];}
}
else if(i=N-1)
{
for(k=1;k<M;k++)
{a[i][j]+=a[i][j+k];}
n2=a[i][j];
for(k=1;k<M;k++)
{a[i][j]-=a[i][j+k];}
}

if(j=0)
{
for(k=1;k<N;k++)
{a[i][j]+=a[i+k][j];}
n3=a[i][j];
for(k=1;k<N;k++)
{a[i][j]-=a[i+k][j];}
}
else if(j=M-1)
{
for(k=1;k<N;k++)
{a[i][j]+=a[i+k][j];}
n4=a[i][j];
for(k=1;k<N;k++)
{a[i][j]-=a[i+k][j];}
}

printf("%d",n1+n2+n3+n4);
}

#include <stdio.h>
#define N 4
#define M 5
void main()
{
int a[N][M],i,j,k,n1,n2,n3,n4;
printf("please input:");printf("\n");
for(i=0;i<N;i++)for(j=0;j<M;j++)
{scanf("%d",&a[i][j]);}
for(i=0;i<N;i++)////////
for(j=0;j<M;j++)/////需要而成循环判断
{

// if(i=0)
if(i==0)
{
for(k=1;k<M;k++)
{a[i][j]+=a[i][j+k];}
n1=a[i][j];
for(k=1;k<M;k++)
{a[i][j]-=a[i][j+k];}
}
//else if(i=N-1)
if(i==N-1)
{
for(k=1;k<M;k++)
{a[i][j]+=a[i][j+k];}
n2=a[i][j];
for(k=1;k<M;k++)
{a[i][j]-=a[i][j+k];}
}
//if(j=0)
if(j==0)
{
for(k=1;k<N;k++)
{a[i][j]+=a[i+k][j];}
n3=a[i][j];
for(k=1;k<N;k++)
{a[i][j]-=a[i+k][j];}
}
//else if(j=M-1)
else if(j==M-1)//是==,不是=
{
for(k=1;k<N;k++)
{a[i][j]+=a[i+k][j];}
n4=a[i][j];
for(k=1;k<N;k++)
{a[i][j]-=a[i+k][j];}
}
}
printf("%d",n1+n2+n3+n4);
}追问

可是结果还是错误的呀我运行试了一下。。。话说请问一下,前面输入a[i][j]我应该怎么写呢?我不太清楚哦

追答 

就按照矩阵的方式输入就可以,中间用空格隔开

我就没理解你什么意思

是求出矩阵外围元素的和??

比如

1 2 3 4 5

0 1 2 3 4

0 0 1 2 3

输出25?对么?

追问

是哦,我貌似理解错题目了。。。不过照你这个说法是应该怎么做呢?求解。。。

追答

#include
#define N 4
#define M 5
void main()
{
int a[N][M],i,j,k,sum=0;
printf("please input:");printf("\n");
for(i=0;i<N;i++)
for(j=0;j<M;j++)
{
scanf("%d",&a[i][j]);
if(i==0||j==0||i==N-1||j==M-1)
sum+=a[i][j];
}
printf("周围元素之和是%d\n",sum);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-15
我没看懂你的程序但是很明显的你的两个if里面已经改变了数组的元素,所以不会得出你想要的结果。能明确说明下你想要的程序功能吗?举个例子
int A[4][5]=
{
 1,2,3,4,5,
2,3,4,5,6,
3,4,5,6,7,
4,5,6,7,8,
5,6,7,8,9

}
是输出什么?第一行的12345,第一列的12345。。这样的?追问

编程,功能是求出二维数组周边元素并输出,就是求长方形的边的数之和。。。

追答int Sum(int *a,int n,int m)
{
    int temp=0;
    for(int i=0;i<m;i++)
        temp=temp+a[0][i]+a[n-1][i];//第一行和最后一行想加的和
     for(i=0;i<n;i++)
         temp=a[i][0]+a[i][m-1];//第一列和最后一列想加的和
      temp=temp-a[0][0]-a[0][m-1]-a[n-1][m-1]-a[n-1][0];//减去重复加了2次的四个角的元素
      return temp;
}
我没调试,你试试用这个函数
不好意思 写错了
这个我编译通过了
#include<stdio.h>
#define n 4
#define m 5
int main()
{
    int a[4][5]={
            1,2,3,4,5,
            1,2,3,4,5,
            1,2,3,4,5,
            1,2,3,4,5
            };
    int temp=0;
    //第一行之和
    for(int i=0;i<m;i++)
        temp=temp+a[0][i];
    //最后一行之和
    for(i=0;i<m;i++)
        temp=temp+a[n-1][i];
    //第一列之和
    for(i=0;i<n;i++)
        temp=temp+a[i][0];
    //最后一列之和
    for(i=0;i<n;i++)
        temp=temp+a[i][m-1];
    //减去重复加了2次的四个角的元素
      temp=temp-a[0][0]-a[0][m-1]-a[n-1][m-1]-a[n-1][0];

    printf("%d\n",temp);
    return 0;
}

第2个回答  2013-11-15
我首先看到if(i=0) 应改成 if(i==0) if(j=0)也得改追问

改了之后结果还是错误的。。。大神加油啊一起来纠错。。。我是新手有很离谱的错误不要嘲笑。。。。

追答

后面还有所有if(i=... if(j=... 都要改成 ==
这只是说语法错误。确实还有比较多的错误
for(i=0;i<N;i++)for(j=0;j<M;j++)
{scanf("%d",&a[i][j]);}

if(i=0)
这样子上面循环完了,i 就等于N了,j 就等于M了 所以下面的if 都执行不到

建议你还是自己再仔细分析一下

追问

我。。。能说上C语言的课听了等于没听吗老师照课件讲的等于自习啊。。。所以现在真心一头雾水555.。。那啥,为啥i会等于N呢?我用的是<号呀?

相似回答
大家正在搜