![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
У мові С++ кожна величина має певний спосіб зберігання й запису в пам'яті – тобто певний тип. При складанні програми необхідно вказати типи даних, до яких належать значення змінних. Наприклад,
float z;
int a=99;
float g(int)
Тут змінна z оголошена як дійсна типу float, змінна а – як ціла типу int, а g оголошена як дійсна функція з аргументом цілого типу.
У С++ передбачений набір типів, що відображають особливості організації пам'яті більшості комп'ютерів і потреби в зберіганні даних. Всі типи даних у С++ можна розділити на дві великі групи: вбудовані типи (тобто існуючі у мові програмування) і користувальницькі типи (створюються самим програмістом). До вбудованих типів ставляться, насамперед, основні (або стандартні) типи:
bool – логічний;
char – символьний;
wchar_t – розширений символьний;
int – цілий;
float – дійсний;
double – дійсний подвійної точності;
Перші чотири типи називаються інтегральними типами, останні два – типами із плаваючою крапкою. Представлення інтегральних типів, відрізняється від коду величин із плаваючою крапкою.
Щоб розширити можливості програміста в застосуванні типів даних, існують модифікатори, які уточнюють внутрішнє представлення й діапазон значень стандартних типів:
signed – знаковий;
unsigned – беззнаковий;
long – довгий;
short – короткий.
При оголошенні змінної модифікатор ставиться перед ключовим словом типу, наприклад,
unsigned int x;
– оголошення цілої беззнакової змінної x. За умовчанням всі інтегральні типи є знаковими, тобто модифікатор signed для них можна вилучати. Модифікатори short і long можуть використовуватися тільки з типом int. Тому замість short int і long int для стислості можна записувати:
short x=221;
long z=-12345678;
До користувальницьких типів належать перелічуваний тип (enum), структури (struct) і класи (class).
Діапазони значень для основних типів даних, а також розмір пам'яті під них наведені у таблиці 1.1.
Табл. 1.1. Розмір пам'яті й діапазони значень для основних типів даних
Тип | Розмір (байт) | Інтервал значень | |
bool | true, false | ||
char | -128.. 127 | ||
unsigned char | 0.. 255 | ||
wchar_t | -32768.. 32767 | ||
short | -32768.. 32767 | ||
unsigned short | 0.. 65535 | ||
int | 16-розр. платформа | -32768.. 32767 | |
32-розр. платформа | -2147483648.. 2147483647 | ||
unsigned int | 16-розр. платформа | 0.. 65535 | |
32-розр. платформа | 0.. 4294967295 | ||
long | -2147483648.. 2147483647 | ||
unsigned long | 0.. 4294967295 | ||
float | 3.4×10-38.. 3.4×1038 | ||
double | 1.7×10-308.. 1.7×10308 | ||
long double | 3.4×10-4932.. 1.1×104932 |
Для змінної типу int виділяється 2 або 4 байти пам'яті залежно від розрядності платформи (мікропроцесора, операційної системи, середовища програмування). Наприклад, Turbo C++ працює на 16-розрядній платформі (MS-DOS), а C++ Builder і Visual C++ - на 32-розрядній (Windows, Unix).
1.3. Операції в С++
У мові С++ є обмежений набір базових типів даних, однак визначений великий набір операцій над даними. Операції служать для побудови виразів. Вираз являє собою послідовність операндів і знаків операцій і служить для обчислення деякого значення. Результат обчислення виразу залежить від пріоритетів операцій (табл. 1.2).
Таблиця 1. 2. Пріоритети операцій у С++
Пріоритет | Знак операції | Призначення | Схема |
:: | Розширення області видимості (доступ до глобального імені або імені з іншої області) | :: ідентифікатор (глобальний) ім'я області:: ім'я_елемента структури | |
-> | Звертання до елемента структури по покажчику на структуру | покажчик -> ім'я_члена_структури | |
. | Звертання до елемента структури по імені структури | ім'я_структури. ім'я_члена_структури | |
[] | Звертання до елемента масиву | покажчик [індекс] | |
typedef | Перетворення типу даного | ім'я_типу (вираз) або (тип) вираз | |
() | Виклик функції | Функція(аргументи) | |
++ | Інкремент | ++ L-значення або L-значення++ | |
-- | Декремент | -- L-значення або L-значення-- | |
~ | Бітове інвертування | ~ цілий_вираз | |
! | Логічне заперечення | ! вираз | |
- | Унарний мінус | - вираз | |
+ | Унарний плюс | + вираз | |
& | Одержання адреси | & L-значення | |
* | Розіменування покажчика | * покажчик | |
new | Виділення динамічної пам'яті | new тип даного | |
delete | Звільнення пам'яті | delete покажчик | |
sizeof | Розмір даного (типу даних) | sizeof вираз sizeof (ім'я типу) | |
* | Множення | вираз * вираз | |
/ | Ділення | вираз / вираз | |
% | Залишок від ділення двох цілих | вираз % вираз | |
->* | Звертання до елементу структури за покажчиком | покажчик_на_структуру->* ім'я_елемента_структури-покажчика | |
.* | Звертання до елементу структури за іменем структури | ім'я_структури.* ім'я_члена_структури-покажчика | |
+ | Додавання | вираз + вираз | |
- | Віднімання | вираз – вираз | |
<< | Зсув вліво | цілий_вираз << цілий _вираз | |
>> | Зсув вправо | цілий _вираз >> цілий _вираз | |
< | Менше | вираз < вираз | |
<= | Менше або дорівнює | вираз <= вираз | |
> | Більше | вираз > вираз | |
>= | Більше або дорівнює | вираз >= вираз | |
== | Дорівнює | вираз == вираз | |
!= | Не дорівнює | вираз!= вираз | |
& | Побітове "І" | вираз & вираз | |
^ | Виключне побітове "АБО" | вираз ^ вираз | |
| | Побітове "АБО" | вираз | вираз | |
&& | Логічне "І" | вираз && вираз | |
|| | Логічне "АБО" | вираз | | вираз | |
?: | Умовний вираз | вираз? вираз1: вираз2 | |
= | Просте присвоювання | вираз = вираз | |
@= | Складне присвоювання; @ - один зі знаків операцій * / % + - << >> & ^ | | вираз @= вираз | |
, | Операція слідування (операція «кома») | вираз, вираз |
2. Лабораторна робота 1.
«Обчислення арифметичних виразів» (2 год.)
Мета роботи: Одержання навичок роботи з арифметичними типами даних і операціями, складання простих програм.
2.1. Теоретичні відомості
При обчисленні арифметичних виразів необхідно враховувати тип змінних-операндів, що беруть участь в операціях. Нижче дані правила дії над операндами різних типів.
2.2.1. Приведення типів
Якщо у виразу (праворуч від операції присвоювання) беруть участь операнди різних типів, то менш точний тип приводиться до більш точного. Наприклад,
int a1;
float c2=a1/99.;
при обчисленні c2 тип першого операнду a1 приводиться до float, тобто до типу другого операнду – дійсної константи 99.
В операціях присвоювання тип результату (правої частини) приводиться до типу лівого операнду. Наприклад, при виконанні фрагмента:
double a1=2.2, b1=3;
int mult=a1*b1;
змінна mult одержить значення 6, але точне значення повинне бути 6.6.
Результатом виконання операторів:
int m=4, n=5;
double div=m/n;
буде значення div=0, оскільки цілочисельне ділення цілих змінних m і n дасть 0. Щоб одержати правильне значення для змінної div у даному прикладі необхідно виконати явне приведення типів, що записується як вираз
(тип)
перед тієї змінної, котру потрібно явно привести до зазначеного типу. Тому для змінних m і n цілого типу правильним буде запис:
double div = (double)m/n;
Тоді змінна m, до якої застосована операція приведення, розглядається як дійсна величина типу double. Так що ділення здійснюється вже не з цілими, а з дійсними числами, і дає правильний результат: 0.75.
2.2. Постановка задачі
1. Обчислити значення виразу (див. розд. «Варіанти») при заданому a і різних b. Значення b змінювати при кожному запуску програми. Виконати обчислення при різних дійсних типах даних (float і double). У програмі для обчислення виразу використати проміжні змінні.
2. Спростити заданий вираз шляхом алгебраїчних перетворень і обчислити точне значення виразу.
3. Порівняти й пояснити результати, отримані згідно п.1 і п.2.
2.3. Варіанти
№ | Завдання |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() | |
![]() |
2.4. Методичні вказівки
1. Для введення параметра b використати операцію cin. Числа з плаваючою крапкою варто вводити у вигляді: 1e-2 (= 0.01), 1E-4 (=0.0001), 0.123e+2 (=12.3) і т.д.
2. Виведення значення виразу здійснювати за допомогою операції cout з точністю до 10 значущих цифр. Для цього необхідно використовувати маніпулятор setprecision(int). Наприклад, інструкція
cout << setprecision(8) << x;
виводить 8 значущих цифр змінної x, починаючи з першої цифри. Доступ до маніпулятора setprecision забезпечується заголовним файлом iomanip.h
2.5. Зміст звіту
1. Постановка задачі.
2. Код програми.
3. Результати роботи програми для даних типу float і різних значень b.
4. Результати роботи програми для даних типу double і різних значень b.
5. Результати обчислення з використанням алгебраїчних перетворень.
6. Пояснення результатів.
3. Лабораторна робота 2. «Оператори С++» (2 год.)
Мета роботи: вивчити основні оператори С++, одержати практичні навички використання умовних операторів і операторів циклу при створенні програм.
3.1. Теоретичні відомості
Оператори – це синтаксичні конструкції, що визначають дії, які виконуються програмою.
Дата публикования: 2015-04-07; Прочитано: 1904 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!