- •2. Основні елементи мови с
- •3.1 Алфавіт мови програмування
- •3.2Лексеми
- •3.3Ключові слова
- •3.4Ідентифікатори
- •3.5 Класифікація типів даних
- •3.6 Літерали
- •3.7 Оператори
- •3.8 Коментарі
- •3.9 Директиви препроцесора
- •3.10 Організація програми
- •3. Операції та вирази
- •4.1 Загальні відомості
- •4.2 Арифметичні операції
- •4.3 Операції приведення типів
- •(Тип) ідентифікатор,
- •4.4 Операції присвоєння
- •4.5 Операції інкремента і декремента
- •4.6 Операції порівняння
- •4.7 Операції зсуву
- •4.8 Порозрядні операції
- •4.9 Логічні операції
- •4.10 Операція sizeof
- •Sizeof ( Вираз ),
- •4.11 Операція послідовного обчислення
- •4.12 Операція умови (?:)
- •Операнд-1 ? Операнд-2 : Операнд-3
- •4.13 Адресні операції
- •Тип * ім'я_покажчика;
- •4. Прості типи даних
- •5.1 Оголошення змінних
- •[ Модифікатори ] тип ім’я_змінної;
- •5.2 Час існування та область видимості змінних
- •5.3 Цілі типи даних
- •5.4 Дійсні типи даних
- •5. Оператори керування
- •5.1 Оператор розгалуження if
- •If ( Вираз ) true-оператор;
- •5.2 Оператор розгалуження if-else
- •If ( Вираз ) true-оператор; else false-оператор;
- •5.3 Оператор множинного розгалуження switch
- •5.4 Оператор циклу for
- •For ( Вираз 1 ; Вираз 2 ; Вираз 3 ) тіло циклу
- •5.5 Оператор циклу while
- •While ( Вираз ) тіло циклу
- •5.6 Оператор циклу do while
- •Тіло циклу while ( Вираз ) ;
- •5.7 Оператор break
- •5.8 Оператор continue
- •6 Введення та виведення даних
- •7.1 Функція виведення printf
- •Int printf( стрічка форматування, змінна1, змінна2, ... );
- •7.2Функція введення scanf
- •Int scanf (стрічка форматування, адреса змінної1, адреса змінної2, ... );
- •9.1 Введення та виведення у файл
- •7 Масиви
- •7.1 Загальні поняття
- •7.2 Одновимірні масиви
- •Тип даних ім’я змінної [n];
- •7.3 Багатовимірні масиви
- •6. Функції
- •6.1 Основні поняття
- •{Тіло функції}
- •6.2 Область видимості
- •6.3 Порожній тип void
- •6.4 Передача аргументів у функцію
- •6.5 Рекурсивні функції
- •6.6 Прототипи функцій
- •8. Рядки в с
- •4.1 Прототипи
- •4.2 Функції перетворення буферів
- •4.3 Функції перевірки літер
- •4.4 Рядок символів
- •4.5 Операції з рядками:
- •4.6 Символьні константи
- •9. Покажчики
- •5.1 Визначення та ініціалізація покажчиків
- •5.2 Визначення покажчиків:
- •5.3 Масиви
- •5.6 Копіювання рядка
- •5.7 Посилання та оператор &
- •5.9 Посилання в якості результатів функції
- •5.10 Покажчики на функцію
- •Тип_функціі (* імя_покажчика) (специфікація_параметрів);
- •5.11 Покажчики на void
- •5.12 Арифметика покажчиків
- •10. Структури, об’єднання, перерахування
- •7.1 Структури
- •7.2 Ключове слово typedef
- •7.3 Об’єднання
- •7.4Перераховуваний тип (Enum)
- •Enum dataType
- •Enum day
- •11 Динамічне виділення пам'яті
4.3 Функції перевірки літер
У файлі ctype.h описано прототипи функцій, що призначені для перевірки літер. Ці функції повертають ненульове значення (істина), коли її аргумент задовольняє заданій умові або належить вказаному класу літер, та нуль в іншому випадку(табл 4.2).
Таблиця 4.2 – Функції перевірки літер
int islower(int с) |
символ с є малою літерою; |
int isupper(int c) |
символ с є великою літерою; |
int isalnum(int c) |
символ с є буквою або цифрою; |
int isalpha(int c) |
символ с є буквою; |
int tolower(int c) |
перетворення літери у нижній регістр; |
int strtol(int c) |
перетворення рядка у довге ціле число; |
4.4 Рядок символів
У мові С немає окремого типу даних “рядок символів”, подібно до типу string у алгоритмічній мові PASCAL. Тому робота з рядками реалізована шляхом використання одновимірних масивів типу char. Рядок символів – це одновимірний масив типу char, останнім елементом якого є нульовий байт. Нульовий байт – це байт, кожен біт якого рівний нулю, при цьому для нульового байта визначена символьная константа \0(ознака закінчення рядка або нуль-термінатор). Тому, якщо рядок містить k символів, в описі масиву потрібно вказати розмірність k+1.
Так, для збереження у масиві рядкової константи “Лабораторна робота з рядками”, необхідно описати масив char s[29]. В кінці рядкової константи символ ´ \0вказувати не потрібно, оскільки це зробить компілятор мови С(рис. 4.1).
Приклад 3. Рядок символів.
S=”ПИРІЖОК=)”;
Рисунок 4.1 – Сприйняття комп’ютером символьного рядка.
Так сприймає рядок комп’ютер. Тому, S[0]==’П’, S[8]==’)’.
4.5 Операції з рядками:
а) Рядки можна ініціалізувати при декларуванні.
Приклад 4.Ініціалізація даних.
char S1[10] = ”123456789”, S2[] = ”Srting”, S3[] = {‘1’,‘2’,‘3’,‘\0’};
В двох останніх випадках розмір рядків буде встановлений за кількістю символів;
б) Рядки можна вводити з клавіатури, не використовуючи при цьому оператора циклу, подібно звичайним масивам.
Приклад 5. Введення масиву.
char TeMa [20];
printf(“Введіть тему лабораторної роботи:\n”);
scanf(“%s”, TeMa);
4.6 Символьні константи
Для символьних даних в C введено тип char. Для представлення символьної інформації використовуються символи, символьні змінні і текстові константи.
Приклад 6.Змінні типу char.
const char c=’c’; /*символ-константа – займає один байт*/
char a,b; /*символьні змінні, займають по одному байту*/
const char *s=“Приклад рядка\n” ; /*рядкова константа */
Рядок в С - це масив символів, що закінчується нуль-символом ‘\0’. За місцезнаходженням цього символу визначається фактична довжина рядка. Кількість елементів у такому масиві на 1 більше за зображення рядка(рис. 4.2).
Рисунок 4.2 – Символ і рядок
9. Покажчики
5.1 Визначення та ініціалізація покажчиків
Пам'ять комп'ютера можна представити у вигляді послідовності комірок, кожна з мінімальним розміром один байт. Комірки нумеруються послідовно (рис. 5.1).
Рисунок 5.1 - Послідовна нумерація комірок пам’яті
Покажчик – це зміна, що зберігає адресу іншої змінної.
Синтаксис визначення покажчика наступний:
<тип> *<ім’я покажчика>
де тип – це тип даних на який вказує покажчик;
ім’я покажчика– ідентифікатор.
Синтаксис виклику функції наступний:
Приклад 1.Присвоєння адреси змінній(рис. 5.2).
pointer = &variable; /*якщо «&» перед ініціалізатором, то це операція взяття адреси присвоєння адреси variable змінній pointer */
тобто pointer «вказує» на variable:
Рисунок 5.2 – Присвоєння адреси змінній
Розглянемо ще один фрагмент:
Приклад 2.Змінна та її адреса(рис. 5.3).
variable = 13;
varsecond = variable;
pointer = &variable;
Рисунок 5.3 – Змінна та її адреса.
Покажчик визначається наступним чином:
<тип> *< ідентифікатор> = <ініціалізатор>;
Під ініціалі затором розуміється якась адреса зміної(тоді використовуємо взяття адреси змінної &) або вже існуючий покажчик, але не вираз типу &41.