Лекция: Общее знакомство

Вид материалаЛекция

Содержание


Операции отношения
Что такое истина
Осложнение с понятием истина
Логические операции
Операция условия: ?
Подобный материал:
1   ...   8   9   10   11   12   13   14   15   ...   33
^

Операции отношения


Операции отношения используются для сравнений. Мы уже обсуждали их, но здесь мы остановимся на их обсуждении подробнее.

Операция

смысл

<

меньше

<=

меньше или равно

==

равно

>=

больше или равно

>

больше

!=

не равно

Этот список хорошо соответствует возможным числовым соотношениям.

!

Главное предостережение, которое мы хотим сделать, состоит в том, чтобы не использовать знак = вместо ==. С помощью операции присваивания некоторое значение присваивается переменной слева от знака равенства. В то же время с помощью операции отношения "равенство" проверяется: равно ли выражение, стоящее слева от знака, выражению справа от него. Эта операция не изменяет значения переменной в левой части, если она там присутствует. При программировании требуется аккуратность, потому что в ряде случаев компилятор не сможет обнаружить ошибки, связанные с неправильным использованием знаков этих отношений, что приведет к результатам, отличным от тех, которые вы должны были бы получить.

Операции отношения применяются при формировании условных выражений, используемых в операторе if и while. Указанные операторы проверяют, истинно или ложно данное выражение.

Пример:

#include

main( )

{

int mark;

mark = getchar( );

if(mark == 4)

printf("Оценка 4.\n");

else if (mark > 4)

printf("Оценка больше 4!\n");

else /* случай, когда оценка меньше 4 */

{

mark++;

printf("Теперь оценка на 1 больше.\n");

}

}
^

Что такое истина


Мы ответим на этот вопрос, как он решается в языке Си. В Си выражение всегда имеет значение. Это утверждение остается верным даже для условных выражений, как показывает пример , приведенный ниже. В нем определяюется значения двух условных выражений, одно из которых оказывается истинным, а второе - ложным:

/* истина и ложь*/

main( )

{

int true, false;

true = (12 > 2); /*отношение истино*/

false = (12 == 2) ; /*отношение ложно*/

printf("true = %d; false = %d\n",true,false);

}

При выполнении программы получим следующие результаты:

true = 1, false = 0.

В языке Си значение истина равно 1, а значение ложь равно 0. В языке Си все ненулевые значения являются истинными, и только 0 являются ложью. Например, два оператора

if(i !=0 )

можно заменить на

if(i)

поскольку выражение (i !=0) и выражение (i) оба примут значения 0, или ложь, только в том случае, если значение переменной i равно 0.
^

Осложнение с понятием истина


Рассмотрим следующую программу:

/* занятость */

main( )

{

int age =20;

while (age++ <= 63) {

/* делится ли возраст на 20*/

if((age % 20) == 0)

printf(" Вам %d.!\n", age);

if(age = 63)

printf("Вам уже %d.\n",age);

}

}

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

Вам 40.

Вам 60.

Вам уже 63.

На самом деле выход будет таким:

Вам уже 63.

Вам уже 63.

Вам уже 63.

и т. д. - до бесконечности. Это произошло, потому что мы ошибочно написали

if(age = 63)

вместо

if(age == 63)

В операторе

if(age = 63)

переменной age присваивается значение 63, т. е. результат этого оператора - истина и выполняется оператор

printf("Вам %d.\n",age);

В операторе

while(age++ <= 63)

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

Приоритеты операций отношения мы описали в лекции 3.
^

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


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

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

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. Однако условные выражения более компактны, и их применение обычно приводит к получению более компактного машинного кода.