Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Операции отношения и логические операции




Больше или равно   >=  
Больше   >  
Меньше или равно   <=  
Меньше   <  
Равно   ==  
Неравно   !=  
Логическое «и»   &&  
Логическое «или»   ||  
Отрицание «не»   !  

 

Логическое значение «ложь» представляется целым нулевым значением, а значение «истина» представляется любым ненулевым значением

Выражения, связанные логическими операциями && и ||, вычисляются слева направо, причем вычисление значения выражения прекращается сразу же, как только становится ясно, будет ли результат истинен или ложен.

Старшинство операции && выше, чем у операции ||.

Программа 86

#include<stdio.h>

main()

(

int x, у, z;

x=l; y=l; z=0; x=x&&y||z; printf("%d\n",x);

x=x||!y&&z; printf("%d\n",x);

x=y=l; z=x++-l; printf("%d\n",x);printf("%d\n",z);

z+=-x++ + ++y; printf("%d\n",x); printf("%d\n",z);

z=x/++x; printf("%d\n",x); printf("%d\n",z);

}

Результат выполнения программы: 1 1 2 0 3 0 4 1

Битовые операции

 

Битовое «и» Битовое «или» Битовое исключающее «или» Сдвиг влево Сдвиг вправо Инверсия битов (унарная операция) & | ~ « » \ ~  

 

Программа 87

#include<stdio.h>

main()

(

int у, х, z, k;

x=03; y=02; z=01; k=x|y&z; printf("%d\n",k);

k=x|y&~z; printf("%d\n",k);

k=x^y&~z; printf("%d\n",k);

k=x&y&&z; printf("%d\n",k);

x=l; y=-l;

k=!x|x; printf("%d\n",k);

k=-x|x; printf("%d\n",k);

k=x^x; printf("%d\n",k);

x<<=3; printf("%d\n",x);

y<<=3; printf("%d\n",y);

y>>=3; printf("%d\n",y);

}

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

3 3 1 1 1 -1 0 8 -8 8 1 9 1

Выражения. Конструкции, включающие константы (литералы), переменные, знаки операции, скобки для управления порядком выполнения операций, обращения к функциям, называют выражениями.

Если в выражениях встречаются операнды различных типов,то они преобразуются к общему типу в соответствии с определенными правилами:

• переменные типа char интерпретируются как целые без знака (unsigned);

• переменные типа short автоматически преобразуются в int; если одиниз операндов имеет тип unsigned, то другой (другие) также преобразуется к типу unsigned и результат имеет тип unsigned;

• если один из операндов имеет тип int, то другой (другие) также преобразуется ктипу int и результат имеет тип int;

• если один из операндов имеет тип char, то другой (другие) также преобразуется к типу char и результат имеет тип char;

• во время операции присваивания значение правой части преобразуется к типу левой части, который и становится типом результата;

• в процессе преобразования int в char лишние старшие 8 бит просто отбрасываются. Кроме того, существует возможность точно указывать требуемый тип данных, к которому необходимо привести некоторую величину (в скобках перед этой величиной). Скобки и имя типа вместе образуют операцию, называемую приведением типов.

Например: z=(int)x+(int)y;

 

ОПЕРАТОРЫ. УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ ЯЗЫКА

Операторы служат основными строительными блоками программы. В языке Си указанием на наличие оператора служит символ «точка с запятой», стоящий в конце него.

Операторы состоят из выражений. Выражение представляет собой объединение операций и операндов. Операндом называется то, над чем выполняется операция.

Оператор присваивания

Общий вид оператора присваивания <Имя> = <Выражение>;

Пример: int x, у, а;

х=5;

у=х*2+7;

а=у/4;

Переменные получают значения: х=5, у=17, а=4.

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

Пример: а=(у=(х=5)*2+7)/4.

В результате переменная х получает значение 5, причем это значение участвует в дальнейших вычислениях. Затем выполняется умножение (5*2), сложение (10+7) и еще одно присваивание (у=17). Переменная у получает значение 17, после чего производится деление (17/4), результат которого присваивается переменной а.

В языке Си для компактной записи операторов присваивания имеются специальные операции

+=_=*= /= %= Так, следующие две записи на языке Си эквивалентны: i = i+2 и i+=2.

Пример:

int x,y;

х=у=5;

х+=2; /* х увеличить на 2, результат х=7 */ у- =3; /* у уменьшить на 3. результат у=2 "7 х*=у; /* х умножить на у, результат х=14 */.- х/=++у; /* разделить х на увеличенный у; результат у=3,х= 12/3 */

Операция присваивания сама по себе имеет значение (равное значению выражения, стоящего справа от знака "=") и может входить в выражения.

Оператор if/else

Общий вид оператора:

If(<выражение>) <оператор1>

else <оператор2>;

Здесь часть "else <оператор2>" является необязательной, можно применять и одиночный оператор

If(<выражение>) <оператор1>;

Вначале вычисляется значение выражения. Оператор выполняется, если значение выражения истинно. Если выражение ложно (его значение равно нулю), и если есть часть с else, то выполняется оператор2.

Программа 88 (нахождение наибольшего из двух целых чисел а и b)

#include <stdio.h>

main()

{

int a,b;

printf("Введите первое число - "); scanf("%d", &a);

printf("Введите второе число - "); scanf("%d", &b);

if (a==b)

printf("Заданные числа равны.\n");

else

if (a>b)

printf("Первое число больше второго.");

else printf("Второе число больше первого.");

}

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

В качестве оператора! может стоять любой оператор, в частности, снова оператор if/else. При этом может возникнуть неоднозначность, если во вложенной последовательности операторов if/else часть else опускается. Else всегда соответствует ближайшему предыдущему if, не содержащему else.

Например, в конструкции

if(n>0)

if(a>b) z=a;

else z=b;

else относится к внутреннему if. Если требуется отнести else к внешнему if, то необходимо использовать фигурныескобки:

if(n>0)

{

if(a>b) z=a;

} else z=b;

Часто приходится осуществлять выбор более чем из двух вариантов. Чтобы учесть это, конструкция if/else расширяется конструкцией else/if. Распространенный способ выбора по значению из нескольких вариантов:

 

If (<выражение1>) <оператор1>

else if <выражение2>) <оператор2>

else if (<выражение3>) <оператор3>

else <oпepaтop>;

 

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

В языке Си имеется компактный способ записи одного из видов оператора if/else. Он называется «условным выражением» или «тернарной операцией». Такое выражение выглядит в общем виде так:

 

В1?В2:ВЗ

 

Сначала вычисляется значение выражения В1. Если оно отлично от нуля (истинно), то вычисляется значение выражения В2, которое и становится значением условного выражения. В противном случае вычисляется значение выражения ВЗ, и оно становится значением условного выражения.

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

 

max = (a>b)?a:b;

и нахождение абсолютногозначения числа:

х = (у<0)?-у: у;

 





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 390 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Надо любить жизнь больше, чем смысл жизни. © Федор Достоевский
==> читать все изречения...

2376 - | 2051 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.