сколько раз будет выполняться цикл без знака - PullRequest
0 голосов
/ 20 сентября 2011

Я новичок в C / C ++. Так что извините за простоту вопроса, но здесь идет

unsigned char i;
for (i=0; i<1000; ++i)
  if ((i%4) == 0)
    printf("hello\n");

сколько раз код напечатает "привет". Я говорю 63, но, увы, это не один из вариантов. Может ли кто-нибудь дать ответ, но, что более важно, объяснить, почему

Ответы [ 6 ]

7 голосов
/ 20 сентября 2011

Примечание : я предполагаю 8-битные типы символов.

Вы переполнитесь, когда выполните ++i для i, равного 255. В этот момент языковой стандарт устанавливает, что i становится 0, явление, широко известное как циклический переход.

Итак, у вас есть бесконечный цикл, поскольку i<1000 для всех значений i.

4 голосов
/ 20 сентября 2011

Я бы посоветовал вам провести эксперимент, запустив код. Если это не помогает, попробуйте распечатать значения i, для которых выполняется условие. Если затем вы заметите какие-либо аномалии в изменении значения i, подумайте о возможных причинах этого.

3 голосов
/ 20 сентября 2011

Ответ - бесконечное время, диапазон беззнакового символа находится в диапазоне 0-255 (1 байт), когда он выходит за пределы 255, он переполняется и возвращается к 0, что означает, что он никогда не достигнет 1000 .. следовательно бесконечный цикл

1 голос
/ 20 сентября 2011

Здесь вы объявили "i" как неподписанный символ, чей диапазон меньше 1000 и его размер 1 байт (0-255), когда он снова достигает 255, он уменьшается, тогда при любом условии значение не будет превышать 1000 бкос "i "колеблется в пределах 0-255.

, поэтому цикл for не завершается без ошибок n выполняется неопределенно

Надеюсь, вы поняли мою точку зрения ...... !!!!!!!!!! * * 1005

0 голосов
/ 20 сентября 2011

Печать "привет" с бесконечным временем, потому что причина проста, беззнаковый символ имеет предел до 255, после чего, если вы снова увеличите его, они станут равными нулю и снова достигнут 255, а затем равны нулю, так что переменная, которую я никогда не достигну 1000мы называем это бесконечным циклом.

0 голосов
/ 20 сентября 2011

Я говорю 0 - это не "привет", а "привет": -)

Но теперь в реальном: i имеет значения 0, 1, 2, ... 999. Эти1000 значений.

Когда будет напечатана строка?Если i равно 0, 4, 8, 12, ... - то есть один раз каждые 4 цикла цикла.

-> В 1000 циклах цикла он печатается 250 раз.

Это было бы верно без unsigned char в качестве типа данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...