аписи и объединения, их массивы и инициализация, перечисления (enum), поля бит, открытие файлов

a) Навести декларацію змінної Data, структурного типу S_TYPE, яка має 3 поля: – поле char*, – поле long, – поле double. Поля структурної змінної в декларації повинні бути ініційовані наступними значеннями, відповідно, - “Old_Story”, 12L, 23.4e8.

struct S_TYPE

{

char* a;

long b;

double c;

};

main()

{

struct S_TYPE data;

Data.a="Old_Story";

Data.b=12L;

Data.c=23.4e8;

}

b) Навести декларацію шаблону структури ST_R, яка має 3 поля: – вказівник на структуру ST_R, – вказівник на дані типу long, – бітове поле на 3 розряди типу signed int. Скільки байт буде виділено в пам'ті комп'ютера для розміщення будь-якої змінної типу struct ST_R, якщо вказівники потребують по 4 байти для їх розміщення?

struct ST_R

{

struct ST_R *p1;

long *p2;

signed int p3:3;

};

10 байт

c) Навести декларацію „перечислимого” типу LEXEMA з елементами id, operator, cont, ssymbol, tab, та змінних l і t цього типу. Чи можна записати у С-програмі наступний оператор l = t = cont; ?

enum lexeme {id,operator,cont,ssymbol,tab} l,i,t;

Да можна, они будут содержать индекс перечислителя сont (2);

d) Навести декларацію змінної Y структурного типу W_T, який включає в собі 2 елементи: - бітове поле на 4 розряди типу unsigned та об'єднання, яке об'єднує 2 елементи: – дані типу double та дані типу long. Скільки байт буде виділено в пам'яті комп'ютера для розміщення будь-якої змінної типу struct W_T?

struct W_T

{

unsigned:4;

union

{

double a

long b

}c;

}Y;

14 байт

e) Навести декларацію змінної F, структурного типу T_TYPE, яка має 4 поля: – поле char [12], – поле long, – поле double, – бітове поле на 5 розрядів типу signed . Поля структурної змінної в декларації повинні бути ініційовані наступними значеннями, відповідно, - “Butter”, 17843l, 234.89e5, та значенням 1010 у вигляді 16-річної константи.

f) Навести декларацію шаблону об'єднання MY_U, яке об'єднує 3 елементи: – дані типу char [4], – дані типу double та дані типу unsigned. Скільки байт буде виділено в пам'ті комп'ютера для розміщення будь-якої змінної типу union MY_U?

g) Наведіть ім'я стандартног потоку вводу та виводу.

стандартными потоками для ввода и вывода являются, соответствено, stdin и stdout.

h) Наведіть повністю опис режиму відкриття файлу “r”?

“r" – только для чтения и для существующего файла,

позиционирование в начало. Если файл не существует, то NULL.

FILE* file_ptr;

if((file_ptr = fopen(“cdirfile.txt”, ”r”)) != NULL)

{

/* действия, связанные с успешным открытием файла*/

}

else

{

/* действия по неудаче открытия файла, например анализ флага ошибок*/

}

i) Наведіть повністю опис режиму відкриття файлу “w”?

”w” - только для записи; если файл не существует, то он создается; позиционирование в начало и если файл уже существует, то старое содержимое затрется.

j) Наведіть повністю опис режиму відкриття файлу “a+”?

“a+” – для обновления (чтения/записи); после закрытия усечения не происходит;

позиционирование в конец файла.

k) Наведіть повністю опис режиму відкриття файлу “r+b”?

l) Наведіть повністю опис режиму відкриття файлу “w+t”?э

8)Звернути увагу, що деякі функції можуть мати параметром вказівник на вказівник для того, щоб можна було б змінювати значення головного або хвостового вказівника списку, тому необхідно правильно вибирати операції * або **.

- Дана декларація елементу однонаправленого списку:

struct ELT { struct ELT *next;

double M;

};

Навести реалізацію функції void add_to_list(struct ELM **head, struct ELM *elm), яка забезпечує включення елементу elm до голови списку head, де head головний вказівник списку (використовується список з одним головним вказівником).

{

*elm->next = *head;

*head = elm;

}

 

- Дана декларація елементу двонаправленого списку:

struct ELT { struct ELT *next;

struct ELT *pred;

long M;

};

Навести реалізацію функції long Length(struct ELM *head), яка забезпечує підрахунок кількості елементів у списку head, де head головний вказівник списку. (Список з одним вказівником головного елемента).

{

struct ELM wp = head;

long tmp=0;

while (wp!= nil)

{

wp:=*wp->next;

tmp++;

}

return tmp;

}