独一无② 发表于 2015-11-6 12:25:22

C语言 求助

题目描述

求矩阵的两对角线上的元素之和
输入

矩阵的行数N
和一个N*N的整数矩阵a(N<=10)
输出

所输矩阵的两对角线上的元素之和
样例输入

3
1 2 3
4 5 6
7 8 9

样例输出

25


我的代码
# include <stdio.h>
main ()
{
        int a,b,c,d,e,s=0;
        scanf("%d",&b);
        for(c=0;c<b;c++)    //输入数组
        {
                for(d=0;d<b;d++)
                {
                   scanf("%d",&a);
                }
        }      
   for(c=0,d=0;c<b;c++)    //求左上到右下斜线 和。
        {
                d=d+a;
        }
        c=0;e=b-1;
        while(c<d && e>-1)   //求右上到左下斜线 和
        {
                s=s+a;
                c++;e--;
        }
        if(b%2 == 0)    //和加并减去重复值
        printf("%d\n",d+s);
        else
        printf("%d\n",d+s-a[(b-1)/2][(b-1)/2]);
       
}

我发现,和的结果是正数,那么答案正确,要是和结果是负数,答案就会错误。
比如 1 -9,结果就不是-9.为什么会这样,我不知道哪里错了,求指点。

dwer 发表于 2015-11-6 12:25:23

1.这个命名看的太累人了啊~~~容易乱
2.或许你就是看变量名乱的
3.这个while里   c<b 不是c<d
while(c<d && e>-1)   //求右上到左下斜线 和
      {
                s=s+a;
                c++;e--;
      }

愣头小兵 发表于 2015-11-6 14:15:13

#include <stdio.h>

int main()
{
    int n,i,j,sum=0;
    scanf("%d",&n);                         //输入矩阵行数n

    int a;
    for(i=0;i< n;i++)                         //初始化矩阵
    {
      for(j=0;j<n;j++)
            scanf("%d",&a);
    }

    for(i=0,j=0;i<n;i++,j++)            //计算左上至右下对角的和
      sum=sum+a;

    for(i=0,j=n-1;i<n;i++,j--)            //计算右上至左下对角的和
      sum=sum+a;

    if(n%2!=0)                                  //如果矩阵行数是奇数,减去重复累加的元素值
      sum=sum-a;

    printf("%d",sum);                     //输出最终的和
    return 0;
}

独一无② 发表于 2015-11-6 15:50:38

dwer 发表于 2015-11-6 14:23
1.这个命名看的太累人了啊~~~容易乱
2.或许你就是看变量名乱的
3.这个while里   c

谢谢,的确是这里错了。

独一无② 发表于 2015-11-6 15:52:26

愣头小兵 发表于 2015-11-6 14:15


谢谢了,不过我想知道 自己的代码哪里错了,现在解决了,还是要谢谢你。
页: [1]
查看完整版本: C语言 求助