По сути, строка представляет собой кодировку длины прогона изображения: чередующиеся символы в строке говорят, сколько раз нарисовать пробел и сколько раз подряд нарисовать восклицательный знак. Вот анализ различных элементов этой программы:
Кодированная строка
Первые 31 символ этой строки игнорируются. Остальные содержат инструкции по рисованию изображения. Отдельные символы определяют количество пробелов или восклицательных знаков для последовательного рисования.
Наружный для петли
Этот цикл перебирает символы в строке. Каждая итерация увеличивает значение b
на единицу и присваивает следующий символ в строке a
.
Внутренняя часть для петли
Этот цикл рисует отдельные символы и новую строку всякий раз, когда достигает конца строки. Количество нарисованных символов: a - 64
. Значение c
изменяется от 10 до 90 и сбрасывается до 10 при достижении конца строки.
putchar
Это можно переписать как:
++c;
if (c==90) { //'Z' == 90
c = 10; //Note: 10 == '\n'
putchar('\n');
}
else {
if (b % 2 == 0)
putchar('!');
else
putchar(' ');
}
Рисует соответствующий символ, в зависимости от того, является ли b
четным или нечетным, или при необходимости новой строкой.