2015-06-29 7 views
-4
#import <stdio.h> 
int main(void) { 
    int sum,i; 
    sum = 0; 
    for(i=0;i<10;i++) { 
     if(i%2) 
      continue; 
     sum+=i; 
    } 
    printf("\n%d",sum); 
    return 0; 
} 

Как работает if(i%2) в вышеуказанном коде?Интересно, что происходит, если if (i% 2), что он проверяет, чтобы продолжить. Он пропускает ==, но он печатает сумму как 20? Зачем?

+1

'если (I% 2)' эквивалентно 'если (I% 2! = 0)'. – haccks

ответ

0

При вычислении операция по модулю находит остаток после деления одного числа на другой (иногда называемый модулем).% - оператор модуля.

Так я% 2 возвращает остаток оставшихся после я делится на 2.
Поэтому, если я нечетно я% 2 = 1 (TRUE)
иначе оно равно 0 (FALSE). (Даже условие)

Поэтому, если i равно i, добавляется к сумме else, цикл продолжается.

+0

0 некоторая истинная инструкция в if (i% 2) –

+0

В C true представлено любым числовым значением, не равным 0, а false представлено 0. @ user3704516 –

0

Здесь используется %modulo operator. Он проверяет остальную часть деления.

Что касается if заявления, стандарт C11 говорит, из главы §6.8.4.1

Синтаксис: if (выражения) заявление

и

... первый суб-оператор выполняется, если выражение сравнивает неравное 0.

Так, заявление, как if(i%2), результат

  • истинен, когда значение i не кратно 2, т.е. , генерирует ненулевой остаток, поэтому встречается continue;.
  • FALSE, когда i отлично делится на 2 итак, continue; пропущен и sum+=i; исполняется.

Это говорит, нет в C нет #import <stdio.h>, он должен быть #include <stdio.h>

Финлей,

Как если (я% 2) работает в коде выше?

Он используется для добавления всех даже числа до 9. В результате, 20, затем распечатывается.

+0

Но в операторах if что становится истинным в операторах if –

+0

@ user3704516 жаль, что я не понял ваш комментарий. –

0

условие в, если заявление

if (i % 2) 

эквивалентно

if (i % 2 != 0) 

Это условие равно справедливо, если я нечетное число. Таким образом, программа находит сумму четных чисел в диапазоне [0, 10)

Согласно стандарту C (6.8.4.1, если заявление)

2 В обеих формах, первый подоператора выполняется если выражение сравнивается не с 0.

Здесь «первое подкрепление» означает оператор if (если присутствует другое, то это второе подкрепление).

Лучше переписать цикл без инструкции break. Например

for (i = 0; i < 10; i++) 
{ 
    if (i % 2 == 0) sum += i; 
} 

Это то же самое, как

for (i = 0; i < 10; i += 2) 
{ 
    sum += i; 
} 
0

если условие знает только TRUE или FALSE.

Если ваша операция modulo выполняет условие true, то она будет выполнена continue. В противном случае это будет делать сумма.

** Правда состояние = любое число без нуля (0)