Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

2.4 Питання для контролю і самостійної роботи

  1. Як здійснюється введення і виведення інформації в мові С? Чи існують убудовані оператори введення/виведення?

  2. Для чого необхідні оголошення функцій та перемінних?

  3. Для чого використовується форматизоване введення/виведення даних?

  4. У якому заголовочному файлі приведені оголошення (прототипи) функцій prinf( ) і scanf( ) ?

  5. З якого символу починається форматний рядок цих функцій ?

  6. Для чого встановлюються прапори у форматному рядку ?

  7. Які символи перетворення використовуються й у яких випадках ?

  8. Як перевести дані у восьмирічну та шістнадцятирічну систему числення за допомогою функції prinf( ) ?

  9. Які символи та специфікатори формату є обов'язковими елементами форматного рядку ?

  10. Які символи форматного рядку не відображаються на екрані ?

  11. Чи відрізняються символи типу <type_char>, які застосовуються для функцій prinf( ) і scanf( ) ?

  12. Чи відрізняються типи аргументів функцій ? Якщо відрізняються, то в чому розходження і чим воно викликано ?

  13. Про що свідчить модифікатор const ?

  14. Назвіть інші функції С для введення/виведення інформації.

  15. Яке призначення і що виконують керуючі послідовності ‘\n ', ' \t ' та інші? Які ще керуючі послідовності Ви знаєте ?

3 Заняття № 3 Розробка програм зі скалярними типами даних

(2 години)

Ціль роботи: розглянути і вивчити скалярні типи даних С (int, char, float і ін.), а також їхнє використання у програмах.

3.1 Теоретичні відомості

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

Оголошення перемінних можуть бути глобальними з класами пам'яті extern і static ( поза функцією main( ) ) і локальними з класами пам'яті auto, register (усередині блоку, функції, наприклад, усередині функції main( ) ).

Глобальні перемінні за умовчанням мають клас пам'яті extern та ініціюються нульовим значенням при оголошенні. Локальні перемінні за умовчанням мають клас пам'яті auto і не ініціюються при оголошенні.

За умовчанням передбачається, що перемінні є знаковими ( signed ). Беззнакові перемінні описуються явно за допомогою специфікатора insigned.

Приклад

int n1, n2, n3, n4; // Множинне оголошення перемінних

n1 = 15; // Iніціалізація перемінної

float weight = 23.56; // Оголошення перемінної з ініціалізацією

unsignid int exam;

char ch = ’+’, c = ’A’;; // Iніціалізація перемінних типу char

char slash = ’/’, Slash = ’\’; // Регістр у перемінних розрізняється,

// перемінні slash та Slash є різними

char str[ ] = ’’рядок символів’’; //Ініціалізація строковою константою

char *pstr = ’’рядок символів’’; //масива та покажчика (*) на тип char

У першому оголошенні приведений список перемінних з іменами n1, n2, n3, n4. Усі вони мають тип (int - ціле). Перемінна exam - також цілого типу, але беззнакова й оголошена окремо. Якщо використовуються специфікатори unsigned, long, short, то специфікатор int можна опускати, тому що перемінні мають тип int за умовчанням. Одночасно з оголошенням перемінних може бути проведена і їхня явна ініціалізація.

У С мається досить багато визначених типів даних, включаючи кілька видів цілих, покажчиків, речовинних перемінних, масивів, об'єднань, структур і тип void (порожній). Слово void означає, наприклад, що покажчик може вказувати на будь-який тип, функція не одержує параметрів чи не повертає значення.

Скалярні типи включають символьні типи, цілі, речовинні типи, перерахування, покажчики і посилання. Цілі типи включають кілька різновидів цілих і символьних даних. Арифметичні типи поєднують цілі і речовинні. Символьні типи: окремі символи, літеральні строкові константи (символьні рядки, символічні константи). Строкові константи завжди закінчуються нулем. У строкових константах можуть бути керуючі послідовності (\n, \t, \\ і ін.), що допускаються скрізь, де можуть бути друковані символи:

’’c: \\bc \\test \\f.с”

Складені типи містять у собі масиви, структури й об'єднання.

Кожен об'єкт заданого типу займає визначене число одиниць пам'яті. За одиницю приймається один байт. Число одиниць пам'яті, необхідне для розміщення елемента даного типу, може бути обчислене з використанням операції sizeof(Тип) чи sizeof(Об'єкт_типу). Нижче приведена таблиця 3.1, що показує основні типи даних, їхній розмір і діапазон значень.

Таблиця 3.1 - Розмір і діапазон значень перемінних різних типів

Тип

Розмір

у байтах

Діапазон значень

signed char

1

128...127

unsigned char

1

0...255

signed int

2

-32768...32767

unsigned int

2

0...65535

signed short int

аналогічно int

unsigned short int

аналогічно unsigned int

signed long int

4

-2147483648…2147483647

unsigned long int

4

0...4294967295

float

4

3.4 е -38...3.4 e38

double

8

1.7 е -308...1.7 е308

long double

10

3.4 е -4932...3.4 е4932

Користувач має можливість зв'язати оголошення типу даних з більш простим і наочним новим ім'ям для цього типу даних (призначити псевдонім), використовуючи засіб typedef з наступним форматом оголошення типу:

typedef <Оголошення_типу> <Псевдонім>

Наприклад, визначимо нове ім'я для типу unsigned int:

typedef unsigned int NATUR; // unsigned int зв'язується з ім'ям –

// псевдонімом NATUR

NATUR i; //Оголошення перемінної з типом

// insigned int

Для заборони зміни значень перемінних використовується ключове слово-модифікатор const:

сonst int value16 = 0xf9ac;

сonst unsignid int value8 = 0234; // Перемінні в

// шістнадцятирічному (Xddd) і восьмирічному (ddd) вигляді

Для визначення іменованих констант і макровизначень (макросів) використовують директиву препроцесора:

#define <Ім'я> (Аrgument1 [, Аrgument2…]) <Текст_що_підставляється>

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

Приклад

#define STRING ’’\a\’’Hello, Wold ! \’’\n’’

#define HEX 0x7b

#define DECIMAL 136