Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnyk_C_sum.doc
Скачиваний:
9
Добавлен:
29.08.2019
Размер:
1.63 Mб
Скачать

УДК 004.4(075.8)

В.М. Юрчишин, Б.В. Клим, В.Б. Кропивницька, Т.В. Дитко. Програмування. Навчальний посібник – Івано-Франківськ: ІФНТУНГ, 2012 – 136 с.

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

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

Рецензенти:

д.т.н., проф., зав. каф. інформатики ІФНТУНГ Д.Ф.Тимків,

к.т.н., доц. каф. інформатики Прикарпатського Національного університету ім. В. Стефаника Горєлов В.О.

© В.М. Юрчишин, Б.В. Клим, В.Б. Кропивницька, Т.В. Дитко, 2012

© ІФНТУНГ, 2012

Зміст

Вступ ______________________________________________ 4

1 Загальні поняття _____________________________________ 5

1.1 Мови програмування _________________________________ 5

1.2 Алгоритм і його властивості __________________________ 9

1.3 Системи числення __________________________________ 10

2 Засоби мови С _____________________________________ 13

2.1 Алфавiт мови ______________________________________ 13

2.2 Константи ________________________________________ 14

2.3 Простi змiннi ______________________________________ 15

2.4 Оголошення даних _________________________________ 16

2.5 Стандартні функцiї _________________________________ 23

2.6 Опеpацiї __________________________________________ 23

2.7 Виpази ____________________________________________ 28

2.8 Опеpатоpи ________________________________________ 29

3 Структура програми, директиви препроцесору _________ 30

4 Елементарні алгоритми _____________________________ 32

4.1 Лiнiйна програма __________________________________ 32

4.2 Розгалуження _____________________________________ 39

4.3 Цикли ___________________________________________ 52

5 Вкладені алгоритми ________________________________ 65

6 Складні типи даних ________________________________ 73

7 Процедури ________________________________________ 87

8 Операції над бітами ________________________________ 97

9 Файли ___________________________________________ 108

10 Зв’язані списки ____________________________________ 126

Перелік використаних джерел _______________________ 136

ВСТУП

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

Текст навчального посібника складається з 17 розділів. Наприкінці розділів даються контрольні запитання для самоперевірки.

Автори вдячні колективу кафедри програмного забезпечення автоматизованих систем Івано-Франківського Національного технічного університету нафти і газу, на науково-методичному семінарі якої розглядався зміст посібника, а також студентам напрямків підготовки “Програмна інженерія” та “Комп’ютерна інженерія” за увагу до нього та цінні поради і зауваження.

1 ОСНОВНІ ПОНЯТТЯ

1.1 Алгоритм і його властивості

Хід виконання будь-якої роботи можна представити у вигляді послідовності елементарних операцій, яку називають алгоритмом. Алгоритм будують для певного виконавця, який має свою власну систему команд і може їх розпізнавати та виконувати, тому алгоритм – це послідовність команд виконавця.

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

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

Слово алгоритм походить від аль-Хорезмі – імені арабського математика, який жив у ІХ ст. в м. Хіва (нині обласний центр на півночі Узбекистану). Він відомий тим, що розробив послідовність виконання чотирьох арифметичних операцій: додавання, віднімання, множення і ділення так, як ми це виконуємо зараз. У ХІV ст. цю послідовність дій почали застосовувати в Європі і назвали її алгоритмом. До того європейці виконували цю роботу настільки складно, що її міг виконувати тільки кваліфікований спеціаліст. У ХІХ ст. поняття алгоритму було поширено на будь-яку послідовність операцій.

Алгоритм має такі властивості:

  1. масовість. Алгоритм, побудований для розв’язання однієї задачі, повинен бути придатним для всіх задач даного класу;

  2. результативність. Обов’язково повинна бути досягнена поставлена мета;

  3. дискретність. Алгоритм повинен складатися з дискретних команд виконавця;

  4. однозначність. Кожна команда повинна бути чітко й однозначно визначена.

Будь-який алгоритм можна розчленити на такі три елементарні: лінійний, розгалужений і циклічний. Складні алгоритми містять вкладені один в одного елементарні алгоритми, найчастіше це вкладені цикли та розгалуження в циклі.

1.2 Мови програмування

Мова програмування відрізняється від звичайних мов насамперед тим, що її повинен розуміти комп’ютер. Обчислювальна машина має свою внутрішню, машинну мову, якою пишуться команди та дані, які обробляються цими командами. Машинна мова являє собою набір до декількох десятків порівняно простих і часто малозрозумілих команд. Наприклад, найпростіша машина має лише такі дві команди: логічне “І” та “НЕ”. Машинна мова базується на двійковій системі числення, тому програма, яка знаходиться в пам’яті обчислювальної машини і яку вона виконує, має лише два символи: нуль і одиниця. Зрозуміло, що така програма надзвичайно трудомістка, вона вимагає затрат величезної кількості часу і праці як на її складання, так на налагодження. Особливих труднощів додає й те, що текст програми, яка вже виконалася і ще знаходиться в пам’яті і яку часто потрібно прочитати, проаналізувати, знайти помилку та виправити, суттєво відрізняється від того тексту, який ввели в машину спочатку. Під час виконання програми машина команди модифікує, а дані змінює, розібратися в такій програмі іноді просто неможливо.

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

Використання компілятора має свої особливості. Зрозуміло, що це автомат, машина, тому скомпільована програма буде набагато довша, а значить займе більший об’єм оперативної пам’яті і буде довше виконануватися, ніж написана безпосередньо в машинних кодах. Наприклад, компілятор мови PL/1 виготовляє програму довшу приблизно в 4 – 5 разів. Це особливо важливо враховувати при складанні системних програм. Вони керують ходом виконання прикладних програм, які працюють на їх тлі, тому не повинні забирати від них забагато ресурсів: пам’ять та час на виконання.

За ступенем близькості до машинної алгоритмічні мови поділяють на мови низького та високого рівня. Близькими до машинної мови низького рівня є асемблери, скомпільовані ними програми майже не відрізняються від програм, складених безпосередньо в машинних кодах. Однак, вони не набагато скорочують затрати праці програміста. До мов високого рівня належать такі як Pascal, C, Java та ін.

Програма, складена мовою С, називається початковим або програмним модулем. Iм’я файлу, де вiн буде записаний має розширення *.c (операційної системи Windows). Для виконання на ПЕОМ вона повинна пройти двi стадiї: компiляцiю i редагування зв’язкiв. Результатом компiляцiї є об’єктний модуль (має розширення *.obj), який являє собою набiр машинних команд вiдповiдних операторам програми. Пiд час редагування мiж окремими дiльницями об’єктного модуля встановлюються зв’язки, пiд’єднуються зовнiшнi функцiї, призначаються конкретнi їхні адреси. Кiнцевим продуктом редагування є завантажний модуль (exe-файл).

Мову С (читається сі) розробила фiрма Bell Laboratories (США) в 1972 р., головне її призначення – забезпечити програмiста мовними засобами, якi об’єднують можливостi асемблера та мов високого рiвня. Виготовлена досвідченим програмістом програма мовою С після компіляції виходить лише приблизно на 10% довшою, ніж складена в машинних кодах.

Час її появи можна вважати переломним як у розвитку обчислювальних машин, так і їх програмного забезпечення. Найбільш поширеними в світі були тоді так звані IBM-сумісні комп’ютери, такі як IBM-370, ЕС-1035 та інші. Вони мали суттєві недоліки, зокрема, дорого коштували (по декілька мільйонів доларів), займали порівняно великі площі тих приміщень, де їх установлювали (сотні квадратних метрів), споживали багато енергії. Ставилися особливі вимоги до температури та вологості повітря приміщень, вимагалася висока кваліфікація обслуговуючого персоналу та ін. Проте, вони вже встигли продемонструвати переваги комп’ютерної техніки. На багатьох підприємствах нафтогазової галузі діяли автоматизовані та автоматичні системи управління, розв’язувалися задачі наукового характеру. Було розроблено велику кількість системних та прикладних програм.

З появою перших персональних комп’ютерів стало зрозумілим, що за ними майбутнє. Тоді й виникла гостра потреба у розробці їхнього програмного забезпечення, необхідно було швидко заповнити прогалину в нестачі насамперед системних програм. Тодішні мови програмування (PL/1, FORTRAN, Алгол-60 та ін.) не задовільняли нові вимоги. Крім того, змінилася елементна база обчислювальних машин, а значить і машинні команди, тому старі програми не могли на них виконуватися. Ці обставини й створили передумови для розробки нових алгоритмічних мов, у т. ч. мови С.

Мова С володiє рядом особливостей, зокрема такими:

  • має повний набiр конструкцiй структурного програмування, модульнiсть, блочну структуру програм, роздiльну компiляцiю;

  • наявнi розвиненi засоби побудови складених об’єктiв: масивiв, структур, об’єднань, даних перерахункового типу;

  • реалiзованi деякi операцiї низького рiвня, операцiї над бiтами;

  • базовi типи даних вiдображають байти, машиннi слова, символи, тобто об’єкти обробки мовою асемблер;

  • має механiзм вказівникiв на змiннi i функцiї, що дозволяє працювати безпосередньо з адресами пам’ятi;

  • є можливiсть пiдвищення ефективностi програм завдяки вiдсутностi жорстких обмежень на перетворення типiв даних;

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

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

З момента появи мова С постійно розвивалася, появилося багато її версiй, тому виникла потреба в стандарті, який був би забезпечений у будь-якій версії. Спочатку загальноприйнятим стандартом мови С вважалася книга Б. Кернігана і Д. Рітчі “Мова програмування С”. Це була одна з перших книг про С, випущена ще в 1978 році. Згодом описану в ній мову назвали класичним С, проте вона мала недоліки, зокрема відсутність опису бібліотеки. Вище в переліку особливостей мови було сказано, що багатство стандартних функцiй робить її незалежною вiд реалiзацiї операцiйної системи та архiтектури комп’ютера. Але тоді мова С стає залежною від своєї бібліотеки більше, ніж інші мови, тому виникає необхідність у стандарті й на бібліотеку.

Перший стандарт мови С разом з бібліотекою був запропонований у 1989 році ANSI (American National Standarts Institute – Національний інститут зі стандартизації США). В 1990 році цей стандарт був прийнятий ISO (International Organization for Standartization – Міжнародна організація з стандартизації). Ці стандарти називають відповідно С89 або С90, хоча по суті вони однакові (ISO/IEC 9899:1990). Пізніше з’явився стандарт С99 (ISO/IEC 9899:1999).

Стандарт C99 ввів декілька таких нових особливостей:

  • забезпечується вкладення функції;

  • змінні можна оголошувати в будь-якому місці програми;

  • введено нові типи даних, зокрема long long int, явний логічний (булевий) і комплексний для оголошення комплексних чисел;

  • дозволено обробляти масиви даних змінної довжини;

  • підтримуються короткі однорядкові коментарі, які починаються з двох знаків прямий слеш (//);

  • додано нові бібліотечні функції;

  • введено нові заголовкові файли, такі як stdbool.h та inttypes.h;

  • вдосконалена підтримка стандарту IEEE, який регламентує обробку чисел з пересувною крапкою.

C99 сумісний з C90, однак, має деякі відмінності; зокрема, якщо в декларації ідентифікатора невистачає специфікатора типу, змінна чи функція надалі не сприймається оголошеною за замовчуванням як int. Комітет стандартів вирішив за доцільне, щоб компілятор діагностував опущення програмістом специфікатора типу. Деякі сучасні компілятори, діагностуючи таке опущення, все-таки приймають змінну оголошеною як int. Однією з особливостей стандарту С99 є забезпечення роботи програм на 64-розрядних комп’ютерах.

Практично всі компілятори C, зокрема GCC та інші, наразі підтримують багато з нових можливостей C99. Проте, ці можливості меншою мірою підтримуються компіляторами таких компаній, як Microsoft і Borland, котрі зосередилися переважно на C++ з тих пір, як C++ забезпечує подібну до С функціональність.

Стандарти регулярно обновлюються і доповнюються відповідними робочими групами спеціалістів. На даний момент діє опублікована в 2007 році версія ISO/IEC 9899:1999 TC3 стандарту С99. Кожна нова версія стандарту відміняє і замінює попередні.

За назвою версії можна знайти опис стандарту в мережі Internet.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]