Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab5.doc
Скачиваний:
3
Добавлен:
13.09.2019
Размер:
528.38 Кб
Скачать

Операції () і []

У мові С круглі і квадратні дужки також розглядаються як операції. Причому ці операції мають найвищий пріоритет.

Порозрядні операції породжують ще декілька складних операцій присвоювання:

|=, &=, ^=, <<=, >>=.

Операція умова ? :

Операція умова - єдина операція мови С, що має три операнда. Ця операція має вид:

(вир1)? (вир2):(вир3)

Обчислюється вираз (вир1). Якщо цей вираз має ненульове значення, то обчислюється вираз (вир2). Результатом операції буде значення виразу (вир2).

Якщо значення виразу (вир1) дорівнює нулю, то обчислюється вираз (вир3) і його значення буде результатом операції. У будь-якому випадку обчислюється тільки одне з виражень: (вир2) і (вир). Наприклад, операцію умову зручно застосовувати для знаходження найбільшого з двох чисел х и у:

mах = (х>у) ? х : у ;

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

abs = (х>0) ? х : -х ;

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

(х>у)? х :у=1;

Операція кома

Операція кома має самий низький пріоритет із всіх операцій мов С и C++. Операція кома виконується зліва направо, і її значенням є значення правого операнда. У вираженні (вир1), (вир2) спочатку обчислиться значення (вир1), потім - значення (вир2). Це значення і буде результатом операції.

Операція sizeof

Операція sizeof має дві форми: sizeof (тип) або sizeof (вираз).

Результатом цієї операції є цілочисельне значення розміру типу або вираз в байтах. При використанні другої форми значення виразу не обчислюється, а лише визначається його тип. Приклади використання: sizeof (short int) або sizeof (х). У якості типу в oпeрации sizeof не може використовуватися тип void.

Операції . і -> будуть визначені нижче.

Далі ми побачимо, що деякі знаки операцій мають декілька змістових значень. Так, знак операції & має два значення: бінарна операція побітне AND і унарна операція узяття адреси.

Керуючі оператори

Ми вже знаємо найпростішу форму двох таких операторів: if і for. Розглянемо ці й інші оператори докладніше. Керуючі оператори можна розділити на три категорії:

1. Умовні оператори if, if-else і switch.

2. Оператори циклу for, while і do-while.

3. Оператор безумовного переходу goto.

Умовний оператор if

Ми вже знаємо найпростішу форму оператора if. Повна форма оператора наступна:

if (умова) оператор;

else оператор;

Якщо значення умови "істинно", то виконується оператор (їм може бути складовий оператор - блок), що слідує за умовою. Якщо ж умова приймає значення "хибно" то виконується оператор, що слідує за ключовим словом else. У записі оператора if друга частина (тобто Оператор else) може бути відсутнім. Тоді, якщо умова приймає значення "хибно" виконується відразу наступний оператор програми. Насправді в якості умови може стояти довільний вираз. В операторі if лише перевіряється, чи є значення цього виразу ненульовим (вірним) або нульовим (помилковим). За допомогою оператора if можна, наприклад, обчислити значення функції sgn(x) - знак х. Функція sgn(x) приймає значення 1, якщо х > 0, значення -1, якщо х < 0, значення 0, якщо х = 0.

#include <stdio.h>

/* Приклад 6.4 */

main( )

{

int sgn;

float х; рrintf(“Введіть число:”);

scanf(“%f”,%x);

if(x>0) { sgn=l;printf(“число %f позитивне sgn”);}

if(x= =0) { sgn=0;pirintf("число %f дорівнює нулю sgn”);}

if(x<0) {sgn= -l;printf("число %f негативне sgn”);}

Часто зустрічається необхідність використовувати конструкцію if-else-if:

if (умова) оператор;

else if (умова) оператор;

else if (умова) оператор;

……………...

else оператор;

У цій формі умови операторів if перевіряються зверху вниз. Як тільки якась з умов приймає значення "істинно", виконається оператор, що слідує за цією умовою, а вся інша частина конструкції буде проігнорована. Оператори if попереднього приклада можуть бути записані в іншому виді:

#include <stdio.h>

/* Приклад 6.5 */

main( )

{

int sgn;

float х;

printf(" Введіть число:");

scanf(“%f”, &х);

if (х>0) { sgn=1;printf(“Число %f позитивне \n", х); }

else if(x<0) (sgn= -l;printf("числo %f негативне \n", х); }

else (sgn=0;printf(“число %f дорівнює нулю \n", х); }

}

У якості умови оператора if може використовуватися, як ми вже сказали, деякий вираз. Так, для того щоб перевірити, дорівнює число х нулю або не дорівнює, можна написати

if(x=0) printf("Число дорівнює нулю");

else printf("Число не дорівнює нулю");

Той же результат можна одержати наступним оператором:

if(!x) print("Число дорівнює нулю");

else print(“Число не дорівнює нулю");

Вкладеним оператором if називається наступна конструкція:

if(x)

if (у) оператор1;

else оператор2;

У такій формі незрозуміло, до якого з операторів if відноситься else. В мові С оператор else асоціюється з найближчим if у відповідному блоці. В останньому прикладі else відноситься до if(y). Для того щоб віднести else до оператора if(x), потрібно відповідним чином розставити операторні дужки:

if(x)

{

if (у) оператор1;

}

else оператор2;

Тепер if(y) відноситься до іншого блоку.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]