4. а. Константа char (но сохраненная как значение типа int).
б. Константа double.
в. Константа unsigned int, представленная в шестнадцатеричном формате.
г. Константа double.
5. Строка 1: должна иметь вид #include .
Строка 2: должна иметь вид int main (void).
Строка 3: необходимо использовать (, а не (.
Строка 4: между g и h должна находиться запятая, а не точка с запятой.
Строка 6 (пустая): в порядке.
Строка 7: перед е должна находиться хотя бы одна цифра. В данном случае вполне подошло бы 1е21 или 1.0е21, хотя они достаточно большие. Строка 8: в порядке, во всяком случае, с точки зрения синтаксиса.
Строка 9: необходимо применять }, а не ).
Отсутствующие строки. Во-первых, переменной rate никогда не присваивается значение. Во-вторых, переменная h никогда не используется. Кроме того, программа совершенно не информирует пользователя о результатах вычислений. Ни одна из этих ошибок не помещает запуску программы (хотя может быть выведено предупреждение о неиспользуемой переменной), но они преуменьшают и без того ограниченную ее пригодность. Кроме того, в конце программы должен быть предусмотрен оператор return.
Ниже представлена одна из возможных корректных версий:


Ответы на вопросы для самоконтроля 795
Приложение А
Вот одна из возможных корректных версий:
#include
int main(void) /* эта программа безупречна */
{
int cows, legs;
printf("Сколько коровьих ног вы насчитали?\n"); scanf("%d", slegs); cows = legs / 4;
printf("Отсюда следует, что есть %f коров(а)", cows); return 0;
}
11. а. Символ новой строки.
б. Символ обратной косой черты.
в. Символ двойной кавычки.
г. Символ табуляции.
Ответы на вопросы для самоконтроля из главы 4
1. Программа функционирует некорректно. Первый оператор scanf() читает только имя, оставляя фамилию незатронутой, но по-прежнему находящейся в буфере ввода. (Этот буфер представляет собой просто временную область, используемую для хранения входных данных.) Когда следующий оператор scanf() переходит к считыванию веса, он продолжает чтение с того места, где была завершена предыдущая попытка, и пытается прочитать фамилию как значение веса. Это ведет к ошибке работы scanf(). С другой стороны, если в ответ на запрос имени ввести что-то вроде Иван 144, то 144 будет применяться в качестве значения веса, несмотря на то, что оно введено до выдачи запроса на ввод веса.
2. а. Он продал эту картину за $234.50
б.hi!
(Примечание: первый символ — это символьная константа, второй — десятичное целое значение, преобразованное в символ, а третий — восьмеричное ASCII-представление символьной константы.)
в. Его Гамлет был хорош, и без намека на вульгарность, содержит 51 символов.
Г. Является ли 1.20е+003 тем же, что и 1201.00?
3. Необходимо использовать символы \", как показано ниже:
printf("\"%s\"\nсодержит %d символов.\n", Q, strlen(Q));
4. Корректная версия выглядит следующим образом:

#include /* не забудьте включить эту строку*/
Ответы на вопросы для самоконтроля 797
char name [40]; /* создайте массив */
printf("Введите свое имя.\n"); /* вставьте символ \n для улучшения
читабельности */
scanf("%s", name);
printf("Хорошо, %C, а сколько вам лет?\n", name); /* %s для строки */ scanf ("%d", sage); /* %d, а не %f, sage, а не age */
xp = age + X;
printf("Неужели, %s! Вам должно быть, по меньшей мере, %d.\n", В, хр); return 0; /* не перезапускать */
}
5. Вспомните о конструкции %%, предназначенной для вывода символа %.
printf("Данный экземпляр книги \"%s\" стоит $%0.2f.\n", BOOK, cost); printf("Это %0.0f%% от цены в прайс-листе.\n", percent);



(Примечание: в функции ввода спецификаторы формата е, f и g можно использовать взаимозаменяемо. Кроме того, для всех спецификаторов кроме %с наличие пробелов между спецификаторами преобразования никакой роли не играет.)

Читать дальше