2015-03-04 3 views
-5

я ожидал он будет производить:Какой вывод для C?

, но вместо этого она печатает

10 5 3 2 1 1 1 1 1 1 1 1 1 .. .

Почему?

#include <stdio.h> 

int main(void) 
{ 
    int i; 

    for(i = 10; i >= 1; i /= 2) 
     printf("%d ", i++); 

    return 0; 
} 

2 напечатан, а затем добавляют один делает его 3, делится на 2 равен 1. В 1 равен 1, 1 печатается, а затем добавляют один делает его 2, деленное на 2 = 0. Поскольку значение 0 меньше 1, цикл должен заканчиваться.

+5

2 разделение на 2 равно 1, а не 0. –

+0

Попробуйте отладить программу. –

ответ

2

Когда i равно 1, вы печатаете его с помощью инструкции printf. Затем i получает приращение (через оператор ++ в вашем заявлении printf). Затем выполняется i /= 2, результатом которого является i = 2/2, что соответствует 1. Это удовлетворяет вашему состоянию i >= 1, делая его бесконечным циклом.

1

Когда i /= 2 становится 1, то тело цикла будет печатать 1 и приращение i по 1. Это никогда не допустит значение i /= 2 меньше 1 и, следовательно, значение i, и цикл будет бесконечно итерировать.

1

i продолжает увеличиваться до 2 и делится на 2, что создает бесконечный цикл.

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

  • Нет связанных вопросов^_^