7. Вывод имеет следующий вид:
SOS:4 4.00
Значение выражения cl - с2 совпадает со значением выражения 'S' - ‘0', которое в ASCII-коде выглядит как 83 - 7 9.
8. Программа выведет одну строку цифр от 1 до 10 в полях шириной по пять символов, а затем перейдет на новую строку:
123456789 10
9. Возможный вариант программы, в которой предполагается, что буквы кодируются последовательно, как это имеет место в кодировке ASCII, выглядит следующим образом:
#include int main(void)
{
char ch = ' a '; while (ch <= ' g')
printf("%5c", ch++); printf (" \n"); return 0;
}
10. Эти фрагменты выводили бы следующие результаты:
а. 1 2
Обратите внимание, что переменная х сначала инкрементируется и затем производится сравнение. Курсор остается в той же строке.
б. 101 102
103
104
Ответы на вопросы для самоконтроля 801
Обратите внимание, что на этот раз х сначала сравнивается, а затем инкрементируется. И в данном случае, и в случае а) значение х увеличивается перед выполнением вывода. Обратите также внимание, что запись второго оператора printf() с отступом нс делает его частью цикла while. Следовательно, этот оператор вызывается только один раз после завершения цикла while.
в. stuvw
Здесь инкрементирование происходит только после первого оператора
printf().
11. Программа сконструирована неудачно. Поскольку оператор while не содержит фигурных скобок, частью цикла является только оператор printf(), поэтому программа бесконечно повторяет вывод сообщения COMPUTER BYTES DOG до тех пор, пока вам не удастся принудительно прекратить ее работу.

Ответы на вопросы для самоконтроля из главы 6
1. 2, 7, 70, 64, 8, 2
2. Он должен вывести следующее:
36 18 9 4 2 1
Если бы переменная value имела тип double, то результат проверки условия оставался бы истинным даже при значениях value, меньших 1. Выполнение цикла продолжалось бы до тех пор, пока потеря значимости при вычислениях с плавающей запятой не привела бы к получению значения 0. Кроме того, в этом случае выбор спецификатора %3d был бы неправильным.
3. а. х > 5
б. scanf ("%lf",&x) ! = 1
в. х == 5
4. a. scanf ("%d", &х) == 1
б. х ! = 5
в. х >= 2 0
5. Строка 4: должна содержать list [10].
Строка 6: запятые необходимо заменить точками с запятой.
Строка 6: диапазоном для i должен быть 0-9, а не 1-10.
802 Приложение А
Строка 9: запятые необходимо заменить точками с запятой.
Строка 9: операцию >= необходимо заменить операцией <=, иначе цикл будет выполняться порядочное время.
Строка 11: между строками 11 и 12 должна присутствовать дополнительная закрывающая фигурная скобка. Одна скобка закрывает блочный оператор и еще одна — программу. Между этими скобками необходимо поместить строку return 0;.
Вот скорректированная версия:

6. Ниже показан один из возможных вариантов:
#include int main(void)
{
int col, row;
for (row = 1; row <= 4; row++)
{
for (col = 1; col <= 8; col++) printf("$"); printf ("\n");
}
return 0;
}
7. а. Программа выведет следующую строку:
Hi! Hi! Hi! Bye! Bye! Bye! Bye! Bye!
б. Программа выведет следующую строку:
ACGM
Поскольку код добавляет значение int к значению char, компилятор может выдать предупреждение о возможности потери значащих цифр.
8. Эти программы выведут следующие данные:
а. Go west, youn
б. Нр ! xf tu-! zpvo
в. Go west, young r. $0 west, youn
Ответы на вопросы для самоконтроля 803
9. Должен быть получен следующий вывод:

10. a. mint.
б. 10 элементов.
в. Значения типа double.
г. Правильной является строка scanf ("%lf", &mint [2] ); mint [2] — это значение типа double, a &mint [2] — его местоположение.
11. Поскольку первый элемент имеет индекс 0, переменная цикла должна изменяться в диапазоне от 0 до SIZE - 1, а не от 1 до SIZE. Однако внесение этого изменения приводит к присваиванию первому элементу значения 0, а не 2. Таким образом, цикл необходимо переписать в следующем виде:
for (index = 0; index < SIZE; index++) by_twos[index] = 2 * (index + 1);
Аналогично должны быть изменены пределы во втором цикле. Кроме того, имя массива должно сопровождаться индексом массива:
for( index = 0; index < SIZE; index++) printf("%d ", by_twos[index]);
Один из опасных аспектов неправильного указания пределов в цикле связан с тем, что программа может работать, но поскольку она помещает данные не в те ячейки памяти, куда должна, она может перестать работать в какой-то момент в будущем, формируя своего рода “мину замедленного действия”.
Читать дальше