По сути, строка представляет собой кодировку длины строки : чередующиеся символы в строке говорят, сколько раз рисовать пробел и сколько раз подряд восклицательный знак. Вот анализ различных элементов этой программы:
Кодированная строка
Первые 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
является ли он четным или нечетным, или перевод строки, когда это необходимо.