Дипломная работа: Мова програмування С++
Дипломная работа: Мова програмування С++
Дипломна робота
Мова програмування
С++
Зміст
1. Створення простих програм на С++
1.1 Структура
програми
1.2 Етапи
виконання програми
1.3 Порядок
запуску програми
2. Форматний ввід/вивід у мові С/С++
2.1 Функції вводу/виводу мови С
2.2 Функції вводу/виводу та маніпулятори мови С++
3. Лінійні програми на С++
3.1 Стандартні типи даних мови С++
3.2. Операції мови С++
4. Основні оператори мови С++
4.1 Складові оператори
4.2 Оператори розгалуження
4.3 Оператори циклу
4.4 Оператори переходу
5. Вказівними та операції над ними
5.1 Поняття вказівника
5.2 Дії над вказівниками
6. Робота з одновимірними масивами
6.1 Статичні та динамічні масиви
6.2 Рядки, як одновимірні масиви
7. Двовимірні масиви
8. Символьна інформація та рядки
8.1 Збереження символьної інформації
8.2 Функції вводу/виводу для роботи з рядками
8.3 Спеціальні функції для роботи з рядками та символами
9. Функції користувача
9.1 Функції: визначення, опис, виклик
9.2 Передача масивів у функцію
9.3 Перевантаження функцій у С++
9.4 Функції зі змінною кількістю параметрів
10. Структури
Список літератури
1. Створення простих програм на С++
C++ (Сі-плюс-плюс) — універсальна мова
програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої,
узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та
названа «Сі з класами». Страуструп перейменував мову у C++ у 1983 р. Базується на
мові Сі. Визначена стандартом ISO/IEC 14882:2003.
1.1 СТРУКТУРА ПРОГРАМИ
Розглянемо програму, що виводить на екран монітора фразу “Ласкаво
просимо до С++!”:
Приклад 1.
// Welcome.cpp – ім’я файла з програмою
# include <iostream.h>
void main ()
{ cout << ” Ласкаво просимо до
С++! \ n”;
}
Результат виконання програми:
Ласкаво просимо до С++!
У першому рядку програми міститься однорядковий
коментар, що починається з символу “//”, який вказує, що після цього символу йде
однорядковий коментар. Коментарі не викликають ніяких дій комп’ютера і ігноруються
компілятором С++, а лише допомагають іншим людям читати і зрозуміти Вашу програму.
У другому рядку розміщено команду (директиву)
препроцесору, що забезпечує включення до програми засобів зв’язку зі стандартними
потоками вводу і виводу даних. Вказані засоби містяться у файлі під назвою iostream.h
(мнемоніка: “і” (input) – ввід; “output” – вивід; “stream” – потік; “head” - заголовний).
Рядок, що починається з ”#”, обробляється препроцесором перед компіляцією програми.
Файл iostream.h повинен бути залучений для всіх програм, що виводять дан
на екран монітора або вводять дані з клавіатури.
Третій рядок є заголовком функції з іменем
main. Будь-яка програма на С++ повинна містити лише одну функцію з таким
менем. Саме з неї починається виконання програми. void – специфікатор
типу, який вказує, що функція main в даному прикладі не повертає ніякого
значення. Круглі дужки після main потрібні в зв’язку з форматом (синтаксисом)
заголовка будь-якої функції. В них розміщується список параметрів. У нашому
прикладі параметри не потрібні.
Тіло будь-якої функції повинно починатися
закінчуватися фігурними дужками, між якими знаходиться
послідовність описів, операторів і визначень. Кожен оператор, визначення чи опис
повинні закінчуватися крапкою з комою.
Рядок
cout << ” Ласкаво просимо до С++!
\ n”;
є командою комп’ютеру надрукувати на
екрані рядок символів, що записаний у лапках. Повний рядок, включаючи cout, операцію
<<”, рядок ”Ласкаво просимо до С++! \ n” і крапку з комою “;”, називається
оператором. Всі вводи і виводи в С++ виконуються над потоками символів. Таким чином
потік символів Ласкаво просимо до С++! спрямовується до об’єкта стандартного потоку
виводу cout, який пов’язаний з екраном. Вже зараз слід відмітити одну з принципових
особливостей мови С++, яку називають перевантаженням або розширенням дії стандартних
операцій. Операція ”<<” називається операцією „розмістити у потік” лишень
у тому випадку, коли зліва від неї знаходиться ім’я об’єкта cout. Інакше
пара символів “<<” означає бінарну операцію зсуву вліво. Символи правого
операнда зазвичай виводяться так само, як вони виглядають між лапками.
Слід зазначити, що символи ”\n
не виводяться на екран. Комбінацію символів, що починаються з позначки оберненого
Стеша (”\”), називають знаком переходу або escape-символом. Керуюча послідовність
\n” означає перехід на початок нового рядка. Цей символ в лапках може знаходитися
будь-де в рядку, при цьому послідовність символів, що знаходиться за ним, виводитиметься
з нового рядка. Тобто результат виконання операції
cout << ” Ласкаво просимо \nдо
С++! \ n”;
матиме вигляд:
Ласкаво просимо
до С++!
1.2 ЕТАПИ ВИКОНАННЯ ПРОГРАМИ
Вихідна програма, підготовлена на мов
С++ у вигляді текстового файла з розширенням *.срр (welcome.cpp),
проходить 3 етапи обробки:
1) препроцесорне перетворення тексту програми;
2) компіляція;
3) компоновка (редагування зв¢язків чи складання).
Після цих 3 етапів формується машинний
код програми, що виконується.
Задачею препроцесора є перетворення (доповнення)
тексту програми до початку її компіляції. Правила препроцесорної обробки визначаються
програмістом за допомогою директив препроцесора. Директива починається з ”#” (¢дієс¢, ¢шарп¢). Наприклад,
1) #define - визначає правила заміни
в тексті:
#define ZERO 0.0
Це означає, що кожне використання у програм
мені ZERO буде замінюватися на 0.0.
2) #include< ім¢я заголовного файла > - передбачена
для залучення до тексту програми тексту файлу з каталогу “Заголовних файлів” INCLUDE,
які постачаються разом зі стандартними бібліотеками. Кожна бібліотечна функція чи
об¢єкт
С++ має відповідний опис в одному з заголовних файлів (наприклад, iostream.h,
stdio.h, conio.h, math.h). Список заголовних файлів визначається стандартом
мови. Використання директиви include не під¢єднує відповідну стандартну
бібліотеку, а лише дозволяє долучити до тексту програми описи із зазначеного
заголовного файлу. В нашому випадку препроцесор обробляє директиву #include <iostream.h>
під’єднує до вихідного тексту програми засоби для обміну з дисплеєм. Далі файл
передається на компіляцію, у ньому виявляються синтаксичні помилки, які потрібно
усунути програмістові. Після безпомилкової компіляції текст програми перекладається
компілятором на машинну мову, далі отримуємо об’єктний файл з розширенням *.obj.
Підключення об¢єктних кодів файлів з визначеннями необхідних
стандартних функцій і об¢єктів з бібліотеки відбувається на етапі компоновки, тобто після компіляції.
У об¢єктному
коді створюваної програми ніби замуровуються дірки за допомогою кодів стандартних
функцій. Хоча в заголовних файлах містяться всі описи стандартних функцій, до коду
програми залучаються лише функції й об¢єкти, які використовуються в програмі.
Після компоновки утворюється модуль програми з розширенням *.ехе.
Отже, в нашому випадку, виконавши директиви,
препроцесор сформує повний текст програми, компілятор створить об’єктний файл welcome.obj,
за замовчуванням обравши для нього зазначене ім’я, а компоновщик (редактор зв’язків
Linker) доповить програму бібліотечними функціями, наприклад, для роботи з об’єктом
cout і побудує модуль welcome.exe, запустивши, який ми одержуємо на
екрані бажану фразу. Схема етапів виконання програми наведена на рис. 1.1.
1.3 ПОРЯДОК ЗАПУСКУ ПРОГРАМИ
1.
Відкрийте нове вікно редагування (File > New)
надайте йому ім’я Welcome (File > Save As);
2.
У новому вікні наберіть текст програми, що наводиться
у Прикладі 1.
3.
Відкомпілюйте програму (Compile > Compile
або (Alt+F9)). В разі повідомлень про помилку, перевірте текст програми
усуньте невідповідності. Щоразу, вносячи зміни у вихідний текст програми, зберігайте
файл (File > Save або F2). Після чого змінену програму слід відкомпілювати;
4.
Запуск відкомпільованої програми здійснюється за командою
(Run > Run або Ctrl+F9). Якщо з моменту останньої компіляції вихідний
код було модифіковано, ця команда виконає послідовно компіляцію і компоновку. Результат
виконання програми можна переглянути, натиснувши комбінацію клавіш Alt+F5.
2. Форматний ввід/вивід
у мові С/С++
2.1 ФУНКЦІЇ ВВОДУ/ВИВОДУ МОВИ С
У мові С++ немає вбудованих засобів вводу/виводу – вони здійснюються за
допомогою функцій, типів та об’єктів, що містяться у стандартних бібліотеках. Використовується
два способи: функції, успадковані з мови С та об’єкти С++.
Основні функції вводу/виводу в стил
С, опис яких міститься у заголовному файлі <stdio.h>:
рrintf (<керуючий
рядок>, <список аргументів>);
Керуючий рядок береться у лапки і вказу
компілятору вигляд інформації, що виводиться. Вона може містити специфікації перетворення
керуючи або escape-символи.
Специфікація перетворення має такий вигляд:
% <прапор>
<розмір поля . точність> специфікація,
де прапор може набувати наступних
значень:
-
вирівнювання вліво числа, що виводиться (за замовчуванням виконується вирівнювання
вправо);
+
виводиться знак додатного числа;
розмір поля
задає мінімальну ширину поля, тобто довжину числа. Якщо ширини поля недостатня,
автоматично виконується його розширення;
точність
задає точність числа, тобто кількість цифр його дробової частини;
специфікація
вказує на вигляд інформації, що виводиться. У таблиці 2.1 наведено основні формати
функції друку.
Таблиця 2.1
| Формат |
Тип інформації,
що виводиться |
| %d |
десяткове ціле
число |
| % і |
для виведення
цілих чисел зі знаком (printf (“a=%i”, -3)); |
| %u |
для виводу
беззнакових цілих чисел (printf(“s=%u”, s)) |
| %c |
один символ |
| %s |
рядок символів |
| %e |
число з плаваючою
крапкою (експоненційний запис) |
| %f |
число з плаваючою
крапкою (десятковий запис) (printf(“b=%f\n, c=%f\n, d=%f\n”, 3.55, 82.2, 0.555
)); |
| %u |
десяткове число
без знака |
Керуючий рядок може
містити наступні керуючі символи:
\n – перехід на новий рядок;
\t – горизонтальна і \v – вертикальна
табуляція;
\b – повернення назад на один символ;
\r – повернення на початок рядка;
\a – звуковий сигнал;
\” –лапки;
\? – знак питання;
\\ - зворотний слеш.
Список аргументів - об¢єкти, що друкуються (константи,
змінні). Кількість аргументів та їх типи повинні відповідати специфікаціям перетворення
в керуючому рядку.
Приклад 1.
#include <stdio.h>
#define PI 3.1415926
void main()
{
int number=5, cost=11000, s=-777;
float bat=255, x=12.345;
printf ("%d студентів з¢їло
%f бутербродів.\n", number, bat);
printf ("Значення числа pi рівне%f.\n",
pi);
printf ("Вартість цієї машини %d%s\n",
cost,"у.е");
printf ("x=%-8.4f s=%5d%8.2f ",
x, s, x);
}
В результаті виконання останньої функц
printf() на екрані буде виведено:
х=12.3450 s= -777 12.34
Функція scanf передбачена
для форматного вводу інформації довільного вигляду. Загальний вигляд функції:
scanf (<керуючий рядок>, <
список адрес>);
На відміну від функції виводу
printf(), scanf() використовує у списку адреси змінних, для одержання
яких перед іменем змінної ставиться символ ”&”, що позначає унарну операцію
одержання адреси. Для вводу значень рядкових змінних символ ”&” не використовується.
При використанні формату %s рядок вводиться до першого пропуску. Вводити дані можна
як в одному рядку через пропуск, так і в різних рядках.
Дану особливість ілюструє відповідна
частина програми:
int course;
float grant;
char name[20];
printf ( "Вкажіть ваш курс, стипендію,
м¢я \n");
scanf ( "%d%f", &course,
&grant);
scanf ( "%s", name); /* ”&
відсутній при зазначенні масиву символів */
Для зміни кольору тексту використовують
функції із файла <conio.h>: clrscr() – очищує екран; textcolor(Колір)
задає колір символів; textbackground (Колір) – встановлює колір фону. Вивід
тексту на екран здійснюється за допомогою функції cprintf(), яка використовується
аналогічно printf(). Зверніть увагу на те, що перехід на початок нового рядка
у цій функції здійснюється за допомогою комбінації ”\n\r”.
Колір можна задати за допомогою ціло
або іменованої константи, перелік яких наводиться у таблиці 2.2.
Таблиця 2.2
Колір
|
Константа
|
Значення константи
|
| Чорний |
BLACK |
0 |
| Синій |
BLUE |
1 |
| Зелений |
GREEN |
2 |
| Червоний |
RED |
4 |
| Фіолетовий |
MAGENTA |
5 |
| Сірий |
GREY |
8 |
| Блакитний |
LIGHTBLUE |
9 |
| Помаранчевий |
LIGHTRED |
12 |
| Жовтий |
YELLOW |
14 |
| Білий |
WHITE |
15 |
2.2 ФУНКЦІЇ ВВОДУ/ВИВОДУ
ТА МАНІПУЛЯТОРИ МОВИ С++
А ось як виглядає програма вводу/виводу
з використанням бібліотеки класів С++:
Приклад 2.
# include <iostream.h>
void main()
{ int i;
cout<< “Введіть ціле число\n”;
//об’єкт для вводу з клавіатури і >>розміщення
у потік виводу
cin>> i;
cout<< “Ви ввели число”<<
i <<”дякую!”;
}
Для форматного виводу у С++ використовуються
маніпулятори, для використання яких до програми потрібно підключити заголовний файл
<iomanip.h>:
setw(int) – встановлює максимальну
ширину поля виводу чисел та рядків (не символів);
setprecision(int) – встановлює максимальну кількість цифр дробової частини для дійсних чисел
з фіксованою крапкою;
setiosflags(ios::showpoint | ios::fixed)
– вивід дійсних чисел з фіксованою крапкою;
setiosflags(ios::left) або setiosflags(ios::right) – вирівнювання по лівому або правому
полю;
endl – при
виводі включає у потік символ нового рядка, еквівалентний “\n” (його опис міститься
у файлі iostream.h).
Маніпулятори спрямовуються в потік виводу,
аналогічно тому, як це зроблено у прикладі 3:
Приклад 3.
# include<iostream.h>
#include <iomanip.h>
void main()
Результат виводу ( позначає пробіл):
52.287
410.000
У даному прикладі маніпулятори точност
та фіксації крапки спрямовуються у потік виводу одноразово, тоді як ширину поля
виводу необхідно встановлювати для кожного значення.
3. Лінійні програми на С++
3.1 СТАНДАРТНІ ТИПИ ДАНИХ
МОВИ С++
Всі об¢єкти (змінні, масиви тощо),
з якими працює програма в С/С++, необхідно визначати або описувати. Найпростіша
форма визначення змінної:
<тип> <список імен змінних>;
При оголошенні об¢єкти можна ініціалізувати (задавати
початкове значення).
Наприклад: int j=10,
m(3), n;
float c(-1.3), l=-10.23, f1;
Оголошення повідомляють компілятору про
властивості та імена об¢єктів і функцій. Змінні можуть змінювати свої значення. При наданні значення
змінній у комірці пам¢яті, яка відводиться під неї, розміщується код цього значення. Доступ до
значення цієї змінної можливий через ім¢я змінної, а доступ до ділянки пам¢яті здійснюється за
адресою. Розмір ділянки пам¢яті, що відводиться змінній, визначається її типом. Перелік базових типів
даних наведено у таблиці 3.1.
Таблиця 3.1
| Тип даних |
Назва |
Розмір, біт |
Діапазон значень |
| unsigned char |
Беззнаковий цілий
довжиною не менше 8 біт |
8 |
0 . . 255 |
| сhar |
Цілий довжиною
не менше 8 біт |
8 |
-128 . . 127 |
| unsigned int |
Без знаковий цілий |
16 |
0 . . 65535 |
| short int (short) |
Короткий цілий |
16 |
-32768 . . 32767 |
| unsigned short |
Беззнаковий короткий
цілий |
16 |
0 . . 65535 |
| int |
Цілий |
16 |
-32768 . . 32767 |
| unsigned long |
Беззнаковий довгий
цілий |
32 |
0 . . 4294967295 |
| long int (long) |
Довгий цілий |
32 |
-214748348 . .
2147483647 |
| float |
Дійсний одинарно
точності |
32 |
3.4Е-38 . . 3.4Е+38 |
| double |
Дійсний подвійно
точності |
64 |
1.7Е-308 . . 1.7Е+308 |
| long double |
Дійсний максимально
точності |
80 |
3.4Е-4932 . . 1.1Е+4932 |
|
|
|
|
|
3.2 ОПЕРАЦІЇ МОВИ С++
Позначки
операцій – це один або декілька символів, що визначають
дію над операндами. Операції поділяють на унарні, бінарні та тернарні за кількістю
операндів, які беруть участь в операції (таблиця 3.2).
Таблиця 3.2.
| Операція |
Короткий опис |
|
Унарні операції
|
| & |
Операція одержання
адреси операнда |
| * |
Звернення за адресою
(розіменування) |
| - |
Унарний мінус
змінює знак арифметичного операнда |
| ~ |
Порозрядове інвертування
внутрішнього двійкового коду (побітове заперечення) |
| ! |
Логічне заперечення
(НЕ) значення операнда. Цілочисельний результат 0 (якщо операнд ненульовий, тобто
стинний) або 1 (якщо операнд нульовий, тобто хибний). Таким чином: !1 дорівню
0; !2 дорівнює 0; !(-5)=0; !0 дорівнює 1. |
| ++ |
Інкремент (збільшення
на одиницю):
Префіксна операція
(++х) збільшує операнд на 1 до його використання.
Постфіксна операція
(х++) збільшує операнд на 1 після його використання.
int m=1, n=2;
int a=(m++)+n;
// a=3, m=2, n=2
int b=m+(++n);//
b=6, m=2, n=3
|
| - - |
Декремент (зменшення
на одиницю):
Префіксна операція
(--х) зменшує операнд на 1 до його використання.
Постфіксна операція
(х--) зменшує операнд на 1 після його використання.
|
| sizeof |
Обчислення розміру
(в байтах) об¢єкта того типу, який має операнд. Має дві форми:
1) sizeof (вираз);
sizeof(1.0); //
Результат - 8,
Дійсні константи
за замовчуванням мають тип double;
2) sizeof (тип)
sizeof (char);
// Результат – 1.
|
|
Бінарні операції
|
| Арифметичні операції |
| + |
Бінарний плюс (додавання
арифметичних операндів) |
| - |
Бінарний мінус
(віднімання арифметичних операндів) |
| Мультиплікативні |
| * |
Добуток операндів
арифметичного типу |
| / |
Ділення операндів
арифметичного типу (якщо операнди цілочисельні, абсолютне значення результату
заокруглюється до цілого, тобто 20/3 дорівнює 6) |
| % |
Одержання залишку
від ділення целочисельних операндів (13%4 = 1) |
| Операції зсуву
(визначені лише для цілочисельних операндів) |
| << |
Зсув вліво бітового
представлення значення лівого цілочисельного операнда на кількість розрядів, рівну
значенню правого операнда (4<<2 дорівнює 16, т.я. код 4 100, а звільнен
розряду обнуляються, 10000 – код 16) |
| >> |
Зсув вправо бітового
представлення значення правого цілочисельного операнда на кількість розрядів,
рівну значенню правого операнда |
| Порозрядні операції |
| & |
Порозрядна кон’юнкція
(І) бітових представлень значень цілочисельних операндів | |