Повторити правила техніки безпеки при роботі за ПК
Концепція типу даних з'явилася в мовах програмування високого рівня як природне віддзеркалення того факту, що дані, що обробляються програмою, можуть мати різні діапазони допустимих значень, зберігатися в пам'яті комп'ютера різним чином, займати різні обсяги пам'яті та оброблятися за допомогою різних команд процесора.
В C існує всього лише кілька базових типів:
char - одиничний байт, який може містити один символ з допустимого символьного набору;
int - ціле, зазвичай відображає цілочисельний регістр процесора;
float - число з плаваючою точкою одинарної точності;
double - число з плаваючою точкою подвійної точності.
Є також кілька кваліфікаторів, які можна використовувати разом із зазначеними базовими типами. Наприклад, кваліфікатори signed (зі знаком) або unsigned (без знаку) можна застосовувати до будь-якого цілочисельного типу. За замовчуванням змінні цілих типів мають знак, тому кваліфікатор signed є необов’язковим. Значення unsigned завжди невід’ємне.
Якщо кваліфікатори short (короткий) і long (довгий) застосовуються до цілих, то можна не вказувати тип int:
short a; | /*замість short int a;*/ |
long b; | /*замість long int b; */ |
unsigned short c; | /*замість unsigned short int c; */ |
unsigned long d; | /*замість unsigned long int d; */ |
Нижче наведена таблиця з діапазонами значень базових типів з можливими кваліфікаторами:
Назва типу |
Опис типу |
Діапазон значень |
|
Ціле |
char |
Ціле число |
-128 ... 127 |
unsigned char |
Ціле число без знака |
0 ... 255 |
|
short int |
Ціле число |
-32768 ... 32767 |
|
unsigned short int |
Ціле число без знака |
0 ... 65535 |
|
int |
Ціле число |
-231 ... 231-1 |
|
unsigned int |
Ціле число без знака |
0 ... 232-1 |
|
long int |
Ціле число |
-231 ... 231-1 |
|
unsigned long int |
Ціле число без знака |
0 ... 232-1 |
|
Дробові |
float |
Число з плаваючою точкою |
3.4⋅10-38 ... 3.4⋅10+38 |
double |
Число з плаваючою точкою подвійної точності |
1.7⋅10-308 ... 1.7⋅10+380 |
Змінна - це іменована область пам'яті, до якої ми маємо доступ з програми; туди можна поміщати значення і потім отримувати їх. Кожна змінна мови C має певний тип, який характеризує розмір та розташування цієї області пам'яті, діапазон значень, які вона може зберігати, формат зберігання та набір операцій.
Мова C вимагає, щоб змінна була відома до першого звернення до неї. Це викликано необхідністю гарантувати правильність використання змінної відповідно до її типу.
Ім'я змінної, або ідентифікатор, може складатися з латинських букв, цифр і символу підкреслення. Великі і малі літери в іменах розрізняються. Крім того, ідентифікатор повинен починатися з букви або символу підкреслення, але не може починатися з цифри.
Коли в програмі зустрічається деяке число, наприклад 1, то це число називається константою. Константою тому, що ми не можемо змінити його значення. Кожна константа має певний тип, який визначається її значенням. Цілочисельні константи за умовчанням мають тип int, а константи з плаваючою комою - тип double. Так, 0 має тип int, 3.14159 - тип double.
Константи цілих типів можна записати в десятковій, вісімковій та шістнадцятковій формі. Якщо константа починається з 0 (нуля), вона трактується як вісімкове число, якщо з 0х або 0Х, то як шістнадцяткове. Звичний запис розглядається як десяткове число. Ось як виглядає число 25, записане десятковою, вісімковою та шістнадцятковою константою:
25 | десяткова форма |
031 | вісімкова форма |
0х19 | шістнадцяткова форма |
За замовчуванням всі цілі константи мають тип int. Можна явно призначити цілій константі тип long, приписавши в кінці числа букву L (допускається як велика L, так і мала l, однак для зручності читання не слід вживати малу: її легко переплутати з одиницею). Буква U (або u) наприкінці визначає константу як unsigned int, а дві букви - UL або LU - як тип unsigned long.
Константи, що є дійсними числами, можуть бути записані як з десятковою крапкою, так і в науковій (експоненціальній) формі запису. За умовчанням вони мають тип double. Для явної вказівки типу float потрібно використовувати суфікс F або f, а для long double - L або l, але тільки у разі запису з десятковою крапкою.
Якщо операнди оператора належать до різних типів, то при виконанні арифметичних операцій вони приводяться до деякого загального типу. Приведення виконується відповідно з невеликим числом правил. Зазвичай автоматично виконуються лише ті перетворення, які без будь-якої втрати інформації перетворюють операнди з меншим діапазоном значень в операнди з більшим діапазоном, як, наприклад, перетворення цілого в дробове у виразах на зразок float + int. Вирази, які не мають сенсу, наприклад число з плаваючою крапкою в ролі індексу, не допускаються. Вирази, в яких могла б втрачатися інформація (скажімо, при присвоєнні довгих цілих змінним коротших типів або при присвоєнні значень з плаваючою комою цілим змінним), можуть спричинити за собою попередження (warning), але вони допустимі.
Існує одна тонкість, що стосується перетворення символів в цілі числа: мова не визначає, чи є змінні типу char знаковими або беззнаковими. На деяких машинах значення типу char з одиничним старшим бітом буде перетворено на негативне ціле (за допомогою "поширення знака"). На інших - перетворення char в int здійснюється додаванням нулів зліва таким чином, що завжди отримується позитивне значення.
Неявні арифметичні перетворення, як правило, здійснюються природним чином. У загальному випадку, коли такі оператори як + або * з двома операндами (бінарний оператор) мають різнотипні операнди, перш ніж операція почне виконуватися, "нижчий" тип підвищується до "вищого". Результат буде мати вищий тип.
При перетворенні з типу з плаваючою точкою в цілочисельний дробова частина значення відкидається; якщо отримане при цьому значення не можна представити в заданому цілочисельному типі, то результат не визначений. Зокрема, не визначено результат перетворення негативних значень з плаваючою крапкою в беззнакові цілі.
Якщо значення перетворюється з цілого у величину з плаваючою комою і воно знаходиться в допустимому діапазоні, але видається в новому типі неточно, то результатом буде одне з двох значень нового типу, найближчих до вхідного. Якщо результат виходить за межі діапазону допустимих значень, поведінка програми не визначена.
При перетворенні з типу з плаваючою комою меншої точності в тип з плаваючою комою більшої точності значення не змінюється. Якщо навпаки, перехід здійснюється від більшої точності до меншої і значення залишається в допустимих межах нового типу, то результатом буде одне з двох найближчих значень нового типу. Якщо результат виходить за межі діапазону допустимих значень, поведінка програми не визначена.
Явне перетворення типів може бути здійснене за допомогою операції приведення типів, яка має формат:
( ім'я-типу )операнд
Наприклад:
int a = 5;
float b;
b = (float) a; /* перетворення a цілого типу у дійсне значення */
Розробити програму з власнисми функціями:
1. для обчислення виразів c1, c2, c3 та c4 згідно варіанту з додатку 1. Результат обчислення величин вивести на екран (для цього використовувати функцію printf().
2. для виконання обчислень згідно варіанту з додатку 2. Результат обчислення величин вивести на екран (для цього використовувати функцію printf(). Для завдання 3 результат вивести в вісімковому, десятковому та шістнадцятковому форматах.
3. для виконання обчислень в додатках 1 та 2 згідно варіанту використайте операції приведення типів мови С++ де це необхідно для отримання правильної відповіді. Результат обчислення величин вивести на екран.
Потрібно скористатись або вивести математичні формули для розв’язання завдання.
Розробити блок-схему в якій відобразити порядок виконання обчислювальних операцій на основі математичної моделі.
Визначити правила роботи людини з ПК, правила введення даних, форму подання інформації користувачу.
Описуємо лістинг програми
Виправляємо помилки при компіляції.
Перевіряємо роботу програми. Дані потрібно вводити такі, щоб результат роботи програми був відомий вам на перед. Дані можна взяти з математичної моделі.
Номер варіанта |
Завдання 1 |
Завдання 2 |
Завдання 3 |
Завдання 4 |
1 |
int a1 = 5; int b1 = 2; int c1; c1 = a1/b1; |
float a2 = 5; int c2; c2 = a2/2.0; |
unsigned char a3 = 100; unsigned short c3; c3 = a3 + 65540; |
unsigned char a4 = 100; unsigned short c4; c4 = a4 - 170; |
2 |
iint a = 5; |
float a2 = 5;
|
unsigned char a3 = 100;
|
unsigned char a4 = 17;
|
3 |
intint a = 5; |
int a2 = 5;
|
unsigned short a3= 100;
|
unsigned char a4 = 2;
|
4 |
int aint a = 4; |
int a2 = 5;
|
unsigned char a3 = 100;
|
unsigned char a4 = 4;
|
5 |
int a = 4; |
int a2 = 5;
|
unsigned short a3= 270;
|
unsigned char a4 = 4;
|
6 |
float a = 4; float b = 2; |
double a2 = 5; int b2 = 2;
|
unsigned char a3 = 199; unsigned char c3;
|
unsigned short a4=1000; unsigned char c4;
|
7 |
float a = 4; |
int a2 = 5;
|
unsigned char a3 = 200;
|
unsigned short a4=2000;
|
8 |
float a = 5; |
Int a2 = 7;
|
unsigned char a3 = 17;
|
unsigned short a4=10;
|
9 |
int a = 5; |
float a2 = 7;
|
unsigned char a3 = 16;
|
unsigned char a4=18;
|
10 |
int a = 5; |
int a2 = 7;
|
unsigned char a3 = 25;
|
unsigned short a4=1000;
|
11 |
float a = 5; |
int a2 = 7;
|
unsigned short a3= 100;
|
unsigned short a4=2000;
|
12 |
int a = 5; |
int a2 = 8;
|
unsigned short a3= 150;
|
unsigned char a4=100;
|
13 |
int a = 5; |
float a2 = 8;
|
unsigned char a3 = 80;
|
unsigned short a4=1;
|
14 |
int a = 5; |
int a2 = 8;
|
unsigned char a3 = 180;
|
unsigned char a4=1;
|
15 |
float a = 5; |
int a2 = 8;
|
unsigned char a3 = 180;
|
unsigned char a4=100;
|
16 |
int a = 7; |
int a2 = 8;
|
unsigned char a3 = 250;
|
unsigned char a4=100;
|
17 |
int a = 7; int c = 1; |
int a2 = 10; c2 = a2/(a2 - 6);
|
unsigned char a3 = 250; c3 = a3+25;
|
unsigned short a4=1; c4 = a4 - 2;
|
18 |
float a = 7; |
int a2 = 10;
|
unsigned char a3 = 200;
|
unsigned short a4=1000;
|
19 |
int a = 7; |
int a2 = 10;
|
unsigned char a3 = 200;
|
unsigned short a4=700;
|
20 |
int a = 7; |
int a2 = 7;
|
unsigned short a3= 200;
|
unsigned short a4=12;
|
21 |
int a = 7; |
int a2 = 5;
|
unsigned short a3= 500;
|
unsigned short a4=10;
|
22 |
int a = 5; |
int a2 = 8;
|
unsigned char a3 = 180;
|
unsigned char a4=100;
|
23 |
int a = 5; |
int a2 = 8;
|
unsigned char a3 = 250;
|
unsigned short a4=1000;
|
24 |
int a = 7; |
int a2 = 10;
|
unsigned char a3 = 200;
|
unsigned short a4=12;
|
25 |
int a = 7; |
int a2 = 8;
|
unsigned char a3 = 16;
|
unsigned char a4=18;
|
Номер варіанта |
Завдання 1 |
Завдання 2 |
Завдання 3 |
1 |
int j, b = 5, a =4 ; j = b---a; |
7 - 2 * ( 5 / 2 ) = |
5 + 05 = |
2 |
int j, b = 5, a =4 ; j = (b--)-a; |
7 - (2 * 5) / 3 = |
07 + 7 = |
3 |
int j, b = 5, a =4 ; j = b-(--a); |
(float)7 - 2 * ( 5 / 2 ) = |
0х10 + 10 = |
4 |
int j, b = 5, a =4 ; j = --b-a--; |
7 – (float)2 * ( 5 / 3 ) = |
0х12 + 2 = |
5 |
int j, b = 5, a =4 ; j = b+++a; |
9 - 2 * ( 5 / 4 ) = |
6 + 06 = |
6 |
int j, b = 5, a =4 ; j = (b++)+a; |
7 - (4 * 5) / 2 = |
012 + 12 = |
7 |
int j, b = 5, a =4 ; j = b+(++a); |
(float) 9 - 2 * ( 5 / 2 ) = |
0х1A + 10 = |
8 |
int j, b = 5, a =4 ; j = ++b+a++; |
9 – (float)2 * ( 5 / 7 ) = |
0х77 + 17 = |
9 |
int j, b = 5, a =4 ; j = ++b-a--; |
18 - 2 * ( 7 / 3 ) = |
15 + 05 = |
10 |
int j, b = 5, a =4 ; j = (b++)-a; |
18 - (2 * 5) / 4 = |
07 + 14 = |
11 |
int j, b = 5, a =4 ; j = b-(++a); |
(float) 13 - 2 * ( 5 / 2 ) = |
0х1А + 10 = |
12 |
int j, b = 5, a =4 ; j = --b-a++; |
7 – (float)2 * ( 5 / 9 ) = |
0х22 + 22 = |
13 |
int j, b = 5, a =4 ; j = ++b-a++; |
18 - 2 * ( 7 / (float) 3 ) = |
21 + 021 = |
14 |
int j, b = 5, a =4, c =3; j = b---a---c; |
18 - (2 * (float) 5) / 3 = |
014 + 74 = |
15 |
int j, b = 5, a =4, c =3; j = (b--)-a-(--c); |
(float) 13 - 2 * ( 5 / 11 ) = |
0х51 + 51 = |
16 |
int j, b = 5, a =4, c =3; j = b-(--a)-(c--); |
77 - 2 * ( 55 / 2 ) = |
0х11 + 011 = |
17 |
int j, b = 5, a =4, c =3; j = --b-a---(c--); |
73 - (2.3 * 54) / 7 = |
0х31 + 031 + 31= |
18 |
int j, b = 5, a =4, c =3; j=(b---a-(++c)); |
18 – 2.2 * ( 7 / 3 ) = |
041 + 0х41 + 41 = |
19 |
int j, b = 5, a =4, c =3; j=(b++-a-(--c)); |
18 - (2 * 5) / 4.1 = |
0х9 + 033 = |
20 |
int j, b = 5, a =4, c =3;j =b-(++a)-(c--); |
(float)17 – 2 * ( 5 / 2 ) = |
0х20 + 12 = |
21 |
int j, b = 5, a =4, c =3; j=--b-a---(c++); |
7 – (float)2 * ( 5 / 12 ) = |
37 + 012 = |
22 |
int j, b = 5, a =4, c =3; j = b---a---c; |
(float) 13 - 2 * ( 5 / 11 ) = |
0х11 + 011 = |
23 |
int j, b = 5, a =4, c =3; j = (b--)-a-(--c); |
77 - 2 * ( 55 / 2 ) = |
0х31 + 031 + 31= |
24 |
int j, b = 5, a =4, c =3; j = b-(--a)-(c--); |
73 - (2.3 * 54) / 7 = |
041 + 0х41 + 41 = |
25 |
int j, b = 5, a =4 ; j = b+++a; |
7 - (4 * 5) / 2 = |
0х1A + 10 = |