Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Операции отношения и логические операции
Логическое значение «ложь» представляется целым нулевым значением, а значение «истина» представляется любым ненулевым значением Выражения, связанные логическими операциями && и ||, вычисляются слева направо, причем вычисление значения выражения прекращается сразу же, как только становится ясно, будет ли результат истинен или ложен. Старшинство операции && выше, чем у операции ||. Программа 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)?-у : у;
|
||||||||||||||||||||||
Последнее изменение этой страницы: 2018-05-10; просмотров: 207. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |