Задание 1. Указать расположение в памяти элементов следующей структуры:
Struct
{
Int dint;
Char dchar;
Double ddouble;
}
0 |
1 |
2 |
3 |
0 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
… |
dint |
Dchar |
Ddouble |
Задание 2. Указать длину следующей структуры:
Struct
{
Int dint[20]; /*Длина равна 40 байт*/
Double ddouble[2]; /*Длина равна 16 байт*/
Char pchar[15]; /*Длина 15 байт*/
} /*Длина структуры будет равна 71*/
Задание 3. Проинициализировать следующую переменную и указать значения ее элементов после инициализации:
struct
{
char pchar[2];
int p1, p2;
double d1[10];
} st[3]=
{ {{‘a’,‘b’},1,2,{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,0.1}},
{{‘с’,’d’},3,4,{1.1,1.2,1.3,1.4,1.5, 1.6,1.7,1.8,1.9,1.1}},
{{‘e’,’f’},5,6,{2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.1}} }
Результат: st[1].p1 = 3
st[2].d1[4] = 2.4
st[0].pchar[2] = b
Задание 4. Найти ошибку инициализации:
Struct
{
int t[5];
double ff[3];
char ccc[8];
} grt [3] = {
{{1},{0.5,0.7,0.9},{0}},
{1}, //не хватает внутренних скобок {} при описании массива grt [3]
{2}} . //не хватает внутренних скобок {} при описании массива grt [3]
Struct
{
int pp[8];
double rrr[2];
char ch[7];
} grt[3]={{{1,2,3,4,5,6,7,8},{0.5,0.7,0.9},{0}}, // Число 0.9 указано не верно, т.к. размерность
// массива предполагает наличие только двух элементов
{1,3,4,10000}, //не хватает внутренних скобок {}
{{2},{0},{0,200,190}}}; /*Числа 190, 200 не попадают в диапазон char*/
Задание 5. Найти ошибку:
Struct teg1 //В списке объявления элементов нельзя использовать тот же тег, что и //при объявлении самой структуры
{
struct teg1 *prev;
struct teg1 * prev1;
struct teg1 *next; //при использовании указателя возможно использование того же тега,
//что и в заголовке структуры
struct teg1 next1; //элемент структуры не может быть структурой того же типа, в которой он //содержится
struct teg1 next2;
}
Задание 6. Указать размер памяти в байтах, занимаемый переменной следующего типа:
Struct teg2
{
unsingned one: 3; /*3 бита*/
unsingned : 0; //память для следующего элемента структуры будет начинаться на границе //машинного слова
unsingned three: 3; /*3 бита*/
}; /*размер памяти – 2 байта*/
Задание 7. Указать схему размещения битовых поле для переменных следующего типа:
Struct teg3
{
unsigned one : 2;
unsigned four : 4;
unsigned nin : 5;
};
one four nin
2 бита |
4 бита |
5 бит |
... |
2 байта
Задание 8. Написать выражение обращения к элементам следующей структуры:
Struct teg4
{
int f[4];
double g[3];
}tyn, *tp;
tyn.f[0]=5; /*присваивание элемента структуры*/
tyn.g[1]=5; /*присваивание элемента структуры*/
tp–>f[3]=2; /*присваивание элемента структуры по ее адресу*/
tp–>g[2]=2; /*присваивание элемента структуры по ее адресу*/
Задание 9. Указать ошибку.
unsigned *ii;
struct teg2 pp={0x1, 0x3};
…
ii=&pp.one; /* к битовым полям неприменима операция адресации &.*/
…
Задание 10. Какие операции из перечисленных разрешены над структурами как единым целым:
- присваивание; /* операции присваивания структур с эквивалентными типами */
- деления;
- умножения;
- получения адреса; /*взять адрес */
- операция syzeof; /*определение размеров в байтах */
- арифметические операции.
Задание 11. Указать ошибку:
union
{
char p = ”c”; /*нельзя инициализировать переменную внутри списка объявления элементов */
double ddd;
int fit;
char byte[5];
}geth = {1.56784};
Задание 12. Составить программу для проверки полученного результата в задании 2. Программу снабдить подробными комментариями.
#include <stdio.h> //подключение файла, находящегося в стандартном каталоге
#include <conio.h> //подключение файла, находящегося в стандартном каталоге
main() //главная функция, точка входа в программу
{
int r; //описание переменной типа int (знаковая целая)
struct my1 //объявление структуры с тегом my1
{ //список объявления переменных
int dint[20]; //объявление массива размерностью – 20, элементы которого имеют тип int
double ddouble[2]; //объявление массива размерностью – 2, элементы которого имеют тип
//double
char pchar[15]; // объявление массива размерностью – 15, элементы которого имеют тип char
};
r=sizeof(my1); //вычисление размера данной структуры с помощью операции sizeof
// с занесением результата в переменную r
printf("\nr=%d",r); //вывод на экран результата
while(!kbhit()); //организация задержки
}
Результат, выводимый на экране: r=71
Задание 13. Составить программу для получения адресов каждого элемента структуры из задания 1 с целью проверки полученного результата. Программу и результаты снабдить подробными комментариями. Сделать выводы.
#include <stdio.h> //подключение файла, находящегося в стандартном каталоге
#include <conio.h> //подключение файла, находящегося в стандартном каталоге
main() //главная функция, точка входа в программу
{
int d2; //описание переменной типа int (знаковая целая)
struct //объявление структуры
{ //список объявления переменных
int dint; //объявление переменной, имеющей тип int
char dchar; //объявление переменной, имеющей тип char
double ddouble; //объявление переменной, имеющей тип double
}d1; //идентификатор структуры
printf("\n\nd2=%p",&d1.dint); //вывод на экран адресов каждого элемента структуры
printf("\nd2=%p",&d1.dchar);
printf("\nd2=%p",&d1.ddouble);
while(!kbhit()); //организация задержки
}
Результат: d2=FFEA //адрес элемента структуры dint типа int
d2=FFEC // адрес элемента структуры dchar типа char
d2=FFED // адрес элемента структуры ddouble типа double
Вывод: элементы структуры располагаются в памяти последовательно в соответствии с указанным для него типом.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.