Аписи и объединения, их массивы и инициализация, перечисления (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;
}