Лабораторная работа №6
Тема: Составной тип данных: Смеси.
Целью лабораторной работы является получение базовых практических навыков использования смеси в системах программирования, необходимых для дальнейшего выполнения цикла лабораторных работ.
Занятие 1
2 часа
Значения различных типов можно хранить в одной и той же области памяти (но не одновременно). Для этого используются тип "смесь". Фактически смесь - это структура, все элементы которой имеют нулевое смещения, а сама структура достаточно велика, чтобы вместить самый большой элемент, и выровнена так , чтобы можно было работать с любым элементом.
Объявление смеси имеет тот же синтаксис, что и объявление struct, за исключением того, что оно начинается с ключевого слова union вместо ключевого слова - struct.
Для объявления смеси и struct действуют одни и те же правила, только в смеси не допускаются элементы типа полей битов.
Объявление смеси имеют 2 формата: Формат 1:
union [имя-типа-смеси] (список-обьяв-й элемент} \
[описатель [,описатель]... ]; Формат 2:
union имя-типа-смеси описатель [,описатель]...;
Память, которая соответствует переменной типа смеси, определяется величиной, необходимой для размещения наибольшего элемента смеси. Когда используются меньший элемент смеси, то переменная типа смеси может содержать неиспользуемую память. Все элемента смеси хранятся в одной и той же области, начиная с одного и того же адреса.
Часто смеси применяются в случаях, когда надо выделить часть целой переменной или загрузить целое значение в структуру, описанную с полями битов.
// Программа выдачи двоичного кода введенного символа //* Для окончания ввести символ k # include struct byte {
unsigned a: 1 ;
unsigned b: 1;
unsigned с : 1;
unsigned d: 1 ;
unsigned e: 1;
unsigned f: 1 ;
unsigned g: 1;
unsigned h: 1 ;
};
union symb {
unsigned char ch; struct byte bit; } symbol;
void convert(union symb p); /* Функция выдачи двоичного эквивалента */ mainQ
{ do { printf("\n Нажмите любую клавишу — > ");
symbol. ch=getche(); /*Чтение с отображением очередного символа */
printf(":"); convert(symbol); }
void convert(union symb p)
{ if(p.bit.h)printf("l");
else printf("0"); if(p.bit.g)printf("l");
else printf("0"); if(p.bit.f)printf("l");
else printf("0"); if(p.bit.e)printf("l");
else printf("0"); if(p.bit.d)printf("l");
else printf("0"); if(p.bit.c)printf("l");
else printf("0"); if(p.bit.b)printf("l");
else printf("0"); if(p.bit.a)printf("l");
else printf("0"); printf("\n");
Результат выполнения программы: Нажмите любую клавишу—> g: Oil00111 Нажмите любую клавишу~> f: 01100110 Нажмите любую клавишу~> 2: 00110010 Нажмите любую клавишу—> У: 10010011 Нажмите любую клавишу—> м: 10101100 Нажмите любую клавишу—> Б: 10000001 Нажмите любую клавишу—> к: 10101010
Do'stlaringiz bilan baham: |