Лекции Си_ppt_Типы Операции Операторы_2012
.pdfТаблицаприоритета Оп
Операция Ассоциативность
( ) [ ] |
с Указателями |
|
|
++ |
-- ун+ ун- ! * & sizeof ~ (тип) |
|
|
* |
/ |
% |
|
+ |
- |
|
|
<< |
>> сдвиг влево, вправо |
|
|
< |
<= |
> >= |
|
== |
!= |
|
|
& |
логич-е AND, поразрядные: |
|
^XOR
| OR, отрицание (инверсия)
22
13.10.2011
&& |
AND Логические |
|
|| |
Or (и отрицание ‘!’ ) |
|
?: |
Оп условие |
|
= += -= *= /= %= != ^= <<= >>= |
|
|
, |
|
|
X += 1; // или X = X + 1; но так медленнее ! sizeof(тип | выражение) – размер в байтах
Пример, число элементов в массиве:
N = sizeof( arr ) / sizeof( arr[0] );
Приоритет Операций:
•Вызов функции и скобки,
•Арифметические Операции,
•Операции отношения (сравнения),
•Логические Операции
*** Информатика_Л5 ***
Логич-е Операции
иОператоры управления
•Операции отношения и логические Оп;
•Поразрядные Оп;
•Управляющие Операторы:
Опер-ы составной ( { } ) и пустой (;),
Опер перехода ( goto ),
Условные Опер-ы ( if else, switch),
иусловная Оп ?:,
Опeр-ы Циклов ( for, while, do while )
Оп отношениявалгебре логики
В Си нет логического типа (boolean в Pascal),
рез-т лог-го выражения – целочисл-е значение: False – 0, True – ненулевая величина ( 1 ).
Примеры: |
|
|
int tr, |
fal; |
|
tr = 3 <= 5; |
// tr 1 |
|
fal = 3 |
> 5; |
// fal 0 |
tr = 12; |
// в условных Опер-х – это True |
В С++ тип bool, пример:
bool b = -12, // b <- 1, Истина bb = 0; // bb <- 0, Ложь
Логические Операции (ЛогОп)
Примеры использования ЛогОп:
Условие попаданияточки х:
в интервал [a, b]
x >= a и x <= b |
a |
b |
и(And) – логическое умножение
в интервалы [a, b], [c, d]
(x >= a и x <= b) или (x >= c и x <= d)
или (Or) - логическое сложение
a b c d
не ( Not ) – отрицание ( инверсия )
Xor – исключающее или –
поразрядная Оп
|
Логические Операции |
1 – True, |
0 - False |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Оп Си логич-е |
&& |
|
|
|| |
нет |
|
|
! |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Поразрядные |
& |
|
|
| |
^ |
|
|
~ |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
X1 |
X2 |
And |
|
|
Or |
Xor |
|
|
Not X1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
|
0 |
|
|
0 |
0 |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
|
0 |
|
|
1 |
1 |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
0 |
|
0 |
|
|
1 |
1 |
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
|
1 |
|
|
1 |
0 |
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Логические Оп - итог
Not – лог-е отрицание;
And – лог-е “и”, пересечение, лог-е умножение;
Or – лог-е “или”, объединение, лог-е сложение;
Xor – двоичное сложение, “исключающее или”;
Приоритет уменьшается…..
Примеры:
int x, y, z, logA;
x = 1 , y = 2 , z = 3 ;
logA = x > y And y < z; // False logA = Not x > y And y < z; // True logA = x > y Or y < z; // True logA = x < y Xor y < z; // False
Поразрядные (побитовые) Оп
Оп |
1 0 1 1 0 1 |
|
для целочисленных |
|
|
||
0 0 1 1 1 1 |
|
~-х и const |
|
|
|
||
|
|
|
|
And 0 0 1 1 0 1 |
|
||
Or |
1 0 1 1 1 1 |
Cравнение каждой |
|
|
|
|
|
Xor |
1 0 0 0 1 0 |
|
пары битов |
1 – для разных битов
О п е р а ц и и с д в и г а
k = 9 >> 2; // 1001 >> 2 потеря 2 битов
// |
0010 |
01 |
k 2 |
k = k << 2; // |
1000 |
|
k 8 |
|
Сдвиг вправо на 1 бит – деление числа на 2
Сдвиг влево на 1 бит – умножение числа на 2
Применение поразрядных Оп
Хранение флагов состояния процесса:
в 1 байте – 8 флагов on/off ( fl = 01011001 )
Установка флага во 2 бите:
fl = fl | 2; // 00000010
Сброс флага в 4 бите:
fl = fl & 0xF7; // 11110111
Проверка флага в 4 бите:
if( fl & 8 ) … ; // 00001000
Поразр-е Оп прим-ся в системных П (в драйверах устройств и др), в П,
связанных с принтером, модемом и др. устройствами К.
Помнить о возможной потере разрядов числа при сдвиге влево (старшие разряды) или вправо (младшие разряды) !!!
УправляющиеОператоры -
для обработки Д по А любой сложности с разветвлениями, Ц-ми, переходами.
1. Составной Оператор
Блок, ограниченный { } : - объявления ~-х, -выполняемые Опер-ы
Распол-ся в любом месте Фун как обычный Опер, в
СостОпер м. быть другие СостОпер
{ … { int K; K++ ; … ; } … } K – не видима !
2. Пустой Оператор – это ‘;’
x = a ; ; y = 3 ;
Используется:
•для установки метки (переход по goto),
•в Опер-е if else, пример:
if(x > 0) a = b ;
else a = 2*b;
•после Опер-а заголовка Ц
while( K-- ) ;
3. Оператор goto
if(x > 0) goto metka ; // metka – идентиф-р
… … |
// не объявляется ! |
metka: y = 3 ;
// Переход только внутри Фун !
Не рекомендуется переход внутрь Опер-в:
• составного { … m1: … … } ; goto m1;
•условного if else,
•Опер-а выбора варианта switch,
•Цикла
Оператор goto нерекомендуется
использовать вП согласно методологии структурного П-я:
ухудшается понимаемостьП !!!
Только в случаенеобходимости !
Использование goto
•Переход по goto только вниз по ходу выполнения П,
•Если нужно вернуться назад,
использовать Цикл
…
goto m;
…
m: x=0;
4. Разветвление вычислений
Условный Опер if else, Опер выбора варианта switch и условная Оп ?:
Условный Опер if else
Сокращенная форма: |
B ≠ 0 |
В – выражение любого типа – условие разв-я
i f ( B ) |
S ; |
|
B = 0 |
|
S – простой |
|
||
|
||
|
|
или СостОпер |
Пример: i f ( a > sqrt(x) +3.5 ) z = a ;
Полная форма Опер-ра if |
else |
|
i f ( B ) S1 ; // B ≠ 0 |
|
|
e l s e S2 ; // B = 0 |
|
|
Пример: i f ( a > 3.5 ) |
z = a ; |
|
e l s e i f |
( b > 3.5 ) |
z = b ; |
e l s e { z = a + b ; y = a * b;
}
else – с ближайшим if, не связанным с else
Оператор выбора варианта switch
switch ( В )
{case m1: S1; [ break; ] // mi - метки
…… …
case mN: SN; [ break; ]
[ default: SS; ] // если В ≠ m1 … mN
//метка – целая или символьная const
//B – выражение, рез-т кот. значение целого типа:
// |
int, |
char, |
long |
Пример: переход по «да» / «нет»
char c;
c = getchar( ); // чтение символа с клавиатуры switch( c )
{case ‘Y’: ;
case ‘y’: fun1( ); break; case ‘N’: ;
case ‘n’: fun2( ); break; default: printf(“\n Введите Y,y или N,n !” );
}
Операция условие ? :
(выраж_1) ? (выраж_2) : (выраж_3)
0 = 0
Примеры: max = (x > y) ? x : y ;
(x > y) ? z = x - y : z = x * y ;
Задание: запишите выражения для вычисления а) | x | ,
b) для х > y вычислить sin( x ), в противном случае cos( y ) и результат запомнить в х
Операторы Циклов ( Ц )
Цикл for – Опер Ц с параметром
= 0
for ( сп1 ; сп2 ; сп3 )
0
{ … … ; continue;
… … ; break;
… … ;
}
В Цикле for :
сп1 – инициализация нач. знач, вып-ся 1 раз,
сп2 – список выражений для проверки конца Ц,
сп3 – список Опер и/или выражений для корректировки
параметров Ц.
Примеры: for( s=0, i=1; i <= N; i++ ) s=s + i;
или s=0; |
for( i=1; i <= N; s=s + i, i++ ); |
или |
. . . . . . |
В Цикле for : |
|
– параметр Ц - ~-я любого числового типа; for( x = 0.1; x <= 10.5; x = x + 0.3 ) … ;
for( c = ‘a’; c <= ‘z’; c++ ) … ;
–параметры в сп2 и сп3 можно изменять в теле Ц;
–значения пар-ов Ц сохраняются при выходе из Ц. for ( ; ; ) ; // Это бесконечный Ц