Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / Лекції / ООП (2.Початкові відомості мови С).doc
Скачиваний:
26
Добавлен:
30.05.2020
Размер:
351.74 Кб
Скачать

(Ім'я_типу) операнд

Операндом можуть бути константа, змінна, вираження. В результаті значення операнда перетвориться до вказаного типу. Приклади використання перетворення типу :

(long) 8, (float) 1, (int) x%2

З приводу останнього вираження помітимо, що пріоритет операції «тип» вищий за ділення (і інших бінарних арифметичних операцій), тому спочатку значення змінної х наведеться до цілого типу (відкинеться дробова частина), а потім виконається ділення по модулю.

Наступний фрагмент програми ілюструє одну з практичних ситуацій, в якій потрібно було використовувати перетворення типу :

float с;

int a=l, b=2;

с=(float) а/b;

В результаті змінна з отримає значення 0,5. Без перетворення типу її значення дорівнювало б 0.

Операція sizeof. Ця операція має дві форми запису :

Sizeof(тип) і sizeof (вираження)

Результатом операції є ціле число, рівне кількості байтів, яка займає в пам'яті величина явно вказаного типу або величина, отримана в результаті обчислення вираження. Остання визначається також за типом результату вираження. Хоча за формою запису це схоже на функцію, проте sizeof є саме операцією. Її пріоритет вищий, ніж у бінарних арифметичних операцій, логічних операцій і стосунків. Приклади використання операції :

Операція «кома». Ця незвичайна операція використовується для зв'язування декількох виразів в одно. Декілька виразів, розділених комами, обчислюються послідовно зліва направо. Як результат такого поєднаного вираження приймається значення найправішого вираження. Наприклад, якщо змінна X має тип int, то значення вираження (X=3, 5*Х) дорівнюватиме 15, а змінна X набуде значення 3.

Операція «умова ?:». Це єдина операція, яка має три операнди. Формат операції :

Вираз1 ? вираз 2: вираз 3

Ця операція реалізує алгоритмічну структуру галуження. Алгоритм її виконання наступний: першим обчислюється значення вираження 1, яке зазвичай є деякою умовою. Якщо воно істинне, т. е. не рівне 0, то обчислюється вираження 2 і отриманий результат стає результатом операції. Інакше в якості результату береться значення вираза 3.

Приклад 1. Обчислення абсолютної величини змінною Х можна організувати за допомогою однієї операції:

Х<0 ? - X: X;

Приклад 2. Вибір більшого значення з двох змінних а і b:

mах=(а<=b)?b :а;

Приклад 3. Замінити більше значення з двох змінних а і b на одиницю:

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

Правила мови в даному випадку дозволяють ставити умовну операцію зліва від знаку привласнення.

Операції ( ) і [ ]. У мові Сі круглі і квадратні дужки розглядаються як операції, причому ці операції мають найвищий пріоритет. Їх сенс буде розкритий пізніше.

Підведемо підсумок усій розмові про операції Сі/Сі++, звівши їх в загальну таблицю. 2 і розташувавши по рангах. Ранг операції — це порядковий номер у ряді пріоритетів. Чим більше ранг, тим нижче пріоритет. У таблиці відбита ще одно властивість операцій — асоціативність. Якщо одна і та ж операція, що повторюється у вираженні кілька разів, виконується в порядку розташування зліва направо, то вона називається левоассоциативной; якщо виконується справа наліво, то операція правоассоциативная. У таблиці ці властивості відображені стрілками вліво і управо. Деякі операції, присутні в таблиці, поки не обговорювалися.

Таблиця 2

Пріоритети (ранги) операцій

Приведення типів при обчисленні виразів. Практично в усіх мовах програмування високого рівня працює ряд загальних правил запису виразів :

• усі символи, що становлять вираження, записуються в рядок (немає надрядкових і підрядкових символів);

• у вираженні проставляються усі знаки операцій;

• при записі вираження враховуються пріоритети операцій;

• для впливу на послідовність операцій використовуються круглі дужки.

Деякі специфічні особливості запису виразів на Сі були описані вище при розгляді операцій мови.

В процесі обчислення виразів з різнотипними операндами проводиться автоматичне перетворення типів величин. Знання програмістом правил, по яких відбуваються ці перетворення, попереджає деякі помилки в записі виразів. Суть правил перетворення при виконанні бінарних операцій зводиться до наступного:

• перетворення не виконується, якщо обидва операнди мають однаковий тип;

• при різних типах операндів відбувається приведення величини з молодшим типом до старшого типу (окрім операції привласнення);

• при виконанні операції привласнення величина, отримана в правій частині, перетвориться до типу змінної, що стоїть зліва від знаку =.

Старшинство типів один по відношенню до одного визначається за наступним принципом; старший тип включає усі значення молодшого типу як підмножину. Речові (плаваючі) типи є старшими по відношенню до цілих. У свою чергу, усередині кожної з цих груп ієрархія типів встановлюється відповідно до вказаного принципу. Цілі типи за збільшенням старшинства розташовані в такому порядку:

char→shot→int→long

Порядок старшинства речових типів наступний:

float→double→long double

Слід мати на увазі, що при перетворенні цілої величини до плаваючого типу може статися втрата точності (замість 1 вийде 0,999).

Наступний приклад ілюструє порядок виконання операцій і перетворення типів, що відбуваються, при обчисленні вираження (рис. 1, цифри вгорі — порядок операцій).

char ch; int i; float f;

double d; long double r;

(рис. 1)

Вправи

1. Визначити тип константи :

а) 315; б) - 32.4; в) 102408; г) 3.7Е57; д) 0315;

е) 0х24; ж) 2.6L; з) 70700U; и) ' 5'; к) '\121'.

2. У програмі оголошена змінна: int n=10. Визначити результати обчислень наступних виразів :

а) n++; б)++n; в) n%2; г) n/3; д) n/3.;

е) ++n+5; ж) 5+n++; з) (float) n/4;

и) sizeof(n); к) sizeof(l.*n).

3. Координати точки на площині задані змінними Х і Y. Записати наступні умови у формі логічних виразів:

а) точка лежить в першій чверті координатної площини;

б) точка лежить на осі X;

в) точка лежить на одній з осей;

г) точка лежить в першій або другій чверті усередині одиничного кола;

д) точка лежить на одиничному колі в третій або четвертій чверті;

е) точка лежить усередині кільця з внутрішнім радіусом 1 і зовнішнім радіусом 2 в другій або четвертій чверті.

4. У програмі оголошена змінна: float х=2. Яке значення отримає змінна х в результаті обчислення наступних виразів?

а) х+=2; б) х/=10; в) х*=(х+1); г) х+=х+=х+=1.

5. Визначити значення виразів для трьох варіантів оголошення змінної х : 1) float x=l.; 2) float x=10.; 3) int x=l.

a) x>i?2*x: x; б) x/5==2?5: x/10; в) х>0&&х<=1?1:0.

17