Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пособие

.pdf
Скачиваний:
66
Добавлен:
22.03.2015
Размер:
1.35 Mб
Скачать

Для введення інформації зі стандартного потоку введення використовується функція scanf().

Синтаксис:

scanf("Рядок_формату",&аргумент1[,&аргрумент2 [, ...]]);

Так як і для функції printf(), для функції scanf() вказується рядок формату і список аргументів. Суттєва відмінність у синтаксисі цих двох функцій полягає в особливостях даного списку аргументів. Функція printf() використовує імена змінних, констант та вирази, в той час, як для функції scanf() вказуються тільки покажчики на змінні.

Функція scanf() використовує практично той же набір символів специфікації, що і функція printf().

#include <stdio.h> #include <conio.h> int main()

{

int a,b,c; printf("A="); scanf("%d",&a); printf("B="); scanf("%d",&b); c=a+b; printf("A+B=%d",c); _getch();

return 0;

}

21

4 ОСНОВНІ ОПЕРАЦІЇ

Операції подібні вбудованим функціям мови програмування. Вони застосовуються до виразів (операндів). Більшість операцій мають два операнди, один з яких розташовується перед знаком операції, а інший – після. Наприклад, два операнди має операція додавання А+В. Операції, що мають два операнди, називаються бінарними. Існують і унарні операції, тобто такі, що мають лише один операнд. Наприклад, запис –А означає застосування до операнду А операції унарного мінуса. А три операнди має лише одна операція – ?:. Це єдина тернарна операція мови С [22].

У складних виразах послідовність виконання операцій визначається дужками, старшинством операцій, а при однаковому старшинстві – асоціативністю.

За призначенням операції можна поділити на :

арифметичні операції;

операції присвоювання;

операції відношення;

логічні операції;

порозрядні операції;

операція обчислення розміру sizeof();

умовна операція ?;

операція слідування (кома).

4.1Арифметичні операції

До арифметичних операцій належать відомі всім бінарні операції додавання, віднімання, множення, ділення та знаходження залишку від ділення (табл. 4.1).

Бінарні арифметичні операції

Таблиця 4.1

Приклад

Операція

Значення

+

Додавання

a+b

Віднімання

a–b

*

Множення

a*b

/

Ділення

a/b

%

Залишок від ділення

a% b

Для наведених арифметичних операцій діють наступні правила:

– бінарні операції додавання (+) та віднімання (–) можуть застосовуватися до цілих та дійних чисел, а також до покажчиків;

22

в операціях множення (*) та ділення (/) операнди можуть бути будь-яких арифметичних типів;

операція «залишок від ділення» застосовується лише до цілих операндів;

операції виконуються зліва направо, тобто спочатку обчислюється вираз лівого операнда, потім вираз, що стоїть справа від знака операції. Якщо операнди мають однаковий тип, то результат арифметичної операції має той же тип. Тому, коли операції ділення застосовується до цілих або символьних змінних, залишок відкидається. Так, вираз 11/3 буде рівний 3, а вираз 1/2 буде рівним нулю.

Умові С визначені також і унарні арифметичні операції

(табл. 4.2.).

 

Унарні арифметичні операції

Таблиця 4.2.

 

Приклад

Операція

Значення

+

Унарний плюс (підтвердження знака)

+5

Унарний мінус (зміна знака)

–x

++

Операція інкременту (збільшення на 1)

i++, ++i

--

Операція декременту (зменшення на 1)

j--, --j

Операція інкременту (++) збільшує операнд на одиницю, а операція декременту (--) відповідно зменшує операнд на одиницю. Ці операції виконуються швидше, ніж звичайні операції додавання одиниці (a=a+1;) чи віднімання одиниці (a=a–1;).

Існує дві форми запису операцій інкременту та декременту: префіксна та постфіксна.

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

Наведемо приклад, що демонструє роботу операції інкременту:

#include<stdio.h> #include <conio.h> int main()

{

23

int x=3,y=3;

printf("Значення префіксного виразу: %d\n ",++x);

printf("Значення постфіксного виразу: %d\n ",y++);

printf("Значення х після інкременту: %d\n ",x);

printf("Значення y після декременту: %d\n ",y);

_getch(); return 0;

}

Результат виконання програми буде виглядати так :

Значення префіксного виразу: 4 Значення постфіксного виразу: 3 Значення х після інкременту: 4 Значення y після декременту: 4

4.2Операції присвоювання

Умові С знак = не означає «дорівнює». Він означає операцію присвоювання деякого значення змінній. Тобто зміст рядка вигляду

«vr1=1024;» не виражається словами «vr1 дорівнює 1024». Замість цього потрібно казати так: «присвоїти змінній vr1 значення 1024».

Без операції присвоювання неможливо уявити собі жодну програму. Найпростіша форма операції присвоювання виглядає так.

<lvalue> = <rvalue>;

У лівій частині, як правило, стоїть змінна, а у правій – вираз. У принципі будь-яке присвоювання являє собою копіювання значення змінної rvalue у змінну lvalue. У найпростішому випадку саме так все і відбувається. Однак якщо вираз, що стоїть в правій частині, описує деяке обчислення, то його результат записується в тимчасову змінну, значення якої і копіюється в комірку rvalue. Отже, операція присвоювання повинна виконуватися останньою – після обчислення правої частини. Саме тому цей оператор має найменший пріоритет. Крім того, якщо типи змінних lvalue і rvalue є різними, вступають у дію правила приведення типів.

Значенням операції присвоювання є значення змінної rvalue (чи відповідного виразу). Ця особливість дозволяє застосовувати множинне присвоювання.

24

var1 = var2 = var3 = 100;

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

var1 = var1 + delta;

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

1.Обчислити адреса змінної var1.

2.Отримати значення цієї змінної.

3.Обчислити значення вираз var1 + delta.

4.Помістити це значення в тимчасову змінну.

5.Обчислити адресу змінної var1.

6.Скопіювати значення тимчасової змінної в змінну var1.

Як бачимо, пп. 1 і 5 збігаються. Для того, щоб уникнути цього, у мові С передбачена скорочена форма операції присвоювання. Особливо важливою властивістю цієї форми є те, що вона дозволяє сполучити операцію присвоювання з будь-якою арифметичною та побітовою операцією. Перелік операцій присвоювання мови С ілюструє таблиця 4.3.

 

Таблиця 4.3.

 

Операції присвоювання

Операція

Значення

a = b

присвоювання значення b змінній а

a += b

додавання з присвоюванням. Означає a = a + b

a –= b

віднімання з присвоюванням. Означає a = a – b

a *= b

множення з присвоюванням. Означає a = a * b

a /= b

ділення з присвоюванням. Означає a = a / b

a %= b

залишок від ділення з присвоюванням. Означає a = a % b

a <<= b

зсув вліво з присвоюванням. Означає a = a << b

a >>= b

зсув вправо з присвоюванням. Означає a = a >> b

a &= b

порозрядне І з присвоюванням. Означає a = a & b

a |= b

порозрядне АБО з присвоюванням. Означає a = a | b

a ^= b

побітове додавання за МОД2 з присвоюванням, означає

 

a = a ^ b

 

25

Операція присвоювання повертає як результат присвоєне значення. Завдяки цьому в мові С допускаються присвоювання виду:

a=(b=c=1)+1;

Розглянемо приклад, що демонструє використання таких присвоювань [2].

#include<stdio.h> #include <conio.h> int main()

{

int data1, data2, data3; data1=data2=data3=68; printf("\ndata1==%d\ndata2==%d\n data3==%d",data1, data2,data3); _getch();

return 0;

}

Результат роботи програми виглядає так:

data1==68

data2==68

data3==68

Присвоювання відбувається справа наліво: спочатку змінна data3 отримує значення 68, потім змінна datа2 і нарешті data1.

4.3 Операції порівняння

Операції порівняння наведено в таблиці 4.4.

Таблиця 4.4.

 

Операції порівняння

Операція

 

Значення

<

 

менше

<=

 

менше або рівно

==

 

перевірка на рівність

>=

 

більше або рівно

>

 

більше

!=

 

перевірка на нерівність

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

26

b<0, 'b'=='B','f'!='F', 201>=205,

Кожна умова перевіряється: істинна вона чи хибна. Точніше слід сказати, що кожна умова приймає значення «істина» (true) або «хиба» (false). В мові С немає логічного (булевого) типу. Тому результатом умовного виразу є цілочисельне арифметичне значення. «Істина» – це ненульова величина, а «хиба» – це нуль. У більшості випадків у якості ненульового значення «істина» використовується одиниця.

#include <stdio.h> #include <conio.h> int main()

{

int tr, fal;

tr=(111<=115); /* вираз істинний */ fal=(111>115); /* вираз хибний */ printf("true – %d false – %d \n",tr,fal); _getch();

return 0;

}

У мові С існує єдина тернарна операція – ?: умовна операція. Синтаксис її наступний:

умова ? вираз_1: вираз_2.

Принцип її роботи такий. Спочатку обчислюється вираз умови. Якщо цей вираз має ненульове значення, то обчислюється вираз_1. Результатом операції ?: в даному випадку буде значення виразу_1. Якщо вираз умови рівний нулю, то обчислюється вираз_2 і його значення буде результатом операції. В будь-якому випадку обчислюється тільки один із виразів (вираз_1 або вираз_2).

Наприклад, дану операцію зручно використати для знаходження найбільшого з двох чисел x і y: max=(x>y)?x:y;

#include<stdio.h> #include <conio.h> int main()

{

int points;

printf("Введiть оцiнку [2..5]:");

27

scanf("%d",&points); printf("%s",points>3?"Ви добре знаєте матерiал!":"Погано...");

_getch(); return 0;

}

4.4Логічні операції

Логічні операції &&, ||, ! використовуються здебільшого для «об’єднання» виразів порівняння у відповідності з правилами логічного І, логічного АБО та логічного заперечення (таблиця 4.5.).

Таблиця 4.5.

Логічні операції

Операція Значення

&&логічне І (and)

||логічне АБО (or)

!логічне заперечення (not)

Складні логічні вирази обчислюються «раціональним способом». Наприклад, якщо у виразі (A<=B)&&(B<=C) виявилось, що А більше В, то всі вирази, як і його перша частина (А<=B), приймають значення «хиба», тому друга частина (В<=C) не обчислюється.

4.5 Порозрядні операції (побітові операції)

Порозрядні операції застосовуються тільки до цілочисельних операндів і «працюють» з їх двійковими представленнями. Ці операції неможливо використовувати із змінними типу double, float, long double.

 

Таблиця 4.6.

Порозрядні операції

Операція

Значення

~

порозрядне заперечення

&

побітова кон’юнкція (побітове І)

|

побітова диз’юнкція (побітове АБО)

^

побітове додавання за МОД2

<<

зсув вліво

>>

зсув вправо

28

 

5 ІНДИВІДУАЛЬНА РОБОТА ДО П.1-4.

Завдання

1.1. Дано два ненульових числа. Знайти їх суму, різницю, добуток та частку.

2. Обчислити значення у, де y = (x +1)2 + 3(x2 +1) . Значення

змінної х уведіть із клавіатури.

3. Перевірити істинність вислову: «Дані числа x, y є координатами точки, що знаходиться у першій або третій координатній чверті».

2.1. Дано два числа. Знайти середнє арифметичне їх квадратів та середнє арифметичне їх модулів.

2. Обчислити значення у, де y =

(x +1)2

+

2(x +1)

. Значення змін-

 

4

 

 

 

 

 

ної х уведіть із клавіатури.

3. Перевірити істинність вислову: «Точка з координатами (x, y) лежить всередині прямокутника, ліва верхня вершина якого має координати (x1, y1), права нижня - (x2, y2), а сторони паралельні координатним вісям».

3.1. Швидкість човна в стоячій воді V км/год., швидкість течії річки

U км/год. (U < V). Час руху човна по озеру T1 год., а по річці (проти течії ) T2 год. Визначити шлях S, що пройде човен.

2. Обчислити значення у, де y = 3 sin(x) +3cos2 x . Значення змінної х уведіть із клавіатури.

3.Перевірити істинність вислову: «Дане ціле число є парним двозначним числом».

4.1. Швидкість першого автомобіля V1 км/год., другого – V2 км/год., відстань між ними S км. Визначити відстань між ними через Т годин, якщо автомобілі віддаляються один від інших.

2.Обчислити значення у, де y = tg ax2 +b . Значення змінної х

уведіть із клавіатури.

3.Перевірити істинність вислову: «Дане ціле число є непарним тризначним числом».

5.1. Швидкість першого автомобіля V1 км/год., другого – V2 км/год., відстань між ними S км. Визначити відстань між ними через Т годин, якщо автомобілі рухаються назустріч один одному.

2.Обчислити значення у, де y = ln(ax3 +b) . Значення змінної х

введіть із клавіатури.

3. Перевірити істинність вислову: «Серед трьох даних цілих чисел є хоча б одна пара співпадаючих».

29

6.1. Знайти периметр та площу прямокутного трикутника, якщо дано довжини його катетів a та b.

2. Обчислити значення у, де y = x

a

3

x +b

. Значення змінної х

 

b

a

уведіть із клавіатури.

3. Перевірити істинність вислову: «Серед трьох даних цілих чисел

є хоча б одна пара взаємно протилежних».

7.1. Дана довжина ребер куба. Знайти площу грані, площу повної поверхні та об’єм даного кубу.

2. Обчислити значення у, де y =

1

. Значення змінної х

1,1+cos2 ax

уведіть із клавіатури.

3.Перевірити істинність вислову: «Сума цифр даного тризначного числа є парним числом».

8.1. Знайти довжину кола та площу кола, якщо відомо радіус R.

2.Обчислити значення у, де y =tg x . Значення змінної х уведіть

із клавіатури.

3.Перевірити істинність вислову: «Сума двох перших цифр даного чотиризначного числа дорівнює сумі двох його останніх цифр».

9.1. Знайти площу кільця, внутрішній радіус якого дорівнює R1, а зовнішній радіус дорівнює R2 (R1 < R2).

2.Обчислити значення у, де y =1,2 5,7 +ex . Значення змінної х

уведіть із клавіатури.

3.Перевірити істинність вислову: «Дане чотиризначне число читається однаково зліва направо і справа наліво».

10.1. Дано сторону рівнобічного трикутника. Знайти площу даного трикутника та радіуси вписаного та описаного кола.

2.Обчислити значення у, де y = ln2 x 5x,7 . Значення змінної х

уведіть із клавіатури.

3. Перевірити істинність вислову: «Всі цифри даного тризначного числа різні».

11.1. Дано довжину кола. Знайти площу кругу, що обмежена даним колом.

2. Обчислити значення у, де y = 1 . Значення змінної х уведіть

1,2x

із клавіатури.

30