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

Пособие

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ КРИВОРІЗЬКИЙ ПЕДАГОГІЧНИЙ ІНСТИТУТ

ДВНЗ "КРИВОРІЗЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ"

Н. А. Хараджян

Основи

програмування мовою С

Навчальний посібник

Кривий Ріг Видавничий відділ КНУ

2012

УДК 004.422(075.8) ББК 32.973-01 Х-12

Хараджян Н.А. Основи програмування мовою С : навчальний посібник / Наталя Анатоліївна Хараджян. – Кривий Ріг : Видавничий відділ КНУ, 2012. – 200 с.

Упропонованому посібнику викладено основи програмування мовою С

увідповідності із стандартом ANSI X3.159-1989. Посібник містить необхідний теоретичний матеріал з мови програмування С з великою кількістю прикладів. Матеріал для практичних занять складається з індивідуальних та контрольних завдань, що можуть використовуватись в якості збірника задач при вивченні інших мов програмування.

Для студентів і викладачів напряму підготовки «Фізика», «Математика», «Хімія», а також для студентів непедагогічних спеціальностей молодших курсів.

Рецензенти:

В.М. Соловйов, доктор фізико-математичних наук, професор, завідувач кафедри економічної кібернетики Черкаського національного університету імені Богдана Хмельницького;

О.М. Гончарова, доктор педагогічних наук, професор, професор кафедри економічної кібернетики Таврійського національного університету імені В. І. Вернадського.

Рекомендовано кафедрою інформатики та прикладної математики КПІ ДВНЗ

"Криворізький національний університет" (протокол № 4 від

13.11.12)

вченою радою КПІ ДВНЗ "Криворізький національний університет" (протокол № _4_ від 25 грудня 2012)

© Н. А. Хараджян, 2012

2

ЗМІСТ

 

ЗМІСТ

3

...................................................................................................................

 

ВСТУП.................................................................................................................

 

6

1

ПРОГРАМУВАННЯ. ОСНОВНІ ЕТАПИ РОЗРОБКИ

 

 

ПРИКЛАДНИХ ........................................................................ПРОГРАМ

8

2

ЕЛЕМЕНТИ ...............................................................................МОВИ С

10

 

2.1 ...........................................................................

Ідентифікатори

10

 

2.2 ....................................................................................

Константи

 

11

 

2.3 .............................................................................

Ключові слова

13

 

2.4 ....................................................................................

Коментарі

 

13

3 СТРУКТУРА ..........................ПРОГРАМИ. БАЗОВІ ТИПИ ДАНИХ

14

 

3.1 .............................................................

Змінні та їх властивості

14

 

3.2 ............................................................................

Функція main()

15

 

3.3 .......................................................................

Базові типи даних

16

 

3.4 .................................................

Функції введення та виведення

18

4

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

22

 

4.1 ................................................................

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

22

 

4.2 .............................................................

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

24

 

4.3 ...................................................................

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

26

 

4.4 ..........................................................................

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

28

 

4.5 ...................................

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

28

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

29

6

ВИРАЗИ .......................................................................ТА ОПЕРАТОРИ

34

 

6.1 ...............................

Загальні поняття про вирази та оператори

34

 

6.2 ................................................................

« Порожній » оператор

35

 

6.3 ...............................................................

« Складений » оператор

35

 

6.4 ..........................................................................

Оператор ( кома )

35

 

6.5 ........................................................................

Оператор sizeof()

36

7

ОПЕРАТОРИ ......................................УПРАВЛІННЯМ ПРОГРАМИ

37

 

7.1 .......................................................................

Умовні оператори

37

 

.......................................

7.1.1

Оператор розгалуження if

37

 

........................................................

7.1.2

Оператор switch

38

 

7.2 ...............................................

Індивідуальна робота до п / п . 7.1

40

 

7.3 .......................................................................

Оператори циклів

48

 

....................

7.3.1 Оператор циклу з передумовою while

48

 

...........

7.3.2 Оператор циклу з післяумовою do … while

49

 

...................................................

7.3.3

Оператор циклу for

50

 

7.4 ............................................

Індивідуальні завдання до п / п . 7.3

54

 

7.5 ................................................

Оператори передачі управління

62

 

 

 

 

3

 

 

7.5.1

Оператор розриву break...........................................

62

 

 

7.5.2

Оператор продовження continue .............................

63

 

 

7.5.3

Оператор переходу goto...........................................

64

 

 

7.5.4

Оператор return.........................................................

64

 

 

7.5.5

Функція exit ..............................................................

65

8

МАСИВИ......................................................................................................

 

66

 

8.1

Одномірні масиви.......................................................................

66

 

8.2

Багатомірні масиви ....................................................................

68

 

8.3

Робота з діагоналями двомірного масиву................................

69

9

ПОКАЖЧИКИ............................................................................................

71

 

9.1

Загальна інформація про покажчики........................................

71

 

9.2

Ініціалізація покажчиків............................................................

72

 

9.3

Операції з покажчиками............................................................

74

 

9.4

Арифметичні операції з покажчиками.....................................

75

 

9.5

Посилання...................................................................................

76

 

9.6

Динамічні масиви.......................................................................

77

10

ОСНОВНІ АЛГОРИТМИ СОРТУВАННЯ МАСИВІВ.......................

79

 

10.1

Метод бульбашкового сортування...........................................

79

 

10.2

Сортування методом вибору.....................................................

80

 

10.3

Сортування вставками...............................................................

81

 

10.4

Швидке сортування....................................................................

82

11

ІНДИВІДУАЛЬНІ ЗАВДАННЯ ДО П. 8-10 ...........................................

83

12

ФУНКЦІЇ .....................................................................................................

 

92

 

12.1

Функції, що не повертають значення.......................................

93

 

12.2

Передача параметрів..................................................................

96

 

12.3

Рекурсивні функції.....................................................................

97

 

12.4

Додаткові можливості функції main() ....................................

100

13

ІНДИВІДУАЛЬНІ ЗАВДАННЯ ДО П. 12 ............................................

102

14

СИМВОЛЬНІ РЯДКИ.............................................................................

111

 

14.1

Основні відомості про представлення рядків........................

111

 

14.2

Функції роботи з рядками........................................................

112

15

ІНДИВІДУАЛЬНІ ЗАВДАННЯ ДО П. 14 ............................................

117

16

ТИПИ ДАНИХ, ЩО ВИЗНАЧАЮТЬСЯ КОРИСТУВАЧЕМ.........

122

 

16.1

Оператор typedef.......................................................................

122

 

16.2

Перерахування (enum) .............................................................

122

 

16.3

Структури..................................................................................

125

 

16.4

Масиви структур......................................................................

129

17

ІНДИВІДУАЛЬНІ ЗАВДАННЯ ДО П.16 .............................................

132

18

ФАЙЛОВІ ПОТОКИ ...............................................................................

139

 

18.1

Текстові файли..........................................................................

140

 

4

 

 

 

 

18.2

Двійкові файли .........................................................................

143

19

ІНДИВІДУАЛЬНІ ЗАВДАННЯ ДО П. 18 ............................................

147

20

ДИНАМІЧНІ СТРУКТУРИ ДАНИХ....................................................

148

 

20.1

Загальні відомості про динамічні структури даних..............

148

 

20.2

Лінійні списки ..........................................................................

149

 

20.3

Стеки..........................................................................................

157

 

20.4

Черги..........................................................................................

159

 

20.5

Бінарні дерева...........................................................................

161

 

20.6

Реалізація динамічних структур за допомогою масивів.......

165

21

ІНДИВІДУАЛЬНІ ЗАВДАННЯ ДО П. 20 ............................................

167

22

ДИРЕКТИВИ ПРЕПРОЦЕСОРА..........................................................

168

 

22.1

Директива # include..................................................................

168

 

22.2

Директива #define.....................................................................

170

 

22.3

Директиви умовної компіляції................................................

171

 

22.4

Директива #undef......................................................................

172

КОНТРОЛЬНА РОБОТА № 1 .....................................................................

173

КОНТРОЛЬНА РОБОТА № 2 .....................................................................

184

КОНТРОЛЬНА РОБОТА № 3 .....................................................................

192

ЛІТЕРАТУРА..................................................................................................

199

5

ВСТУП

Відповідно до навчальних планів підготовки вчителів інформатики, однією з базових дисциплін є «Алгоритмізація та програмування». Саме при її вивченні у студентів формуються знання, уміння і навички складання алгоритмів, їх опису алгоритмічними мовами і реалізації у вигляді програм. Основна увага при цьому приділяється проблемам організації структур даних, використанню оптимізованих алгоритмів для їх опрацювання.

Створенню навчального посібника з сприяло декілька причин:

зміна навчальних планів напряму підготовки «Математика», «Фізика» та «Хімія» у Криворізькому педагогічному інституті Державного вищого навчального закладу «Криворізький національний університет»;

відсутність або не відповідність наявних посібників та підручників напряму підготовки кількості годин, що відводяться на вивчення дисципліни;

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

Матеріали, що містить посібник, можуть використовуватись також для непедагогічних спеціальностей на молодших курсах. Посібник складається з теоретичного та практичного матеріалу, розділеним за логічним принципом, а тому нерівним за обсягом. Посібник містить 15 розділів теоретичного матеріалу, 9 розділів індивідуальних завдань та 3 контрольні роботи. Обсяг матеріалу розраховано на 2 семестри.

Теоретичний матеріал містить відомості з мови програмування С та налічує велику кількість прикладів, що пояснюють ту чи іншу тему. Всі програмні фрагменти у посібнику перевірені та відлагоджені, являють собою так звані «консольні додатки».

У розділах 1-4 викладено основні поняття програмування, основи мови С (її лексика, структура програми, базові типи даних, константи, вирази, змінні та основні операції).

Розділи 6-7 присвячено виразам та операторам, операторам управління програмою (умовні оператори, оператор циклів та оператори передачі управління). Значну увагу приділено програмуванню циклічних обчислень.

6

Урозділах 8, 14, 16, 18, 20 йдеться про основні структури даних

масиви, рядки, структури, перерахування, файли, а також зв’язані списки, масиви динамічного розміру.

Розділи 10, 20 присвячено класичним алгоритмам. Представлено сортування, динамічне програмування. Розділ 22 присвячено препроцесору та його використанню.

Матеріал для практичних занять (лабораторних) складається з індивідуальних та контрольних завдань. Індивідуальні завдання містять по 25 варіантів, кожний з яких складається з 3-4 завдань різної складності, що дає можливість диференційного оцінювання знань та вмінь. Завдання підібрані з урахуванням можливостей їх виконання студентом за передбачений навчальним планом час. Останні три індивідуальні завдання мають наскрізну сюжетну лінію, а не є сукупністю випадкових завдань. Завдання можуть використовуватись в якості збірника задач при вивченні інших мов програмування.

Укінці посібника наведено завдання для контрольних робіт. Перша контрольна робота проводиться наприкінці першого семестру вивчення дисципліни, друга контрольна робота на початку другого семестру для актуалізації отриманих знань в попередньому семестрі. Третя контрольна робота розроблена для оцінення результатів навчальної діяльності студентів за курс.

При створені посібника був використаний власний досвід викладання курсу програмування в педагогічному інституті, протягом 10 років та література, перелік якої наведено в кінці посібника.

7

1 ПРОГРАМУВАННЯ.

ОСНОВНІ ЕТАПИ РОЗРОБКИ ПРИКЛАДНИХ ПРОГРАМ

Під програмуванням розуміють представлення в деякій символічній формі певного алгоритму. В якості символічної форми може використовуватися будь-яка мова спілкування, спеціально створена штучна мова, набір графічних знаків.

Алгоритмом прийнято вважати деяку послідовність команд або набір систематизованих правил виконання обчислювального процесу, що обов’язково приводить до розв’язання класу задач після скінченого числа операцій. При написанні програм алгоритм описує логічну послідовність операцій [14].

Розглянемо деякі етапи розробки прикладних програм. Постановка задачі. На цьому етапі формулюється проблема і

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

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

Розв’язання математичної моделі. Якщо математичні співвід-

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

Побудова алгоритму розв’язку. Часто одну і ту ж задачу можна розв’язати різними способами. Отримавши різні алгоритми, звичайно обирається найефективніший з них. В якості критерію ефективності вибирається час виконання, точність отриманого результату, використання системних ресурсів. Оскільки час роботи суттєво залежить від машини, на якій реалізується алгоритм, то швидкодію алгоритму прийнято оцінювати в кількості так званих „важких" операцій. Під «важкими» розуміють ті операції, на які процесор витрачає більше часу та ресурсів. Для математичних задач – операції множення, ділення та звернення до функції, для задач обробки структур даних – операція порівняння, для задач системного програмування процесора

– операція пересилки даних.

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

8

Крім оцінки ефективності алгоритму встановлюють такі властивості, як стійкість та коректність, а для алгоритмів послідовних наближень ще й збіжність.

Під стійким алгоритмом розуміють такий алгоритм, що при значній змінні вхідних даних незначно змінює результат.

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

Проаналізувавши всі параметри, вибирається найбільш ефективний.

У будь-якому випадку алгоритм повинен будуватися без орієнтації на якусь конкретну мову програмування.

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

а) можливостями мови; б) наявністю матеріальних ресурсів та апаратних засобів.

При програмуванні проводиться верифікація програм та їх оптимізація. Це ніби продовження аналізу ефективності алгоритму та покращення за рахунок можливостей певної мови програмування.

Під верифікацією розуміється правильність програми.

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

9

2 ЕЛЕМЕНТИ МОВИ С

Будь-яка мова (українська, російська, англійська, французька та інші) складається з декількох основних елементів – символів, слів, словосполучень і речень. В алгоритмічних мовах програмування існують аналогічні структурні елементи, тільки слова називаються лексемами, словосполучення – виразами, а речення – операторами [1].

Мова С складається з наступних 3 основних груп:

лексеми, або елементарна конструкція, – мінімальна одиниця мови, що має самостійний зміст;

вираз являє собою послідовність операторів та операндів для обчислення значення;

оператор, що задає кінцевий опис деякої дії.

Алфавіт мови, або її символи – це основні неподільні знаки, за допомогою яких пишуться всі тексти на мові програмування [23].

Алфавіт мови С включає :

великі та малі літери латинської абетки;

арабські цифри від 0 до 9;

символи ! " # % * ' ( ) * + , – . / : ; < = > ? [ \ ] ^ { | } ~.

Із символів алфавіту формуються лексеми мови:

ключові слова;

ідентифікатори;

константи;

– оператори ([ ] ( ) . -> ++ –– & * – ~ ! sizeof / % << >> < > <= >= == != ^ | || & : = *= /= %= += –= <<= >>= &= ^= |= , # ##);

– розділові знаки ( [ ] ( ) { } * , : = ; … #).

Межі лексем визначаються іншими лексемами, такими, як роздільники або знаки операцій.

2.1Ідентифікатори

Ідентифікатор – це синонім слова «ім’я», використовується для йменування різних об’єктів: змінних, констант, міток, функцій тощо. При записі ідентифікаторів можуть використовуватися великі та малі літери латинської абетки, арабські цифри та символ підкреслення. Ідентифікатор не може починатися з цифри і не може містити пробілів. Ключові слова не можуть бути ідентифікаторами. В якості ідентифікатора не можна використовувати імена стандартних функцій

[5].

10