Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Основы программирования на Си.doc
Скачиваний:
361
Добавлен:
02.05.2014
Размер:
1.3 Mб
Скачать

Логические операции

Иногда бывает полезным объединить два или более условных выражения. Например, нам нужно подсчитать, сколько символов не является пробелами, символами новая строка и табуляции. Напишем такую программу:

/* число символов */

main( )

{

int ch;

int count=0;

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

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

count++;

printf("Всего %d непустых символов. \n", count);

}

Оператор, использующий логическую операцию и, обозначаемую &&. Смысл действий, осуществляемых оператором if, можно пояснить так:

Операция

Смысл

&&

И

||

ИЛИ

!

НЕ

Если прочитанный символ - не пробел и не символ "новая строка", и не символ табуляции, то происходит увеличение значения переменной count на единицу. Все выражение будет истинным, если указанные три условия - истины. В языке Си имеются три логические операции.

Операция условия: ?:

В языке Си имеется короткий способ записи одного из видов оператора if-else. Он называется "условным выражением" и использует операцию условия - ?:. Эта операция состоит из двух частей и содержит три операнда. Рассмотрим, как можно найти абсолютное значение числа:

x = (y < 0) ? -y : y;

Все, что находится между знаком = и символом "точка с запятой" представляет собой условное выражение. Смысл этого оператора заключается в следующем: если y меньше 0, то x=-y; в противном случае x=y. В терминах оператора if-else данный оператор мог выглядеть так:

if (y < 0) x=-y;

else x=y;

В общем виде условное выражение можно записать следующим образом:

выражение1 ? выражение2 : выражение3

Если выражение1 истинно (не равно нулю), то значением всего условного выражения является величина выражение2; если выражение1 ложно (равно 0), то значение всего условного выражения - величина выражение3.

!

Условное выражение удобно использовать в тех случаях, когда имеется некоторая переменная, которой можно присвоить одно из двух возможных значений. Использование условных выражений не является обязательным, поскольку тех же результатов можно достичь при помощи оператора if-else. Однако условные выражения более компактны, и их применение обычно приводит к получению более компактного машинного кода.

Множественный выбор

Когда в программе нужно осуществить выбор одного из нескольких вариантов, мы можем сделать это, используя конструкцию if-else if-else_...else Во многих случаях оказывается более удобным применять оператор switch.

Оператор switch (переключатель) используется для разветвления программы по нескольким направлениям. Он имеет следующую форму:

switch(e) {

сase c1: s1; break;

case c2: s2; break;

...

case ck: sk; break;

default: s(k+1);

}

где

e - целое выражение (или выражение, которое может быть преобразовано в целое выражение);

ci - целое выражение с постоянным значением (или выражение, которое может быть преобразовано к такому выражению);

si обозначает операторы, число которых может быть больше или равно нулю.

Метки ci, обозначающие альтернативы case, должны быть уникальными; двух одинаковых меток быть не может. Только одна альтернатива может получить префикс default.

Результатом выполнения оператора switch является выбор альтернативы с меткой ci, которая равна значению выражения переключателя e; в этом случае выполняются операторы si. В случае, если выражение переключателя не равно ни одному из выражений альтернатив case, то выполняются операторы s(k+1); при отсутствии альтернативы default не выполняется ни одна из альтернатив оператора switch.

Пример:

/* Реализация работы калькулятора. Сначала задается

число - сколько раз нужно подсчитать. Вводятся

левый операнд, операция, правый операнд. Оператор

выбора определяет, какой оператор должен работать.

Результат выводится на экран. */

#include <stdio.h>

#include <conio.h>

#include <process.h>

main()

{

float a,b;

char opr;

float result=0;

int I,i=0;

clrscr();

printf("Сколько раз будете считать?:\n");

scanf("%I",&I);

printf("Введите операнд, операцию, операнд:\n");

while(i<I) {

i++;

scanf("%f%c%f",&a,&opr,&b);

switch(opr) {

case '+': result=a+b; break;

case '-': result=a-b; break;

case '*': result=a*b; break;

case '/': result=a/b; break;

default:

printf("Ошибка. Неверен знак операции ");

exit(1); /* функция берется

из заголовочного

файла process.h*/

}

textcolor (15); /* функция берется из

заголовочного файла conio.h*/

cprintf("Результат равен %g\n",result);

if (i<I)

printf("Введите операнд, операцию, операнд\n");

else

{

textcolor(12);

/* функция берется из заголовочного файла

conio.h */

cprintf("Конец работы\n");

/* текст печатается красным цветом*/

}

}

getch () ;

exit(0);

/* функция берется из заголовочного файла

process.h */

}