Подсчет символов

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “C” Hачинаем. Единственный способ освоить новый язык Оператор FOR Набор полезных программ Подсчет символов Подсчет слов Функции Аргументы - вызов по значению Область действия: внешние переменные Резюме Константы Описания Преобразование типов До 9 и буквы от а до F Операции и выражения присваивания Старшинство и порядок вычисления Операторы и блоки Переключатель Цикл DO - WHILE Оператор CONTINUE Основные сведения Функции, возвращающие нецелые значения Еще об аргументах функций Правила, определяющие область действия Статические переменные Блочная структура Рекурсия Указатели и адреса Указатели и массивы Адресная арифметика Указатели символов и функции Указатели - не целые До 12, а не от 0 до 11. Так как за экономию памяти у нас пока не награждают, такой способ проще, чем подгонка индек-сов Инициализация массивов указателей Указатели на функции Структуры Структуры и функции Указатели на структуры Мы продемонстрируем, как правильно выполнить эту задачу Поля Определение типа Обращение к стандартной библиотеке Форматный вывод - функция PRINTF Форматный ввод - функция SCANF Форматное преобразование в памяти Обработка ошибок - STDERR и EXIT Обращение к системе Низкоуровневый ввод/вывод - операторы READ и WRITE Произвольный доступ - SEEK и LSEEK Пример - распечатка справочников Пример - распределитель памяти Константы Синтаксическая нотация Преобразования Первичные выражения Унарные операции Аддитивные операции Операция присваивания Спецификаторы типа Описание структур и объединений Инициализация TYPEDEF Оператор SWITCH Внешнее определение функции Область действия внешних идентификаторов Неявные описания Явные преобразования указателей Анахронизмы Операторы
439386
знаков
0
таблиц
0
изображений

1.5.3. Подсчет символов.

 

Следующая программа подсчитывает число символов; она

представляет собой небольшое развитие программы копирования.

MAIN() /* COUNT CHARACTERS IN INPUT */

{

LONG NC;

NC = 0;

WHILE (GETCHAR() != EOF )

++NC;

PRINTF(“%1D\N”, NC);

}

 

Оператор

++NC;

демонстрирует новую операцию, ++, которая означает увеличе-

ние на единицу. Вы могли бы написать NC = NC + 1 , но ++NC

более кратко и зачастую более эффективно. Имеется соответст-

вующая операция—уменьшение на единицу. Операции ++ и—

могут быть либо префиксными (++NC), либо постфиксными

(NC++); эти две формы, как будет показано в главе 2, имеют в

выражениях различные значения, но как ++NC, так и NC++ уве-

личивают NC. Пока мы будем придерживаться префиксных опера-

ций.


·     23 -

Программа подсчета символов накапливает их количество в

переменной типа LONG, а не INT . На PDP-11 максимальное зна-

чение равно 32767, и если описать счетчик как INT , то он

будет переполняться даже при сравнительно малом файле ввода;

на языке “C” для HONEYWELL и IBM типы LONG и INT являются

синонимами и имеют значительно больший размер. Спецификация

преобразования %1D указывает PRINTF , что соответствующий

аргумент является целым типа LONG .

Чтобы справиться с еще большими числами, вы можете ис-

пользовать тип DOUBLE / FLOAT двойной длины/. мы также ис-

пользуем оператор FOR вместо WHILE с тем, чтобы проиллюстри-

ровать другой способ записи цикла.

 

MAIN() /* COUNT CHARACTERS IN INPUT */

{

DOUBLE NC;

FOR (NC = 0; GETCHAR() != EOF; ++NC)

;

PRINTF(“%.0F\N”, NC);

}

 

Функция PRINTF использует спецификацию %F как для FLOAT

, так и для DOUBLE ; спецификация %.0F подавляет печать не-

существующей дробной части.

Тело оператора цикла FOR здесь пусто, так как вся рабо-

та выполняется в проверочной и реинициализационной частях.

Но грамматические правила языка “C” требуют, чтобы оператор

FOR имел тело. Изолированная точка с запятой, соответствую-

шая пустому оператору, появляется здесь, чтобы удовлетворить

этому требованию. Мы выделили ее на отдельную строку, чтобы

сделать ее более заметной.

Прежде чем мы распростимся с программой подсчета симво-

лов, отметим, что если файл ввода не содержит никаких симво-

лов, то условие в WHILE или FOR не выполнится при самом пер-

вом обращении к GETCHAR , и, следовательно , программа вы-

даст нуль, т.е. Правильный ответ. это важное замечание. од-

ним из приятных свойств операторов WHILE и FOR является то,

что они проверяют условие в начале цикла, т.е. До выполнения

тела. Если делать ничего не надо, то ничего не будет сдела-

но, даже если это означает, что тело цикла никогда не будет

выполняться. программы должны действовать разумно, когда они

обращаются с файлами типа “никаких символов”. Операторы

WHILE и FOR помогают обеспечить правильное поведение прог-

рамм при граничных значениях проверяемых условий.

 

1.5.4. Подсчет строк.

 

Следующая программа подсчитывает количество строк в

файле ввода. Предполагается, что строки ввода заканчиваются

символом новой строки \N, скрупулезно добавленным к каждой

выписанной строке.


·     24 -

MAIN() /* COUNT LINES IN INPUT */

 {

INT C,NL;

NL = 0;

WHILE ((C = GETCHAR()) != EOF)

IF (C =='\N')

++NL;

PRINTF(“%D\N”, NL);

 }

 

Тело WHILE теперь содержит оператор IF , который в свою

очередь управляет оператором увеличения ++NL. Оператор IF

проверяет заключенное в круглые скобки условие и, если оно

истинно, выполняет следующий за ним оператор /или группу

операторов, заключенных в фигурные скобки/. Мы опять исполь-

зовали сдвиг вправо, чтобы показать, что чем управляет.

Удвоенный знак равенства == является обозначением в

языке “C” для “равно” /аналогично .EQ. В фортране/. Этот

символ введен для того, чтобы отличать проверку на равенство

от одиночного =, используемого при присваивании. Поскольку в

типичных “C” - программах знак присваивания встречается при-

мерно в два раза чаще, чем проверка на равенство, то естест-

венно, чтобы знак оператора был вполовину короче.

Любой отдельный символ может быть записан внутри оди-

ночных кавычек, и при этом ему соответствует значение, рав-

ное численному значению этого символа в машинном наборе сим-

волов; это называется символьной константой. Так, например,

'A' - символьная константа; ее значение в наборе символов

ASCII /американский стандартный код для обмена информацией/

равно 65, внутреннему представлению символа а. Конечно, 'A'

предпочтительнее, чем 65: его смысл очевиден и он не зависит

от конкретного машинного набора символов.

Условные последовательности, используемые в символьных

строках, также занимают законное место среди символьных кон-

стант. Так в проверках и арифметических выражениях '\N'

представляет значение символа новой строки. Вы должны твердо

уяснить, что '\N' - отдельный символ, который в выражениях

эквивалентен одиночному целому; с другой стороны “\N” - это

символьная строка, которая содержит только один символ. Воп-

рос о сопоставлении строк и символов обсуждается в главе 2.

Упражнение 1-6.

Напишите программу для подсчета пробелов, табуляций и

новых строк.

Упражнение 1-7.

Напишите программу, которая копирует ввод на вывод, за-

меняя при этом каждую последовательность из одного или более

пробелов на один пробел.


Информация о работе «Язык С»
Раздел: Информатика, программирование
Количество знаков с пробелами: 439386
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
48443
0
0

... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...

Скачать
43709
0
0

... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...

Скачать
39778
0
1

... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...

Скачать
64931
0
0

... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...

0 комментариев


Наверх