Что такое истина
Мы ответим на этот вопрос, как он решается в языке Си. В Си выражение всегда имеет значение. Это утверждение остается верным даже для условных выражений, как показывает пример, приведенный ниже. В нем определяются значения двух условных выражений, одно из которых оказывается истинным, а второе - ложным:
/* истина и ложь*/
main( )
{
int true, false;
true = (12 > 2); /*отношение истинно*/
false = (12 == 2) ; /*отношение ложно*/
printf("true = %d; false = %d\n",true,false);
}
При выполнении программы получим следующие результаты:
В языке Си значение истина равно 1, а значение ложь равно 0. В языке Си все ненулевые значения являются истинными, и только0 являются ложью. Например, два оператора
можно заменить на
поскольку выражение (i !=0 ) и выражение (i) оба примут значения 0, или ложь, только в том случае, если значение переменной i равно 0.
Осложнение с понятием истина
Рассмотрим следующую программу:
/* занятость */
#include <stdio.h>
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.
и т. д. - до бесконечности. Это произошло, потому что мы ошибочно написали
вместо
В операторе
переменной 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 на единицу. Все выражение будет истинным, если указанные три условия - истинны . В языке Си имеются три логические операции.
|