Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Навчальний посібник
Предмет:
Програмування

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ Івано-Франківський національний технічний університет нафти і газу В. М. Юрчишин, Б. В. Клим, В. Б. Кропивницька ПРОГРАМУВАННЯ НАВЧАЛЬНИЙ ПОСІБНИК Івано-Франківськ 2012 УДК 004.4(075.8) ББК 22.18 Ю 83 Рецензенти: Литвинов В. В., доктор технічних наук, професор, завідувач відділу № 120 Інституту проблем математичних машин і систем НАН України, Тимків Д. Ф., доктор технічних наук, професор, завідувач кафедри інформатики ІФНТУНГ, Федорук П. І., доктор технічних наук, професор, завідувач кафедри інформаційних технологій Прикарпатського національного університету ім. В. Стефаника Юрчишин В. М. Ю 83 Програмування: навчальний посібник / В. М. Юрчишин, Б. В. Клим, В. Б. Кропивницька. – Івано-Франківськ: ІФНТУНГ, 2012. – 188 с. ISBN Навчальний посібник розроблений відповідно до робочої програми навчальної дисципліни “Основи програмування”. Містить загальні короткі відомості з основ програмування та опис засобів мови програмування С. Розглядаються окремі прийоми програмування, які демонструються на прикладах програм, зокрема з нафтогазової тематики. Подаються запитання для самоперевірки. Посібник призначений для засвоєння прийомів програмування та отримання практичних навичок складання програм під час лабораторних і практичних занять та самостійної підготовки студентами першого курсу за напрямом підготовки 6.050103 – “Програмна інженерія” і може бути використаний студентами інших спеціальностей. УДК 004.4(075.8) ББК 22.18 ISBN © В. М. Юрчишин, Б. В. Клим, В. Б. Кропивницька, © ІФНТУНГ, 2012 ЗМІСТ Вступ _____________________________________________ 4  1 Основні поняття ____________________________________ 5  1.1 Мови програмування ________________________________ 5  1.2 Системи числення __________________________________ 9  1.3 Алгоритм і його властивості _________________________ 10 12  2 Засоби мови С _____________________________________ 14 14  3 Структура програми, директиви препроцесору _________ 31 31  4 Елементарні алгоритми _____________________________ 33 33  4.1 Лiнiйна програма __________________________________ 34 33  4.2 Розгалуження _____________________________________ 40 40  4.3 Цикли ____________________________________________ 53  5 Бітові операції _____________________________________ 68  6 Вкладені алгоритми ________________________________ _ 80 78  7 Складні типи даних ________________________________ 88 86  8 Обробка літерних рядків і дати _____________________ 102  8.1 Рядки літер ________________________________________ 102  8.2 Дата і час _________________________________________ 105  9 Процедури ________________________________________ 112 110  10 Файли ____________________________________________ 124  11 Динамічні конструкції даних _________________________ 143  11.1 Зв’язані списки ____________________________________ 143  11.2 Стеки _____________________________________________ 151  11.3 Черги _____________________________________________ 153  12 Сортування ________________________________________ 157  12.1 Методи сортування _________________________________ 157  12.2 Сортування масиву структур _________________________ 167  12.3 Сортування зв’язаного списку ________________________ 169  13 Пошук ____________________________________________ 174  13.1 Алгоритми пошуку _________________________________ 174  13.2 Використання допоміжного масиву структур для пошуку _ 176  14 Класи ____________________________________________ 180  14.1 Приклад програмування класу ________________________ 180  14.2 Особливості класу __________________________________ 184   Перелік рекомендованих джерел _____________________ 188   ВСТУП Під час розробки цього посібника автори ставили за мету привернути увагу програмістів-початківців до багатства засобів програмування та можливостей їх використання на підприємствах нафтогазової галузі. Значна його частина присвячена засвоєнню окремих прийомів програмування загального призначення. Розглядаються способи програмної реалізації деяких найбільш поширених алгоритмів і задач, таких як сортування, пошук даних, обробка текстів та ін. Демонструється дослідницький підхід до побудови алгоритмів розв’язування задач та способів їх програмної реалізації. Опис засобів програмування ілюструється прикладами програм мовою С. Текст навчального посібника складається з 14 розділів. Наприкінці розділів даються контрольні запитання для самоперевірки. Автори вдячні колективу кафедри програмного забезпечення автоматизованих систем Івано-Франківського національного технічного університету нафти і газу, на науково-методичному семінарі якої розглядався зміст посібника, а також студентам напряму підготовки “Програмна інженерія” за увагу до нього та цінні поради і зауваження. 1 ОСНОВНІ ПОНЯТТЯ 1.1 Мови програмування Мова програмування відрізняється від звичайних мов насамперед тим, що її повинен розуміти комп’ютер. Обчислювальна машина має свою внутрішню, машинну мову, якою пишуться команди та дані, що обробляються цими командами. Машинна мова являє собою набір до декількох десятків порівняно простих і часто малозрозумілих команд. Наприклад, найпростіша машина має лише такі дві команди: логічне “І” та “НЕ”. Машинна мова базується на двійковій системі числення, тому програма, яку занесли в пам’ять обчислювальної машини і яку вона виконує, має лише два символи: нуль і одиниця. Зрозуміло, що така програма надзвичайно трудомістка, вона вимагає затрат величезної кількості часу і праці як на її складання, так на налагодження. Особливих труднощів додає й те, що текст програми, яка вже виконалася, але ще перебуває в пам’яті і яку часто потрібно прочитати, проаналізувати, знайти помилку та виправити, суттєво відрізняється від того двійкового коду, який ввели в машину спочатку. Під час виконання програми машина модифікує команди, а дані змінює, розібратися в такій програмі іноді просто неможливо. Для полегшення роботи програміста служать спеціальні програми, які називаються трансляторами, вони перекладають програму, написану однією мовою, на еквівалентну іншою. В свою чергу, транслятори поділяються на інтерпретатори та компілятори. Використовуючи їх, програміст має можливість писати програму алгоритмічною мовою, близькою до тих, якими люди спілкуються між собою. Інтерпретатор служить для покомандного перекладу команд з алгоритмічної мови на внутрішню мову машини, написану двійковими машинними кодами. При цьому кожна команда окремо виконується, проте не запам’ятовується, при повторному запуску програми вона інтерпретується заново. Інтерпретатор вигідно використовувати на початковій стадії побудови складної програми, яку часто доводиться змінювати та доповнювати. Компілятор читає програму, складену початковою мовою, перекладає у двійковий код та запам’ятовує у вигляді спеціального файлу. Використання компілятора має свої особливості. Зрозуміло, що це автомат, машина, тому скомпільована програма буде набагато довша, а значить займе більший об’єм оперативної пам’яті і буде довше виконануватися, ніж написана безпосередньо в машинних кодах. Наприклад, компілятор мови 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й, тому виникла потреба в стандарті, який був би забезпечений у будь-якій версії. Спочатку загальноприйнятим стандартом мови С вважалася книга Б. Кернігана і Д. Рітчі “Мова програмування С”. Це була одна з перших книг про С, випущена ще в 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. 1.2 Системи числення Система числення – це сукупність правил запису чисел та виконання над ними певних дій. Мова С широко використовується для розв’язку задач системного та низькорівневого програмування, тому однією з необхідних умов програмування є розуміння порядку представлення чисел та правил конвертації числових даних у різних системах числення. Для представлення чисел використовують спеціальні знаки, наприклад, цифри. За вагою кожного знака розрізняють два види систем числення: позиційні та непозиційні. У позиційних системах числення кожний розряд числа має власну вагу, наприклад, у числі 2008 наймолодший розряд (цифра 8) визначає кількість одиниць, друга – десятків і т. д. Прикладом непозиційної систем числення є римська, в якій те ж число 2008 буде виглядати як MMVIII. Тут три наймолодші розряди (знаки I) мають однакову вагу, кожний з них дорівнює одиниці. А кожна з двох перших цифр (ММ) означає одну тисячу, хоча знаходяться вони в різних місцях (розрядах) числа. Сьогодні широко вживається позиційна десяткова система числення, основою якої є число 10. У процесі розвитку людства використовувалися й системи з іншими основами, наприклад, дюжина дорівнює 12 одиниць, година складається з 60 хвилин та інші. В техніці найчастіше застосовуються позиційні системи числення, бо вони дозволяєть спростити автоматизацію обчислювального процесу за рахунок упорядкованості ваги розрядів. У сучасних цифрових обчислювальних машинах використовується двійкова система числення, яка має лише два знаки (дві цифри): 0 і 1, що дозволяє найпростіше її технічно реалізувати: 1 – є електрична напруга, 0 – немає, при цьому не вимагається висока стабільність напруги. Найменший об’єм пам’яті, де записано 0 або 1, називається один біт, 8 біт складають 1 байт. Процес запам’ятовування чисел комп’ютером можна показати на прикладі електронного пристрою, який називається тригером. Він має один вхід і два виходи, стійких стани: Q1 = 1 та Q2 = 0. Якщо на вхід тригера подати електричний імпульс, то його стани зміняться на протилежні, тобто Q1 = 0, а Q2 = 1. Таким чином, тригер – це елементарна комірка пам’яті, об’єм якої дорівнює один біт. З’єднавши послідовно декілька тригерів, одержимо комірку пам’яті, де в двійковій системі числення буде знаходитися число імпульсів, поданих на вхід першого тригера. За допомогою тригерів можна також забезпечити трійкову систему числення, яка вважається оптимальною. Її три цифри 0, 1, 2 фізично можна представити як -1, 0 і 1. У програмуванні мовою С, крім десяткових, часто приходиться обробляти цілі числа двійкової системи числення. Для перекладу цілого десяткового числа в двійкове необхідно його та всі результати першого ділення поділити на 2. Першою цифрою двійкового числа буде результат останнього ділення, решта – всі залишки від ділення від першого до останнього Продемонструємо хід роботи на перекладі числа 18. 18:2=9, залишок: 0; 9:2=4, залишок: 1; 4:2=2, залишок: 0; 2:2=1, залишок: 0; останній результат ділення на 2: 1. Одержане двійкове число дорівнюватиме 10010, для перевірки результату перекладемо його назад у десяткову систему числення. Для цього помножимо кожний розряд на 2і , де 2 – основа двійкового числа,  (нумерація розрядів починається з крайнього правого), n – кількість розрядів (тут n=5), і додамо всі результати множення. Отже, 1×24+0×23+0×22+1×21+0×20=16+0+0+2+0=18. Якщо число дійсне, то його цілу і дробову частину перекладають окремо. Під час перекладу дробової частини числа її багаторазово послідовно множать на два, а цілі результати цього множення читають зверху до низу. Нижче подано приклад перекладу десяткового числа 0,2 у двійкову систему числення: 0,2 × 2 = 0,4, ціла частина множення дорівнює 0; 0,4 × 2 = 0,8, ціла частина множення дорівнює 0; 0,8 × 2 = 1,6, ціла частина множення дорівнює 1; 0,6 × 2 = 1,2, ціла частина множення дорівнює 1; 0,2 × 2 = 0,4, ціла частина множення дорівнює 0 і т. д. Тоді одержимо: 0,2 десяткове = 0,(0011) двійкове – періодичний дріб. Оскільки довжина комірки машинної пам’яті фіксована, то число 0,2 буде представлено неточно, його “хвіст” буде відкинений. Покажемо це на прикладі, перекладемо число 0,2 назад у десяткову систему числення, взявши лише його перші 4 розряди, тоді: 0×2-1+0×2-2+1×2-3+1×2-4=0+0+1/8+1/16=3/16=0,1875. Дії над двійковими та іншими числами відбуваються подібно до десяткових, лише враховується те, що під час виконання операції додавання переповнення молодшого розряду настає при досягненні основи. Якщо в десятковій системі числення переповнення молодшого та додавання одиниці до старшого розряду відбувається при десятій одиниці, то в двійковій – при другій. Наприклад, додамо два десяткові числа 15+3=18 у двійковому представленні: 1111 +11 =10010 Відповідно при відніманні “позичений” сташий розряд “розмінюється” на кількість одиниць основи. Покажемо приклад віднімання двох чисел: 18-15=3. Тоді в двійковій системі числення матимемо такий результат: 10010 -1111 =11 Поряд із десятковою та двійковою в програмах мовою С застосовують вісімкову та шістнадцяткову системи числення, основою яких є числа відповідно 8 і 16. Вони утворюються з десяткових цифр, а якщо цифр замало, то й букв А, B, C, D, E, F. Наприклад, у 16-й системі числення число С=12 десяткових одиниць. Ці системи вигідні тим, що спрощують переклад своїх чисел у двійкові та навпаки за рахунок кратності. Нехай, наприклад, десяткове число дорівнює 23. Перекладемо його в вісімкову систему числення. 23:8=2, залишок дорівнює 7, отже, вісімкове число дорівнює 27. Представимо його двійковими тріадами, для цього кожну цифру перекладемо у двійкову систему числення. Тоді одержимо дві тріади: 010 111, а, відкинувши зайвий нуль у старшому розряді, матимемо двійкове число 10 111. Перевірка: 1*24+0*23+1*22+1*21+1*20=16+0+4+2+1=23. 1.3 Алгоритм і його властивості Хід виконання будь-якої роботи можна представити у вигляді послідовності елементарних операцій, яку називають алгоритмом. Алгоритм будують для певного виконавця, який має свою власну систему команд і може їх розпізнавати та виконувати, тому алгоритм – це послідовність команд виконавця. Алгоритм може мати різні ступені деталізації. Якщо виконавець – комп’ютер, то алгоритмом для нього буде програма, записана в машинних кодах, тоді буде досягнено найвищого ступеня деталізації. Програма, написана алгоритмічною мовою, теж алгоритм, але з меншим ступенем деталізації, він призначений для компілятора. Як правило, алгоритм представляють у графічному вигляді. Графічний алгоритм будують за допомогою спеціальних графічних символів, кожний з яких означає певну дію, вони стандартизовані. Слово алгоритм походить від аль-Хорезмі – імені арабського математика, який жив у ІХ ст. в м. Хіва (нині обласний центр на півночі Узбекистану). Він відомий тим, що розробив послідовність виконання чотирьох арифметичних операцій: додавання, віднімання, множення і ділення так, як ми це виконуємо зараз. У ХІV ст. цю послідовність дій почали застосовувати в Європі і назвали її алгоритмом. До того європейці виконували цю роботу настільки складно, що її міг виконувати тільки кваліфікований спеціаліст. У ХІХ ст. поняття алгоритму було поширено на будь-яку послідовність операцій. Алгоритм має такі властивості: масовість. Алгоритм, побудований для розв’язання однієї задачі, повинен бути придатним для всіх задач даного класу; результативність. Обов’язково повинна бути досягнена поставлена мета; дискретність. Алгоритм повинен складатися з дискретних команд виконавця; однозначність. Кожна команда повинна бути чітко й однозначно визначена. Будь-який алгоритм можна розчленити на такі три елементарні: лінійний, розгалужений і циклічний. Складні алгоритми містять вкладені один в одного елементарні алгоритми, найчастіше це вкладені цикли та розгалуження в циклі. Запитання для самоперевірки Поясніть терміни: машинна мова, транслятор, інтепретатор, компілятор. Назвіть властивості мов програмування високого рівня, перелічіть та поясніть особливості мови С. Що таке система числення? Що таке позиційні та непозиційні системи числення? Які системи числення найчастіше використовуються в обчислювальній техніці і обгрунтуйте чому? Як перекладаються числа з однієї системи числення в іншу? Як виконуються арифметичні операції над числами, представленими в різних системах числення? Що таке алгоритм і які він має властивості? Перелічіть типи елементарних алгоритмів. 2 ЗАСОБИ МОВИ С Алфавiт мови. До алфавiту належать: латинськi букви великi та малi: a, b, c, ... , z, A, B, C, ..., Z; десятковi цифри вiд 0 до 9; роздiлювачi, вони показанi в таблицi 2.1; пробiльнi символи, які показані в таблиці 2.2, вони починаються з символа зворотній слеш. У програмі виконують керівні функції. Таблиця 2.1 – Розділювачі Символ Назва символа Символ Назва символа  , Кома ! Знак оклику  . Крапка : Двокрапка  | Вертикальна риска / Прямий слеш  ; Крапка з комою \ Зворотнiй слеш  ? Знак запитання ~ Тiльда  ' Апостроф _ Пiдкреслення  $ Знак долара " Лапки  ( Лiва кругла дужка # Знак номера (дієз)  ) Права кругла дужка % Процент  { Лiва фiгурна дужка & Амперсанд  } Права фiгурна дужка ^ Стрiлка вверх  [ Лiва квадратна дужка - Мiнус  ] Права квадратна дужка + Плюс  < Менше = Дорiвнює  > Бiльше * Зiрочка (множення)   Таблиця 2.2 – Пробільні символи Символ Назва символа Символ Назва символа  \a Попередження (звук) \v Вертикальна табуляція  \b На один знак вліво \t Горизонтальна табуляція  \f На наступну сторінку \r Кінець рядка  \n На новий рядок \0 Нуль   Константи. Особливістю констант є те, що вони не можуть бути змінені в процесі виконання програми. За способом використання в програмі розрізняють два види констант: іменовані (мають ім’я) та неіменовані. Неіменовані константи спеціально не оголошуються, вони подiляються на числа (цiлi або дійсні), символьнi (одинарний символ, лiтера) та рядковi (рядок символiв). На відміну від деяких інших мов програмування, перші версії мови С не мали констант логічного типу (true i false), вони були додані лише стандартом C99. Цiлi константи є десятковi, вiсiмковi i шiстнадцятковi. Для їх розрiзняння вiсiмкова константа доповнюється спереду символом 0 (нуль), а шiстнадцяткова – 0x (нуль iкс). Кожна константа займає об’єм пам’ятi, потрiбний для її зберiгання. Цю пам’ять можна розширити за допомогою букв u (unsigned – беззнаковий) та l (long – довгий), якi ставляться наприкiнцi константи. Приклади цiлих констант: 11 – 10-ва, містить 11 десяткових одиниць; 11l – 10-ва, містить 11 десяткових одиниць, але займає вдвоє більше пам’яті; 017 – 8-ва, містить 15 десяткових одиниць (1*81+7*80 =15); 0x2C – 16-ва, має 44 десятковi одиницi (2*161+12*160 = 44). Дiйсні числа можуть бути записані в формі з фіксованою або пересувною крапкою. Перші складаються з цiлої i дробової частин, роздiлених крапкою, наприклад, 12.75, 7.2. Якщо ціла частина числа дорівнює нулю, то вона може бути опущена, наприклад, число 0,025 можна записати як .025. Числа з пересувною крапкою складаються з мантиси і порядку, розділених символом e. Наприклад, число 0,025 можна записати в формі з пересувною крапкою як 2,5*10-2, тоді в тексті програми воно набуде такого вигляду: 2.5e-2. Число з пересувною крапкою може мати нормалізований вигляд. Тоді воно дробове і менше за одиницю, а перша цифра після крапки – значуща. Наприклад, число 0,025 запишеться так: 0.25e-1. Символьна константа – це символ, взятий у апострофи, наприклад: 'А', '*', 'Ю', 'щ'. Є константи, якi складаються з двох лiтер, наприклад, вищеописані пробільні символи. Символьний рядок являє собою послiдовнiсть символiв, взятих у подвійні лапки. Ознакою кiнця рядка є нуль ('\0'), який додається до рядка автоматично пiд час компiляцiї програми. Приклад рядка: "Полюс-123#". Прості змiннi. Змiннi можуть приймати значення констант вiдповiдного типу. Iм’я змiнної позначають за допомогою iдентифiкатора, який являє собою набiр букв латини, цифр i символа пiдкреслювання. Iм’я повинно починатися з букви або символа підкреслювання. Перші версії мови С дозволяли використовувати лише 8 символів для побудови ідентифікаторів, стандарт С90 – до 31, а С99 – до 63. Не варто захоплюватися ні одним, ні двома символами підкреслювання на початку слова, це не буде помилка, але сучасні операційні системи та компілятори С використовують їх для утворення службових слів, тому не слід додавати їм зайвої роботи. Іноді може статися конфлікт імен. Як правило, імена змінних підбирають так, щоб вони відповідали фізичному змісту задачі, яка розв’язується програмою, таку програму легше читати та налагоджувати. Кожна змінна займає певну комірку пам’яті (певну кількість байт) комп’ютера і під час компіляції програми її ім’я перетворюється на адресу пам’яті, яка виділена для неї, тому довгі імена не збільшують витрат пам’яті на їх зберігання. Проте, без особливої необхідності не варто використовувати довгі імена, достатньо обмежитися одним або декількома символами, бо надмірна їх кількість підвищує трудоємність написання тексту програми та ймовірність помилок у ньому, знижує його “читабельність”. З метою запобігання помилок не бажано включати в імена букву l (ель), бо вона подібна на цифру 1 (один). Також, не слід використовувати букви верхнього регістру (великі), хоча вони й дозволені. Практично всі компілятори C розрізняють великі й малі букви, тому два однакові імена, в яких хоча б одна буква відрізняється типом регістру, сприймаються як різні. Не можна будувати імена за допомогою двох слів, розділених пробілом, це – помилка. Не можна, також, використовувати службові слова мови, такі, наприклад, як for, float та інші. Не варто вживати зарезервовані ідентифікатори, наприклад, імена стандартних функцій (printf, exit, system і т. д.), хоча вони й дозволені. Нижче подано декілька прикладів імен змiнних. Допустимі імена: nafta, dolar_231, syla_strumu, typ_dolota, suma_minus_22, kut_fi, pi, omega, a, x1, aa23c, plast_tysk, t_nafty. Недопустимі імена: Нафта, $231, syla strumu, typ#dolota, suma-22, φ, ω, float, else. Оголошення даних. У програмі мовою С оголошенню підлягають іменовані об’єкти: змiннi, масиви, функції, структури, об’єднання, вказiвники, дані перерахункового типу, типи, теги і класи. Не всі об’єкти потребують оголошення, наприклад, на відміну від мови Pascal, С не потребує оголошення міток. Тип кожного об’єкта повинен бути явно оголошеним за допомогою спецiальних описувачiв, які визначають базовий тип даного, клас пам’ятi та модифiкатор. Оголошення можна виконати на внутрiшньому рiвнi (блок) або на зовнiшньому (програмний модуль). Змінні, оголошені на внутрішньому рівні, є локальними, тобто їх час життя та область дії обмежується блоком. На зовнішньому рівні оголошуються глобальні змінні, їхній час життя та область дії поширюються на модуль. Таблиця 2.3 – Базові типи даних Тип Назва типу Об’єм пам’ятi, байт  char Символьний 1  int Цiлий 2, 4 або 8  short Cкорочений (цілий) 2  long Подовжений (цілий) 4  unsigned Беззнаковий (цілий) 2  unsigned char Беззнаковий символьний 1  unsigned short Беззнаковий короткий (цілий) 2  unsigned long Беззнаковий довгий (цілий) 4  float Пересувний 4  double Подвiйний 8  long double Подвiйний довгий 10   Всі попередні стандарти мови С, крім С99, вимагають розташування всіх оголошень змінних на початку модуля або блока. Це вигідно і рекомендується, бо тоді весь список імен маємо в одному місці, тому зменшується ймовірність помилки через позначення одним і тим же іменем різних об’єктів програми. Базовi типи даних. Вiд базового типу даних залежить об’єм пам’ятi, який вони займають. Граничні значення змінних відповідних типів визначені в бібліотеках: limits.h, float.h, stdint.h. Специфiкатори базових типiв показанi в таблицi 2.3. До перелічених у таблиці 2.3 стандарт С90 додав тип void – порожній, він застосовується там, де зазвичайно повинні бути якісь дані, але в даному випадку їх немає. Також стандарт С99 додав типи: long long – подвійний довгий (цілий тип для систем, які працюють з 8-байтовою адресацією), _Bool – логічний, _Complex – комплексний та _Imaginary – уявний. Нагадаємо, що тут розглядається стандарт мови С. Окремі версії мови можуть мати свої власні типи та займати інший об’єм пам’яті. Тоді мова С набуває ширших, але не вужчих, ніж у стандарті, можливостей. Зокрема, практично всі сучасні компілятори надають типу int об’єм пам’яті не 2, а 4 та навіть 8 байт. Нижче наведено приклади застосування базових типів даних у оголошеннях: int k, j; long double x1; char c; float x, y; Під час оголошення дозволено ініціалізовувати змінні, тобто присвоювати їм значення відповідних констант, наприклад, int k=3, j=25; char p, s='я'; Тут оголошені дві змінні типу int: k та j, які під час оголошення одержать значення відповідно 3 та 25. Далі оголошені дві змінні типу char, з яких змінна p не буде ініціалізована, та – s, яка прийме значення літери кирилиці “я”. Залежно від характеру зберігання в пам’яті комп’ютера дані, позначені перечисленими тут типами, можна поділити на два сімейства: цілі і дійсні. Розглянемо тип char, він означає літеру, текст. Але в пам’яті зберігається не буква, а її ASCII-код (ASCII – American Standart Code for Information Interchange – американський стандартний код обміну інформацією). Цей код охоплює цілі додатні числа від 0 до 127, його застосовують для зберігання в пам’яті всіх символів вищеописаного алфавіту мови С. За його допомогою можна закодувати 128 символів, для цього достатньо 7 біт, але відводиться 8 біт, тобто цілий байт, який дозволяє кодувати до 256 символів. Враховуючи цю можливість, більшість систем використовують розширені ASCII-коди, де додано символи, наприклад, букви кирилиці.
Антиботан аватар за замовчуванням

14.09.2014 22:09-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!