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

УДК 004.4(075.8)

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

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

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

Рецензенти:

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

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

© В.М. Юрчишин, Б.В. Клим, М.Б. Горбаль, 2010

© ІФНТУНГ, 2010

Зміст

Вступ ______________________________________________ 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

ВСТУП

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

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

Опис засобів мови С ілюструється прикладами. Наприкінці кожного розділу даються контрольні запитання для самоперевірки.

Просимо всіх зацікавлених осіб надсилати свої відгуки та пропозиції на кафедру програмного забезпечення автоматизованих систем Івано-Франківського Національного технічного університету нафти і газу

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

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

1.1 Стандарт мови с

Мова програмування С – це універсальна, процедурна, імперативна мова програмування високого рівня загального призначення.

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

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

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

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

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

Скомпільована програма С має чотири логічно відокремлені області пам’яті. Перша з них містить виконавчий код програми. У другій області зберігаються глобальні змінні. Дві області, що залишилися – це стек (від слова stack – палиця) та область, що розподіляється динамічно. Стек використовується для зберігання допоміжних змінних під час виконання програми. Тут знаходяться адреси повернення функцій, аргументи функцій, локальні змінні та ін. Поточний стан процесора також зберігається в стеку. Область пам’яті, що розподіляється динамічно, або купа (heap) – це така вільна область, ділянки з якої програма може вибрати шляхом використання функцій динамічного розподілу пам’яті. Конкретний розподіл може бути різним залежно від типу процесора й реалізації мови.

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

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

З появою перших персональних комп’ютерів стало зрозумілим, що за ними майбутнє. Тоді й виникла гостра потреба у розробці їхнього програмного забезпечення, необхідно було швидко заповнити прогалину в нестачі насамперед системних програм. Тодішні мови програмування (Фортран, Алгол-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.

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