&& - логическое И || - логическое ИЛИ ! - логическое НЕТ

 

На основе этих трех логических операций можно сформировать более сложные условия.

Например, если имеются три переменные exp1, exp2 и exp3, то они могут составлять логические конструкции, представленные в таблице 3:

 

Таблица 3 . Пример составных логических конструкций

 

if(exp1 > exp2 && exp2 < exp3 ) Истинно, если значение переменной expl больше значения переменной exp2 и значение переменной exp2 меньше значения переменной exp3.
if(exp1 <= exp2 || expl >= exp3 ) Истинно, если значение переменной exp1 меньше либо равно значения переменной exp2 или значение переменной exp2 больше либо равно значения переменной exp3.
if(exp1 && exp2 && !exp3) Истинно, если истинное значение exp1 и истинно значение exp2 и ложно значение exp3.
if(!exp1 || !exp2 && exp3) Истинно, если ложно значение exp1 или ложно значение exp2 и истинно значение exp3.

 

Подобно операциям умножения и сложения в математике, логические операции И ИЛИ НЕТ, также имеют свои приоритеты. Самый высокий приоритет имеет операция НЕТ, т.е. такая операция выполняется в первую очередь. Более низкий приоритет у операции И, и наконец самый малый приоритет у операции ИЛИ.

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

Однако во многих случаях оказывается более удобным применять оператор switch языка С.

 

 

Синтаксис данного оператора следующий:

switch(переменная)

{ case константа1:

<операторы>

case константа2:

<операторы>

default:

<операторы> }

Данный оператор последовательно проверяет на равенство переменной константам, стоящим после ключевого слова case. Если ни одна из констант не равна значению переменно, то выполняются операторы, находящиеся после слова default. Оператор switch имеет следующую особенность. Допустим, значение переменной равно значению константы 1 и выполняются операторы, стоящие после первого ключевого слова case. После этого выполнение программы продолжится проверкой переменной на равенство константы 2, что часто приводит к неоправданным затратам ресурсов. Во избежание такой ситуации следует использовать оператор break для перехода программы к следующему оператору после switch.

Пример : использования оператора switch.

#include <stdio.h>

int main()

{ int x;

printf("Введите число: ");

scanf("%d",&x);

switch(x)

{ case 1 : printf("Введено число 1\n"),break;

case 2 : printf("Введено число 2\n"); break;

default : printf("Введено другое число\п"); }

char ch;

printf("Введите символ: ");

scanf("%с",&с h ; switch(ch)

{case 'a': printf("Введен символ а \n "); break;

case 'b': printf("Введен символ b\n"); break;

default : printf("Введен другой символ\ n ");

}

return 0;

}

Данный пример демонстрирует два разных варианта использования оператора switch. В первом случае выполняется анализ введенной цифры, во втором - анализ введенного символа. Следует отметить, что данный оператор может производить выбор только на основании равенства своего аргумента одному из перечисленных значений case, т.е. проверка выражений типа x<0 в данном случае невозможна.

 

О ператоры циклов языка С .

 

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

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

while(<условие>)

{<тело цикла> }

П ример цикла, в котором выполняется суммирование элементов ряда S = ∑ i , пока S < N:

 

int N=20, i = 0;

long S = 0;

while(S < N)

{ S=S+i;

i + +; }

В данном примере реализуется цикл while с условием i < N. Так как начальное значение переменной i=0, а N=20, то условие истинно и выполняется тело цикла, в котором осуществляется суммирование переменной i и увеличение ее на 1. Очевидно, что на 20 итерации значение i=20, условие станет ложным и цикл будет завершен.

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

int N=20, i = 0;

long S = 0;

while((S=S+i++) < N);

В данном случае при проверке условия сначала выполняются операторы, стоящие в скобках, где и осуществляется суммирование элементов ряда и только, затем, проверяется условие. Результат выполнения обоих вариантов программ одинаковый и S=21.

Однако последняя конструкция бывает удобной при реализации опроса клавиатуры, например, с помощью функции scanf():

int num;

while(scanf("%d",& num ) == 1)