Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Набор полезных программ

Rusa


Теперь мы собираемся рассмотреть семейство родственных программ, предназначе 646r173g нных для выполнения простых операций над символьными данными. В дальнейшем вы обнаружите, что многие программы являются просто расширенными версиями тех прототипов, которые мы здесь обсуждаем.



getchar() извлекает следующий вводимый символ каждый раз, как к ней обращаются, и возвращает этот символ в каче 646r173g стве своего значе 646r173g ния.

c=getchar() c

putchar(c) getchar результате обращения putchar(c) c putchar printf

printf getchar putchar не содержат ничего экстраординарного. Они не входят в состав языка «C», но к ним всегда можно обратиться.

getchar putchar

while (символ не является признаком конца файла)

Программа, написанная на языке «C», выглядит следующим образом:

main // Копировать ввод-вывод; 1-я версия

}

getchar наталкивается на конец файла ввода, она возвращает значе 646r173g ние, не являющееся действительным символом; таким образом, программа может установить, что файл ввода исчерпан. Единственное осложнение, являющееся значительным неудобством, заключается в существовании двух общеупотребительных соглашений о том, какое значе 646r173g ние фактически является признаком конца файла. Мы отсрочим решение этого вопроса, использовав символическое имя eof для этого значе 646r173g ния, каким бы оно ни было. На практике eof

#define eof -1

#define eof 0 .

eof для представления значе 646r173g ния, возвращаемого функцией getchar при выходе на конец файла, мы обеспечили, что только одна величина в программе зависит от конкретного численного значе 646r173g ния.

c int char , с тем чтобы она могла хранить значе 646r173g ние, возвращаемое getchar int eof

Программистом, имеющим опыт работы на «C», программа копирования была бы написана более сжато. В языке «C» любое присваивание, такое как

c = getchar()

может быть использовано в выражении; его значе 646r173g ние - просто значе 646r173g ние, присваиваемое левой части.

Пример 2-5. Если присваивание символа переменной c while



main // Копировать ввод-вывод; 2-я версия

c while while while main

getchar - и ужимается программа. Вложение присваивания в проверяемое условие - это одно из тех мест языка «C», которое приводит к значительному сокращению программ. Однако, на этом пути можно увлечься и начать писать недоступные для понимания программы. Эту тенденцию мы будем пытаться сдерживать.

c = getchar() != eof

c = (getchar() != eof)

c будет принимать значе 646r173g ние 0 или 1 в зависимости от того, натолкнется или нет getchar

main // Подсчет вводимых символов

++nc

nc=nc+1 ++nc (++nc) (nc++); эти две формы, как будет показано в главе 3, имеют в выражениях различные значе 646r173g ния, но как ++nc nc++ nc

long int . На PDP-11 максимальное значе 646r173g ние равно 32767, и если описать счетчик как int, то он будет переполняться даже при сравнительно малом файле ввода; на языке «C» для HONEYWELL и IBM типы long int %1d printf long Чтобы справиться с еще большими числами, вы можете использовать тип double (float

for while

main // Подсчет вводимых символов

printf %f float double. С %.0f for здесь пусто, так как вся работа выполняется в проверочной и реинициализационной частях. Но грамматические правила языка «C» требуют, чтобы оператор for



while for getchar while for while for помогают обеспечить правильное поведение программ при граничных значе 646r173g ниях проверяемых условий.

\n

main // Подсчет вводимых строк

while if ++nl if

является обозначе 646r173g нием в языке «C» для «равно» (аналогично .EQ. в ФОРТРАНЕ). Этот символ введен для того, чтобы отличать проверку на равенство от одиночного =, используемого при присваивании. Поскольку в типичных «C»-программах знак присваивания встречается примерно в два раза чаще, чем проверка на равенство, то естественно, чтобы знак оператора был вполовину короче.

Любой отдельный символ может быть записан внутри одиночных кавычек, и при этом ему соответствует значе 646r173g ние, равное численному значе 646r173g нию этого символа в машинном наборе символов; это называется символьной константой. Так, например, 'A' - символьная константа; ее значе 646r173g ние в наборе символов ASCII (американский стандартный код для обмена информацией) равно 65, внутреннему представлению символа A. Конечно, 'A' предпочтительнее, чем 65: его смысл очевиден и он не зависит от конкретного машинного набора символов.

'\n' представляет значе 646r173g ние символа новой строки. Вы должны твердо уяснить, что '\n' "\n"

t b

define yes 1



define no 0

main // Подсчет строк, слов и символов

}

printf("%d %d %d\n", nl, nw, nc);

inword следит за тем, находится ли программа в настоящий момент внутри слова или нет; сначала этой переменной присваивается «не в слове», чему соответствует значе 646r173g ние no yes no литерным значе 646r173g ниям 1 и 0, потому что они делают программу более удобной для чтения. Конечно, в такой крошечной программе, как эта, это не приводит к заметной разнице, но в больших программах увеличение ясности вполне стоит тех скромных дополнительных усилий, которых требует следование этому принципу с самого начала. Вы также обнаружите, что существенные изменения гораздо легче вносить в те программы, где числа фигурируют только в каче 646r173g стве символьных констант.

nl = nw = nc = 0;

полагает все три переменные равными нулю. Это не особый случай, а следствие того обстоятельства, что оператору присваивания соответствует некоторое значе 646r173g ние и присваивания проводятся последовательно справа налево. Таким образом, дело обстоит так, как если бы мы написали:

nc nl nw

значает OR (логическое «или») , так что строка:

if( c==' ' || c=='\n' || c=='\t')

t

&& для AND (логического И). Выражения, связанные операциями && c оказывается пробелом, то нет никакой необходимости проверять, является ли он же символом новой строки или табуляции, и такие проверки действительно не делаются. В данном случае это не имеет принципиального значе 646r173g ния, но, как мы скоро увидим, в более сложных ситуациях эта особенность языка весьма существенна.

else языка «C», который указывает то действие, которое должно выполняться, если условие, содержащееся в операторе if

if (выражение)

оператор-1;

else

оператор-2;

if-else

else if

. Как бы вы стали проверять программу подсчета слов? Kакие имеются ограничения?




Document Info


Accesari: 1452
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )