c - c 对角线差

标签 c

考虑以下代码。我必须找出 C 中两条对角线的差。

#include <stdio.h>
int main() {

    int n,a[100][100],sum1=0,sum2=0;
    scanf("%d",&n);
    for(int i=0;i<n;++i)
        {
        for(int j=0;j<n;++j){

            scanf("%d",&a[i][j]);
             if(i==j) sum1+=a[i][j];
             else if((i+j)==(n-1)) sum2+=a[i][j];

        }
    }
     if(sum1>sum2) printf("%d",(sum1-sum2));
     else printf("%d",(sum2-sum1));


    return 0;
}

当我将 else if 更改为 if 时,代码可以正常工作。为什么?

最佳答案

我想我明白了你想知道的:

if(i==j) sum1+=a[i][j];
if((i+j)==(n-1)) sum2+=a[i][j];

意味着这两种情况都可能有效,因为您对它们都进行了测试。

另一方面,如果你写

if(i==j) sum1+=a[i][j];
else if((i+j)==(n-1)) sum2+=a[i][j];

您假设这些条件中只有一个可以运行,或者都不能运行,但绝不能同时运行。所以如果第一项(i==j)true第二个将不再进行测试。但您需要对两者进行测试以确定您想要计算的内容。事实上else if永远属于if ,所以最多只能满足一个条件,而在另一个版本中你只有两个独立的 ifs .

关于c - c 对角线差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32798228/

相关文章:

c - 某些输入的整数到二进制转换程序失败

c - 将指针数组传递给函数

c - msgid 创建错误

c++ - 函数内的指针行为

c - 如何将数组地址存储在另一个数组的索引中?

C: int 到 _bstr_t

c++ - 发布几个回调作为函数参数

c - 我的简单 C 程序崩溃了

c - 为什么结构大小随结构中的枚举位域而变化(标准 C)

c - Vista 上的性能计数器问题