ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.12.2021

Просмотров: 971

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.



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


3.1 Алфавіт мови програмування


Будь-яка мова, у тому числі й C, має свій алфавіт – набір символів, які дозволені до використання і сприймаються компілятором. Множина символів, що використовуються у мові С представлена у табл. 3.1.


Таблиця 3.1 Алфавіт мови С

Символи

1

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

a b c d e f g h i j k l m n o p q r s t u v w x y z

2

_ (символ підкреслювання)

3

0 1 2 3 4 5 6 7 8 9

4

, . ; : ? ‘ ! | / \ ~ * + - ) ( } { < > [ ] # % & ^ = “

5

Пробіл, табуляція, повернення каретки, нова сторінка, новий рядок


Великі та малі літери вважаються різними символами, тому що мають різні коди в таблиці кодів ASCII. Це важлива відмінність C від багатьох інших мов програмування, наприклад від Паскаля.

Символи пунктів 1-3 в табл. 3.1 використовуються для утворення літералів, ідентифікаторів та ключових слів.

Знаки пунктуації і спеціальні символи (пункт 4, табл. 3.1) використовуються, з одного боку, для організації процесу обчислень, а з іншого боку - для передачі компілятору визначеного набору інструкцій.

Розділові символи (пункт 5, табл. 3.1) відокремлюють один від другого об'єкти, обумовлені користувачем, такі наприклад, як: літерали та ідентифікатори. Послідовність розділових символів розглядається компілятором як один символ (наприклад, послідовність пробілів як один пробіл).

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



3.2 Лексеми


Лексемою називають нероздільну послідовність символів з алфавіту мови С (у найпростішому ви­падку один символ), які розпізнаються компілято­ром, тобто компілятор не аналізує компоненти, які входять в цю послідовність.

Лексемами є літерали, ідентифікатори, ключові слова, знаки операцій, а також символи пунктуації, такі як: прямокутні ([]), фігурні ({}) і кутові скобки (<>), двокрапка і кома.

Лексеми між собою можуть бути відокремлені розділовими симво­лами (пробіл, символ табуляції тощо) чи такими іншими лексемами, як знаки операцій. Щоб запобігти розбивці елементів лексеми на декілька частин компілятором забороняється використання розділових символів у ідентифікаторах, багатосимвольних операціях чи ключових словах.



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


Ключові слова – це зарезервовані лексеми, що наділені визначеним змістом. Їх можна використовувати тільки у відповідності зі значенням відомим компілятору мови С. Список ключових слів приведено у таблиці 3.2.


Таблиця 3.2 – Список ключових слів

auto

break

case

char

continue

default

do

double

else

enum

extern

float

for

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while


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


Ідентифікатор - це лексема, що складається з літер, цифр і знаків підкреслення. Ідентифікатори використовуються в якості імен змінних, функцій, структур тощо.


Першим символом ідентифікатора має бути буква чи знак підкреслення. Для утворення ідентифікаторів можуть бути використані малі чи великі букви латинського алфавіту. Мовою C допускається довільна довжина ідентифікатора, од­нак значимі тільки перші 31 символ. Два ідентифікатори для утворення яких використовуються співпадаючі малі та великі букви, вважаються різними.

Ідентифікатори не можуть складатися з декількох слів (не можна використовувати пробіл усередині ідентифікатора) чи містити в собі сим­воли кирилиці (український або російський алфавіт).


Приклад 1. Ідентифікатори.

abc, ABC, A128B, a128b.


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




3.5 Класифікація типів даних


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

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

- прості типи даних;

- похідні типи даних.

Прості типи мають імена, які є ключовими словами мови.

До простих типів належать: скалярні типи і порожній тип – void.

Тип void не має значення і введений для опису функцій, які не повертають значень, та для деяких інших цілей.

Скалярні типи поділяються на цілочисельні та дійсні типи.

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

Похідні типи визначаються на основі простих типів. Похідні типи поділяються на скалярні і структурні (агрегатні).

До скалярних похідних типів належать:

- перерахування (enum) – множина поіменованих цілих значень;

- покажчики (ім'я_типу *);

- посилання (ім'я_типу &).

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

Структурні похідні типи:

- масиви (тип_елементу ім'я_масиву [число_елементів]);

- структури ( struct );

- об'єднання ( union ).

Ім’ям структурних похідних типів є ідентифікатор визначений користувачем.

На рис. 3.1 зображена класифікація типів даних мови С.


Рисунок 3.1 – Класифікація типів даних


3.6 Літерали


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

У мові С розділяють чотири типи літералів: цілі, дійсні, символьні та стрічкові літерали.

Цілий літерал може представляти число в одній з форм: десятковій, вісімковій чи шістнадцятковій.

Десятковий літерал складається з однієї чи декількох десяткових цифр, причому перша цифра не повинна бути нулем (у противному випадку число буде сприйнято як вісімкове).

Першим символом вісімкового літерала є нуль, наступними символами є вісімкові цифри (0, 1, 2, 3, 4, 5, 6, 7, 8).


Шістнадцятковий літерал починається з обов'язкової послідовності 0х чи 0Х, наступними символами є шістнадцяткові цифри (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F).

Приклади цілих літералів наведені у табл. 3.2.


Таблиця 3.2 . Цілі літерали

Десяткові літерали

Вісімкові літерали

Шістнадцяткові літерали

16

020

0x10

63

077

0x3F

171

0253

0xAB


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

Для того щоб цілий літерал визначити типом long, досить наприкінці літерала поставити букву "l" чи "L".


Приклад 2. Цілі літерали типу long.

5l, 6l, 128L, 0105L, OX2A11L.


Дійсний літерал – десяткове число, представлене у вигляді дійсної величини з десятковою точкою чи експонентою, має наступний формат:


[ціла частина ].[дробова частина ] [ Е|е [+|-] експонента ] .


Дійсне число, складається з цілої і дробові частини і (чи) експоненти. Дійсні літерали, представляють додатні величини подвоєної точності (мають тип double).


Приклад 3. Дійсні літерали типу double.

115.75, 1.5Е-2, -0.025, .075, -0.85Е2


Для того щоб дійсний літерал визначити типом float, досить наприкінці літералу поставити букву "f" чи "F".


Приклад 4. Дійсні літерали типу float

115.75f, 1.5Е-2f, -0.025F, .075F, -0.85Е2f

Символьний літерал – представляє собою символ заключений у одинарні кавички (‘’). Керуюча послідовність розглядається як одиночний символ, тому вона є символьним літералом. Значенням символьного літералу є числовий код символу.


Приклад 5. Символьні літерали.

‘ ’ - пробіл,

Q’- буква Q,

\n’ - символ нового рядка,

\’ - зворотна дробова риса,

\t’ – горизонтальна табуляція.


Символьні літерали мають тип int і при перетворенні типів доповнюються знаком.

Стрічковий літерал - послідовність символів (включаючи малі та великі букви російського і латинського алфавітів а також цифри) заключені в подвійні лапки (“”) .


Приклад 6. Стрічкові літерали.

Бамбарабия Кергуду”, “місто Вінниця”, “Hello world! ”.


У кінець кожного стрічкового літерала компілятором додається нульовий символ, що відповідає керуючій послідовності \0.

Стрічковий літерал має тип char[]. Це означає, що рядок розглядається як масив символів. Відзначимо важливу особливість, число елементів масиву дорівнює числу символів у рядку плюс 1, тому що нульовий символ (символ кінця рядка) також є елементом масиву.



3.7 Оператори


Оператор (statement) у С визначає дію, яка має бути виконана. Оператори можна класифікувати на такі групи:

- оператори мітки;

- оператор вираз;

- порожній оператор;

- складений оператор;

- ітераційні оператори;

- оператори переходу;

- оператори вибору.

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


Оператор вираз представляє собою будь-який вираз, в кінці цього оператора обов’язково має бути символ крапка з комою «;».

Порожній оператор складається з єдиного символу «;». Цей оператор використовується в інших операторах коли по синтаксису потрібно використати оператор але жодних дій виконувати не потрібно.

Складений оператор являє собою нуль або більше операторів, об’єднаних за допомогою фігурних дужок. Відмінною рисою складеного оператора мови C від інших (наприклад, Pasсal) полягає в тому, що він визначає нову область дії, тобто змінні, визначені усередині складеного оператора, є локальними.

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

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

Оператори переходу призначені для безумовного переходу. Оператор return повертає значення з функції, оператор break припиняє виконання ітераційних операторів і оператора switch, оператор continue переходить на наступну ітерацію у ітераційних операторах.

Класифікація операторів мови С наведена на рис. 3.2.



Рисунок 3.2 – Класифікація операторів


Згідно синтаксису операторів представлених на рис. 3.2 на місці слова «оператор» може знаходитися будь-який оператор. Наприклад, оператор if може містити оператор while, який, в свою чергу, може містити оператор вираз. Винятком з правила є оператори continue і break, які можуть використовуватися тільки в ітераційних операторах. Це правило не розповсюджується на оператор switch, синтаксис якого є особливим і визначено нижче.



3.8 Коментарі


Коментар – це набір символів, що ігноруються компілятором, і використовується для написання пояснень до коду програми. Початок та кінець коментарю позначається відповідно лексемами (/*) та (*/). Коментарі можуть бути як однострічковими так і багатострічковими. Коментарі розглядаються компілятором як розділові символи.

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

Наявність коментарів у тексті програми робить її зрозумілішою і дозволяє легко пригадати особливості про­грами після звертання до неї через тривалий проміжок часу.


Приклад 7. Синтаксис коментаря.

int a=2, b=7; /* ініціалізація змінних */

/* однострічковий коментар */

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



3.9 Директиви препроцесора


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

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