Мова СІ створена в 1972 р. Денісом Річі при розробці ОС Unix. Вона проектувалася як інструмент системного програмування з орієнтацією на розробку добре структурованих програм. Мова поєднує в собі, з одного боку, засоби мови програмування високого рівня: опис типів даних, оператори for, while, if і т.ін., а з іншого боку, містить засоби мови типу Асемблер: адресну арифметику, можливість роботи з полями бітів і т.ін.
Структура програми.Програма мовою С має таку структуру:
#директиви препроцесора
. . . . . . . . .
#директиви препроцесора
функція а ( )
оператори
функція в ( )
оператори
void main ( ) { //функція, з якої починається виконання програми
оператори; функція { оператори;}
}
Директиви препроцесора - управляють перетворенням тексту програми до її компіляції. Початкова програма, підготована мовою СІ у вигляді текстового файлу проходить 3 етапи обробки:
1) препроцесорне перетворення тексту;
2) компіляція;
3) компонування (редагування зв'язків або зборка).
Після цих 3 етапів формується виконавчий машинний код програми. Завдання препроцесора - перетворення тексту програми до її компіляції. Правила препроцесорної обробки визначає програміст за допомогою директив препроцесора.
Директива починається з #. Наприклад,
1) #define - вказує правила заміни в тексті. #define ZERO 0.0
Означає, що кожне використання в програмі імені ZERO буде замінятися на 0.0.
2) #include< ім'я заголовкового файлу> - призначена для включення в текст програми тексту з каталогу «Заголовкових файлів», що надходять разом зі стандартними бібліотеками. Кожна бібліотечна функція СІ має відповідний опис в одному із заголовкових файлів. Список заголовкових файлів визначений стандартом мови. Вживання директиви include не підключає відповідну стандартну бібліотеку, а тільки дозволяє вставити в текст програми описи із зазначеного заголовкового файлу. Підключення кодів бібліотеки здійснюється на етапі компонування.. Хоча в заголовкових файлах містяться всі описи стандартних функцій, у код програми включаються тільки ті функції, які використовуються в програмі.
Після виконання препроцесорної обробки в тексті програми не залишається жодної препроцесорної директиви. Програма є набором описів і визначень, і складається з набору функцій. Серед цих функцій завжди повинна бути функція з ім’ям main. Без неї програма не може бути виконана. Перед ім'ям функції міститься інформація про тип значення, що повертається функцією, (тип результату). Якщо функція нічого не повертає, то вказується тип void: void main ( ). Кожна функція, у тому числі й main повинна мати набір параметрів, він може бути порожнім, тоді в дужках вказується (void).
За заголовком функції розташовується тіло функції. Тіло функції - це послідовність визначень, описів й виконавчих операторів, взятих у фігурні дужки. Кожне визначення, опис або оператор закінчується крапкою з комою.
Визначення - вводять об'єкти (об'єкт - це іменована область пам'яті, окремий випадок об'єкту - змінна), необхідні для представлення в програмі даних, що обробляються. Прикладом є
int y = 10 ; //іменована константа
float x ; //змінна
Описи - повідомляють компілятору про властивості й імена об'єктів і функцій, описаних в інших частинах програми.
Оператори - визначають дії програми на кожному кроці її виконання.
Константи й змінні.Константа - це значення, яке не може бути змінене в процесі виконання програми.
Змінні можна змінювати. При заданні значення змінної у відповідну їй область пам'яті записується код цього значення. Доступ до значення можливий через ім'я змінної, а доступ до ділянки пам'яті – через її адресу. Кожна змінна перед використанням у програмі повинна бути визначена, тобто їй повинна бути виділена пам'ять. Розмір ділянки пам'яті, виділеної для змінної й інтерпретація вмістимого залежать від типу, зазначеного у визначенні змінної. Найпростіша форма визначення змінних:
тип список_імен_змінних;
Основні типи даних.Основні типи даних наведено в таблиці.
Назва типу даних
| Ключове слово
| Розмір б
| Діапазон значень
|
символьний
| char
|
| 0. . 255
|
беззнаковий цілий
| unsigned int
|
| 0. . 65535
|
короткий цілий
| short int
|
| -32768 . . 32767
|
беззнаковий короткий цілий
| unsigned short
|
| 0. . 65535
|
цілий
| int
|
| -32768 . . 32767
|
беззнаковий довгий цілий
| unsigned long
|
| 0. . 4294967295
|
довгий цілий
| long
|
| -214748348 . . 2147483647
|
дійсний одинарної точності
| float
|
| 3.4Е-38 . . 3.4Е+38
|
дійсний подвійної точності
| double
|
| 1.7Е-308 . . 1.7Е+308
|
дійсний максимальної точності
| long double
|
| 3.4Е-4932 . . 1.1Е+4932
|
Відповідно до синтаксису мови змінні після визначення за замовчуванням мають невизначені значення. Змінним можна присвоювати початкові значення, явно вказуючи їх у визначеннях:
тип ім'я_змінної = початкове_значення;
Цей прийом називається ініціалізацією.
Приклади:
float pi = 3.14 , cc=1.3456;
unsigned int year = 1999;