Язык Си - [54]

Шрифт
Интервал

выражение1 || выражение2:     истинно, если какое-нибудь одно или оба выражения истинны

!выражение:     истинно, если выражение ложно, и на оборот


ПОРЯДОК ВЫЧИСЛЕНИИ

     Логические выражения вычисляются слева направо; вычисления прекращаются, как только устанавливается истинность или ложность всего выражения.


ПРИМЕРЫ

     Выражение: 6 > 2 && 3 = = 3:     истинно

     Выражение: !(6 > 2 && 3 = = 3):     ложно

     Выражение: х != 0 && 20/х < 5:     второе выражение вычисляется только при условии, что х не равен нулю.

ПРОГPAMMA ПОДСЧЕТА СЛОВ

     Теперь у нас есть возможности для написания программы подсчета числа слов в тексте. (Она может также подсчитывать символы строки.) Решающим моментом является разработка способа, с помощью которого программа будет распознавать слова. Мы будем придерживаться сравнительно простого подхода и определим слово как последовательность символов, которая не содержит "пуcтых символов". Поэтому "glymxck" и "r2d2" - это слова. Пeременная word будет использоваться для хранения указания о том, является ли введенный символ частью данного слова или началом следующего. Появление "пустого символа" (которым может быть пробел, табуляция или "новая строка") служит признаком конца слова. Тогда следующий "непустой" символ будет означать начало нового слова, и мы сможем увеличить значение счетчика слов на 1.

Вот эта программа:

#include

 #define YES 1

#define NO 0

main( )

{

   int ch;   /* введенныйсимвол*/

long nc = 0L;   /* число символов */

int n1 = 0;   /* число строк */

int nw = 0;   /* число слов */

int word = NO;   /* = = YES, если содержимое ch - часть слова */

while((ch = getchar( )) != EOF)

{

 nc++ ;   / * подсчет символов * /

  if (ch = = '\n' ) nl++;   /* подсчет строк */

  if (ch != '  ' && ch != '\n'  &&  ch !='\t'  && word ==NO)

    {

        word = YES;   /* начало нового слова  */

        nw++;   /* подсчет слов */

    }

if ((ch = = '  ' ||  ch = = '\n'  ||  ch = = '\t' ) && word == YES)

    word = NO; /* достигнут конец слова */

}

printf(" символов  = %1d, слов = %d, строк = %d\n", nc, nw, nl);

}

     Поскольку существуют три различных "пустых символа", мы должны использовать логические операции для проверки всех трех возможностей. Рассмотрим, например, следующую строку:

if(ch != ' ' && ch != '\n'  && ch != '\t ' && word == NO).

     В ней говорится: "если содержимое ch - не пробел, и не новая строка, и не табуляция, и не первый символ слова". (Первые три условия эквивалентны проверке, не является ли содержимое ch пустым символом). Выполнение всех четырех условий служит признаком начала нового слова, и значение переменной nw увеличивается. Если мы в середине слова, то первые три условия оказываются вы полненными, но значением переменной word окажется признак YES, и значение переменной nw не увеличивается. Когда в процессе ввода встретится очередной "пустой" символ, переменной word будет вновь присвоен признак NO.

     Просмотрите программу и проверьте, правильно ли она интерпретирует случаи, когда между словами находится несколько "пустых" символов подряд.

     Если вы захотите применить эту программу для работы с файлами, используйте операции переключения.

ПРОГРАММА, "РИСУЮЩАЯ" СИМВОЛАМИ

     Давайте теперь займемся чем нибудь менее утилитарным и более декоративным. Нашей целью является создание программы, с помощью которой вы сможете рисовать на экране геометрические фигуры, заполненные символами. Каждая выводимая строка представляет собой сплошной рад одинаковых символов.

     Нам предоставляется возмжность выбора символа, длины строки, а текже начальной позиции, с которой она выводиться на печать. Программа читает указываемые параметры до тех пор, пока не встретит признак EOF. Текст программы представлен на рис. 7.5.

     Положим, мы вызываем программу sketcher. Чтобы ее выполнить, мы набираем на клавиатуре ее имя, затем вводим символ и два числа. На экране появляется отклик, после чего мы вводим его набор параметров, отклик появляется вновь, и так до тех пор пока мы не введем признак EOF.

В среде ОС UNIX диалог будет выглядеть следующим образом:

%   sketcher

B 10 20

      BBBBBBBBBBB

Y 12 18

         YYYYYYY

[CTRL/-d]

%

/* художник-график */

/* РИСУЕТ  сплошные фигуры */

#include

 #define MAXLENGTH  80

main( )

{

int ch; /*печатаемыйсимвол*/

int start, stop;  /* начальная и конечные позици */

int count;   /* счетчикпозиций*/

whilе((сh = getchar( )) != EOF)   /* вводсимвола*/

{

  if(ch != '\n' )  /*пропуск символа "новая строка"*/

   { scanf(" %d  %d", &start, &stop);  /* ввод граничных значний*/

     if (start > stop ||  start < 1 ||        stop > MAXLENGTH)

        printf(" Введены неправильные граничные значе ния \n");

     else

        { count = 0;

          while(++count < start)

            putchar(' '); /* печать пробелов вплоть до начальной позиции */

          while(count++  <= stop)

            putchar(ch);   /*печать символа до конечной позиции */

          putchar(' \n'); /* закончить печать строки и начать новую */

        }   /* конец части else */

  }   /* конец проверки содержимого ch */

}   /* конец цикла while */

}   /* конец программы */


Еще от автора Митчел Уэйт
Язык программирования C [Лекции и упражнения, 6-е изд.]

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


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.