2015-09-26 3 views
-3

Рассмотрим следующий код. Я должен найти разницу обеих диагоналей в С.Диагональное различие в 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, то код работает отлично. Зачем?

+2

В чем вопрос? Почему вы получаете неправильный результат? Рассмотрим случай матрицы 5x5 для ex - средняя ячейка должна вносить вклад в обе диагональные суммы, а если вы используете 'else if', это будет только способствовать первому. –

+0

, пожалуйста, измените это, чтобы задать вопрос – Mousey

ответ

0

Я думаю, что я получаю то, что вы хотите знать:

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.

+0

Спасибо! Теперь я понял, какую ошибку я делал. –

+0

Добро пожаловать! –

Смежные вопросы