Вопросы для самоконтроля
Ответы на вопросы для самоконтроля приведены в приложении А.
1. Выражение putchar (getchar()) является допустимым; что оно делает? Допустимо ли будет выражение getchar (putchar()) ?
2. Какие действия выполняют следующие операторы?
а. putchar (' Н ');
б. putchar ( ‘\ 007 ');
в. putchar ( ‘\n');
Г. putchar ( ‘\b');
3. Предположим, что имеется исполняемая программа по имени count, которая подсчитывает количество символов во входных данных. Напишите команду для среды командной строки, которая использует программу count для подсчета количества символов в файле essay и для сохранения результата в файле essayct.
4. При наличии программы и файлов, описанных в вопросе 3, какие из приведенных ниже команд являются допустимыми?
а. essayct
б. count essay
в. essay >count
5. Что такое EOF?
Символьный ввод-вывод и проверка достоверности ввода 323
6. Каким будет вывод каждого из показанных далее фрагментов для указанного ввода (предположите, что переменная ch имеет тип int и ввод является буферизированным)?
а. Ввод выглядит следующим образом:
If you quit, I will.[enter]
Фрагмент программы имеет вид:
while ((ch = getchar()) ! = 'i ') putchar(ch);
б. Ввод выглядит следующим образом:
Harhar[enter]
Фрагмент программы имеет вид:
while ((ch = getchar()) != '\n')
{
putchar(ch+ + ); putchar(++ch);
}
7. Как в С учитываются разные соглашения относительно файлов и символов новой строки, принятые в различных компьютерных системах?
8. С какой потенциальной проблемой вы столкнетесь при смешивании символьного и числового ввода в системе с буферизированным вводом?
Упражнения по программированию
В некоторых из описанных ниже упражнений требуется прекращение ввода по достижении EOF. Если в вашей операционной системе перенаправление реализовано неудобно или вообще отсутствует, воспользуйтесь какой-то другой проверкой для прекращения ввода, такой как чтение символа &.
1. Напишите программу, которая подсчитывает количество символов во входных данных до достижения конца файла.
2. Напишите программу, которая читает ввод как поток символов, пока не встретит EOF. Программа должна выводить каждый введенный символ и его десятичный код ASCII. Следует отметить, что в кодировке ASCII символы, предщесг вующие пробелу, являются непечатаемыми. Трактуйте их особым образом. Если непечатаемым символом является символ новой строки или символ табуляции, выводите, соответственно, \n или \t. В противном случае воспользуйтесь нотацией управляющих символов. Например, ASCII-код 1 — это комбинация , которую можно отобразить как ЛА. Обратите внимание, что ASCII-код символа А представляет собой значение плюс 64. Аналогичная зависимость имеется и для других непечатаемых символов. Выводите по 10 пар в строке, кроме случая, когда встречается символ новой строки. (На заметку: операционная система может иметь специальные интерпретации для некоторых управляющих символов и не допускать их попадания в программу.)
3. Напишите программу, которая читает ввод как поток символов, пока не встретит EOF. Программа должна сообщать количество прописных букв, количество строчных букв и количество остальных символов во входных данных. Можете предполагать, что числовые значения для строчных букв являются последовательными, и то же самое справедливо для прописных букв. Либо для большей переносимости можете использовать подходящие классификационные функции из библиотеки ctype.h.
324 глава 8
4. Напишите программу, которая читает ввод как поток символов, пока не встретит EOF. Программа должна сообщать среднее количество букв в словах. Не считайте пробельные символы в словах буквами. На самом деле, также не должны учитываться и знаки препинания, но в данном упражнении об этом можно не беспокоиться. (Для учета знаков препинания можно воспользоваться функцией ispunct() из семейства ctype.h.)
5. Модифицируйте программу угадывания чисел из листинга 8.4, чтобы реализовать более интеллектуальную стратегию угадывания. Например, программа может изначально предположить число 50 и запросить, больше ли оно задуманного, меньше его или же это и есть задуманное число. Если, скажем, предположение меньше задуманного числа, следующая догадка должна находиться посредине между 50 и 100, т.е. 75. Если данное предположение больше задуманного числа, то следующая догадка должна располагаться посредине между 75 и 50 и т.д. Используя такую стратегию двоичного поиска, программа быстро найдет правильный ответ, во всяком случае, если пользователь не будет обманывать.
Читать дальше