- •О.Ф.Тарасов, о.В.Алтухов
- •1 Заняття № 1 Вивчення інтегрованого середовища с
- •1.1 Теоретичні відомості
- •1.2 Хід роботи
- •1.3 Вимоги до звітів
- •1.4 Питання для контролю і самостійної роботи
- •2 Заняття № 2 Функції введення/виведення даних printf( ), scanf( ). Лінійні обчислювальні процеси
- •2.1 Теоретичні відомості
- •2.2 Хід роботи
- •2.3 Індивідуальне завдання до заняття №2
- •2.4 Питання для контролю і самостійної роботи
- •3 Заняття № 3 Розробка програм зі скалярними типами даних
- •3.1 Теоретичні відомості
- •Приклад
- •3.2 Хід роботи
- •3.3 Індивідуальне завдання до заняття № 3
- •3.4 Питання для контролю і самостійної роботи
- •4 Заняття № 4 Розробка програм з циклічними обчислювальними процесами
- •4.1 Теоретичні відомості
- •Алгоритм роботи оператора циклу for ( )
- •4.2 Хід роботи
- •4.3 Індивідуальне завдання до заняття № 4
- •4.4 Питання для контролю і самостійної роботи
- •5 Заняття № 5
- •Розгалуження обчислювального процесу.
- •Оператори, які реалізують розгалуження: if... Else, switch,
- •Умовна операція ( ? : )
- •5.1 Теоретичні відомості
- •Умовна тернарна операція ( ? : )
- •Оператор варіанта switch
- •Приклад
- •5.2 Хід роботи
- •5.3 Індивідуальне завдання до заняття № 5
- •5.4 Питання для контролю і самостійної роботи
- •6 Заняття № 6 Операції с, їхні пріоритети і використання. Перетворення типів
- •Пріоритет операцій і порядок виконання (асоційованість)
- •(Новий_тип) Операнд
- •Приклад
- •6.2 Хід роботи
- •6.3 Індивідуальне завдання до заняття № 6
- •6.4 Питання для контролю і самостійної роботи
- •7 Заняття № 7
- •7.1 Теоретичні відомості
- •Оголошення функцій (створення прототипів)
- •([ Список_типів_параметрів ])
- •Синтаксис визначення функцій
- •[ Return Значення_типу_що_повертається ]
- •Використання локальних і глобальних перемінних у функціях. Виклик функції
- •Приклад
- •7.2 Хід роботи
- •7.3 Індивідуальне завдання до заняття № 7
- •7.4 Питання для контролю і самостійної роботи
- •8 Заняття № 8
- •8.1 Теоретичні відомості
- •Основні операції з покажчиками
- •Покажчики і цілі величини
- •Динамічне розміщення покажчиків у пам'яті
- •Приклад
- •Приклад
- •8.2 Хід роботи
- •8.3 Індивідуальне завдання до заняття № 8
- •8.4 Питання для контролю і самостійної роботи
- •9 Заняття № 9
- •9.1 Теоретичні відомості
- •Приклад
- •9.2 Хід роботи
- •9.3 Індивідуальне завдання до заняття №9
- •9.4 Питання для контролю і самостійної роботи
- •10 Заняття № 10
- •10.1 Теоретичні відомості
- •Приклад
- •10.2 Хід роботи
- •10.3 Індивідуальне завдання до заняття № 10
- •10.4 Питання для контролю і самостійної роботи
- •Заняття №11 Обробка символьних даних
- •Теоретичні відомості
- •Індивідуальне завдання до заняття №11
- •Питання для контролю і самостійної роботи
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Теоретичні відомості
- •Приклад
- •Індивідуальне завдання до завдання №13
- •Питання для контролю і самостійної роботи
- •Заняття № 14 Розробка програм зі складеними типами даних
- •Структури
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Заняття № 15 Використання покажчиків для роботи зі складеними типами даних (2години)
- •Теоретичні відомості
- •Приклад
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •Використання покажчиків для роботи з функціями
- •Покажчики як параметри функції
- •[Const ] Тип * Ім'я_покажчика
- •Приклад
- •Хід роботи
- •Індивідуальне завдання до заняття №16
- •Питання для контролю і самостійної роботи
- •Використання функцій високого і низького рівня для роботи з потоками (файлами)
- •Функції для роботи з файлами
- •Хід роботи
- •Індивідуальне завдання до заняття №17
- •Питання для контролю і самостійної роботи
- •Розробка програм із багатофайловою структурою. Заголовочні файли. Класи пам'яті перемінних і функцій
- •Керування многофайловими проектами
- •Використання адміністратора проектів
- •Приклад
- •Основний файл проекту
- •Заголовний файл
- •Хід роботи
- •Індивідуальне завдання до заняття №18
- •Питання для контролю і самостійної роботи
- •Графічні функції
- •Графічні примітиви
- •Хід роботи
- •Індивідуальне завдання до заняття №19
- •Питання для контролю і самостійної роботи
- •Заняття№20 Розробка програм з використанням класів
- •Теоретичні відомості
- •Оголошення і визначення класу
- •Тіло класу
- •Інкапсуляція. Керування доступом до членів класу
- •Використання даних-членів класу
- •Хід роботи
- •Індивідуальне завдання до заняття №20
- •Питання для контролю і самостійної роботи
- •Заняття№21 Використання конструкторів і деструкторів у класах
- •Теоретичні відомості
- •Ініціалізація об'єктів класу
- •Деструктори
- •Виклик деструкторів
- •Хід роботи
- •Питання для контролю і самостійної роботи
- •"Друзі" класів (friend)
- •Хід роботи
- •Індивідуальне завдання до заняття №22
- •Контрольні питання для підготовки і самостійної роботи
- •Віртуальні базові класи
- •Віртуальні деструктори
- •Хід роботи
1.3 Вимоги до звітів
Звіти про виконані роботи оформляються відповідно до методичних указівок [1] на основі ДСТУ 3008.95 “Документація, звіти у сфері науки і техніки. Структура і правила оформлення”. Звіти оформляються на окремих аркушах формату А4. Наприкінці семестру звіти зшиваються з титульним листом і здаються на кафедру після захисту всіх робіт.
Звіт повинний містити
Прізвище, ім'я та по батькові, а також групу студента.
Номер і назву роботи.
Ціль роботи.
Індивідуальне завдання.
Текст розробленої програми.
Результати роботи програми.
Висновки по роботі.
1.4 Питання для контролю і самостійної роботи
Як здійснюється запуск і вихід з інтегрованого середовища розробки С ?
Як здійснюється настроювання шляхів для підключення зовнішніх файлів?
Назвіть режими компіляції. Що вони означають ?
Як виконується підключення бібліотек функцій ?
Як здійснюється відкриття і закриття вікон, перехід між вікнами, копіювання тексту з вікна у вікно ?
Як здійснюється модифікація імені файлу ?
Чому завантаження IDE здійснюється з активної директорії ?
Назвіть «гарячі » клавіші і їхнє призначення.
Як виділити коментарі в С ?
Як підключаються заголовочні файли, що вони містять ?
Що позначається словом main( ) ?
Як позначається початок та кінець складеного оператора (блоку, тіла функції) ?
2 Заняття № 2 Функції введення/виведення даних printf( ), scanf( ). Лінійні обчислювальні процеси
(2 години)
Ціль роботи: вивчити формати оголошень і роботу основних функцій введення/виведення інформації; навчитися складати прості програми з лінійним обчислювальним процесом.
2.1 Теоретичні відомості
Однією з основних задач при програмуванні є введення і виведення даних. У С для цього застосовують ряд функцій – printf( ), scanf( ), cprintf( ), ecvt( ), fprintf( ), fread( ), fscanf( ), putc( ), puts( ), putw( ), sprintf( ), vprintf(). Функція printf( ) здійснює форматизоване виведення даних у потік stdout. Оголошення функції знаходиться у заголовочному файлі < stdio.h >.
Синтаксис оголошення функції printf( ):
# include < stdio.h > //Включення заголовочного файла
int printf ( const char* format [ ,argument, … ] );
У дужках [ ] зазначені необов'язкові елементи специфікації оголошення.
Специфікація формату першого аргументу ( const char* format - форматний рядок ), що визначає перелік символів та специфікаторів рядка формату для виведення інформації, має вигляд
% [ flags ] [ width] [ .precision ] [ F/N/h/l/L ] <type_char>
Функція scanf( ) здійснює введення даних з потоку stdin у відповідності до заданого формату.
Синтаксис оголошення функції scanf( ):
int scanf ( const char* format [ , adress, ... ] );
Специфікація формату першого аргументу ( const char* format - форматний рядок ) функції scanf( ) має наступний вигляд:
% [ * ] [ widht ] [ F|N ] [ h|l|L ] <type_char>
Ця специфікація формату наказує функції scanf( ) здійснити читання і перетворення символів із вхідного потоку в значення визначеного типу, потім запам'ятати їх у пам'яті за адресою, зазначеною відповідним адресним аргументом (adress). Для того, щоб получити адресу перемінної використовується операція узяття адреси - &. В С роботу з адресами пам’яті виконують також спеціальні перемінні - покажчики, які містять адреси інших перемінних.
Деякі символи не відображаються на екрані - пробіл ( ), символ табуляції ( ‘\t’ ), символ переходу на новий рядок ( ‘\n’ ) і інші керуючі послідовності. Якщо функція scanf( ) зустрічає у форматному рядку символи, які не відображаються на екрані, вона буде зчитувати, але не зберігати всю послідовність таких символів аж до наступного відображуваного символу у вхідному потоці.
Відображуваними символами є всі інші символи коду ASCII, за винятком символу відсотка (%). Якщо функція scanf( ) зустрічає в рядку формату відображуваний символ, то вона прочитає і збереже його.
Специфікація формату починається із символу відсотка (%). Після цього символу вказують символи специфікації. Нижче (таблиця 2.1, таблиця 2.2) представлений загальний опис символів специфікації рядка формату scanf( ), що керує формуванням потоку даних.
Таблиця 2.1- Призначення символів специфікації рядка формату scanf( )
Символ чи специфікатор |
Чим керує чи що визначає |
* - подавлення призначення |
Скасовує присвоювання наступного поля введення |
width – ширина поля |
Максимальне число символів, що зчитуються |
F/N |
Змінює розмір адресного аргументу: F - far покажчик; N - near покажчик |
h/l/L – модифікатори типу аргументу |
h - тип short int; l - тип long int (якщо символ типу вказує на перетворення до цілого типу); l - тип double (якщо символ типу вказує на перетворення до речовинного типу ); L - тип long double (тільки при перетвореннях до речовинного типу ) |
Таблиця 2.2 - Символи типу (<type_char>)
Сим- вол |
Очікується на вході |
Тип аргументу |
d |
Десяткове ціле |
Покажчик на тип int (int* arg) |
D |
Десяткове ціле |
Покажчик на тип long (long* arg) |
o |
Восьмирічне ціле |
Покажчик на тип int (int* arg) |
O |
Восьмирічне ціле |
Покажчик на тип long (long* arg) |
i |
Десяткове ціле |
Покажчик на тип int (int* arg) |
Продовження таблиці 2.2
Сим- вол |
Очікується на вході |
Тип аргументу |
І |
Десяткове ціле |
Покажчик на тип long (long* arg) |
u |
Десяткове ціле без знака |
Покажчик на тип unsigned int (unsigned int* arg) |
U |
Десяткове ціле без знака |
Покажчик на unsigned long (unsigned long* arg) |
x |
Шістнадцятирічне ціле |
Покажчик на int (int *arg) |
X |
Шістнадцятирічне ціле |
Покажчик на long (long *arg) |
e, E |
Речовинне число |
Покажчик на float (float *arg) |
f |
Речовинне число |
Покажчик на float (float *arg) |
g,G |
Речовинне число |
Покажчик на float (float *arg) |
s |
Рядок символів |
Покажчик на масив символів (char arg[ ]) |
c |
Символ |
Покажчик на символ (char *arg) |
Для роботи з функціями використовують глобальні та локальні перемінні. Перемінні оголошують за межами функцій або в тілі функцій з різними класами пам’яті: extern, static, auto, register. Глобальні перемінні (extern, static) ініціалізуються нульовим значенням за умовчанням і доступні в функціях. Локальні перемінні (auto, register) не ініціалізуються за умовчанням і доступні тільки в функції, де вони оголошені.
Приклад
/* ЗАНЯТТЯ N 2
Розробив Сидоров К.В.
Скласти програму для форматизованого введення і виведення
даних заданого типу відповідно до індивідуального завдання.
Виконати оголошення глобальних та локальних перемінних
заданого типу, їх введення та виведення в заданому форматі
з різними специфікаторами. Обернути дані цілого типу у
восьмирічну та шістнадцятирічну систему числення */
#include <stdio.h> //Директива препроцесора (#include) включає
#include <conio.h> //Заголовочні файли з розширенням (.h)
#include <string.h>
int a; //Оголошення глобальної (extern) перемінної типу int
int main( void ) //Головна функція
{ //Початок складеного оператора (блоку, тіла функції)
char c, buf[20]; //Оголошення локальних перемінних
char *pst = "\"slovo\""; //Оголошення локальних перемінних з
float f = 26.6; //ініціалізацією
double d;
clrscr( ); //Функція очищення екрана
printf(" Введення перемінної типу char: "); //Функція виводу на екран
fflush(stdin); //Функція очищення буфера клавіатури
scanf("%c", &c); //Функція введення даних,
printf(" Виведення перемінної типу char: ");
printf("%c\n", c);
printf("\n Введення перемінної типу int: ");
scanf("%d", &a); // & - операція узяття адреси
printf(" \t Виведення перемінної типу int\n");
printf(" Формат виведення (int): +6d #6o #8x\n");
printf("\t\t |%+6d|%#6o|%#8x|\n ", a, a, a);
printf("\n Введення перемінної типу int: ");
scanf("%d", &a);
printf("\t Виведення перемінної типу int\n");
printf(" Формат виведення (int): -6d +6d #8d\n");
printf("\t\t |%-6d|%+6d|%#6d|\n", a, a, a);
printf("\n Виведення вихідного рядка: %s\n\n", pst);
printf(" Введення рядка у масив: "); scanf("%s", buf);
printf(" Виведення рядка з масиву: %s\n\n", buf);
printf(" Введення перемінних типу float і double (через пробіл):\n");
printf("\t\t "); scanf("%f %lf", &f, &d);
printf("\t Виведення перемінних типу float і double\n");
printf(" Формат виведення (float): 10.6f 10.6e +10.6g\n");
printf("\t\t |%10.6f|%10.6e|%+10.6g|\n", f, f, f);
printf(" Формат виведення (double): 10.8lf 10.8e 10.8g\n");
printf("\t\t |%10.8lf|%10.8e|%+10.8g|\n ", d, d, d);
getche( ); //Функція введення символу з клавіатури
return 0; //Оператор повернення значення з функції (0)
} //Кінець складеного оператора (блоку, тіла функції)
/* Результат виконання програми
Введення перемінної типу char: u
Виведення перемінної типу char: u
Введення перемінної типу int: 78
Виведення перемінної типу int
Формат виведення (int): +6d #6o #8x
| +78| 0116| 0x4e|
Введення перемінної типу int: 90
Виведення перемінної типу int
Формат виведення (int): -6d +6d #8d
|90 | +90| 90|
Виведення вихідного рядка: "slovo"
Введення рядка у масив: символи 45!"#:$.;? %;?
Виведення рядка з масиву: символи 45!"#:$.;? %;?
Введення перемінних типу float and double (через пробіл):
78.89 6778.0
Виведення перемінних типу float and double
Формат виведення (float): 10.6f 10.6e +10.6g
| 78.889999| 7.889000e+01| +78.89|
Формат виведення (double): 10.8lf 10.8e 10.8g
|6778.00000000| 6.77800000e+03| +6778| */