Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга6.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.45 Mб
Скачать

9.5 Перераховуваний тип

Перераховуваний тип (Enum) – тип даних що має обмежений список ідентифікаторів.

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

Синтаксис визначення перерахувань:

enum <ідентифікатор типу>

{

<список перерахування>

};

де ідентифікатор типу – задає ім'я перераховуваного типу,

список перерахування – список перерахування складається з імен, розділених комами. Кожне ім’я задається ідентифікатором значення і, можливо, цілим значенням типу char чи int.

Приклад 9.19. Визначення перерахувань.

enum dataType

{

DT_INT, /* 0 */

DT_CHAR, /* 1 */

DT_STRING=3, /* 3 */

DT_FLOAT, /* 4 */

DT_BYTE=8, /* 8 */

DT_SHORT, /* 9 */

DT_POINTER /* 10 */

};

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

Для зберігання значень змінних перерахування використовується тип int.

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

Приклад 9.20. Доступ до елементів неіменованого перерахування.

#include <stdio.h>

#include <stdlib.h>

enum

{

Sunday,

Monday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday

};

void prn_day(int d)

{

Static char week[][10] = {"Sunday", "Monday", "Tuesday",

"Wednesday", "Thursday", "Friday", "Saturday"};

printf("%s\n",week[d]);

}

int main(void)

{

int i;

for(i=Sunday;i<Saturday;++i)

prn_day(i);

system("PAUSE");

return 0;

}

Програма приведена у прикладі 9.20 працює аналогічно програмі з прикладу 9.19. Якщо у прикладі 9.19 перерахування використовувалось як власний тип даних, що підкреслював логічну структуру програми, то у прикладі 9.20 перерахування служить тільки для введення іменованих констант. Таке використання перерахувань аналогічне введенню макровизначень за допомогою директиви препроцесора #define.

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

Контрольні запитання

  1. Для чого використовуються структури?

  2. Опишіть синтаксис визначення структури.

  3. Що таке об’єкт структури?

  4. Що таке поле структури?

  5. Для чого використовується операція вибору “крапка” (“.”)?

  6. Для чого використовується операція непрямого доступу “->”?

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

  8. Для чого використовується typedef?

  9. Для чого використовується union?

  10. Написати програму, яка зчитуватиме дані про студентів, та виводитиме їх на екран в алфавітному порядку прізвищ студентів.

  11. Написати структуру з ім’ям STUDENT, що містить наступні поля:

  • прізвище, ім’я, по-батькові;

  • номер групи;

  • успішність;

  1. Написати програму, що виконує наступні дії:

  • введеня з клавіатури даних в масив, що складається з 10 структур типу STUDENT;

  • записи повинні бути упорядковані по номеру групи;

  • вивід на дисплей прізвищ і номерів груп, включених у масив, якщо середній бал не більше 4;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]