Типы данных, определяемые пользователем
Объединение — это поименованная совокупность данных, состоящая из фиксированного числа компонентов разных типов, но активным может быть только один компонент. Многие синтаксические и функциональные свойства объединений совпадают со структурами. Например: Перечисление — это простой целочисленный тип данных, представляющий собой упорядоченную последовательность идентификаторов (перечисляемых… Читать ещё >
Типы данных, определяемые пользователем (реферат, курсовая, диплом, контрольная)
К типам данных, определяемым пользователем, относятся перечисления, структуры и объединения.
Перечисление — это простой целочисленный тип данных, представляющий собой упорядоченную последовательность идентификаторов (перечисляемых констант), принимаемых переменной. Каждому идентификатору назначается целое значение.
Объявление перечисления производится следующим образом:
епшп.
{.
.
};
Создаваемая переменная будет иметь тип имя_перечисления и сможет принимать только те значения, которые указаны в списке констант.
Имя перечисления может быть опущено, в этом случае повторное использование данного перечисления будет невозможно. Имя переменной также может быть опущено. В этом случае в момент объявления перечисления переменная создаваться не будет, переменная такого типа может быть создана позднее с помощью определения: enum ;
Каждой константе из списка присваивается уникальное целочисленное значение. По умолчанию каждая константа получает значение предыдущей константы, увеличенное на 1, при этом первая константа по умолчанию принимает значение 0. Однако константам могут присваиваться значения и в явном виде с помощью операции присваивания. Например: enum selector {.
vyhod, // vyhod=0/ sozd, // sozd=l.
prosm, // prosm=2.
ud, // ud=3.
zam // zam=4.
} f; // создана переменная f типа selector.
enum dni {.
pn, // pn=0.
vt, // vt=l.
sr = 5, // sr=5.
cht, // cht=6.
pt = 12, // pt=12.
sb, // sb=13.
vs // vs=14.
}; II переменная типа dni в момент объявления // перечисления не создается enum dni d; // объявление переменной d типа dni.
Над переменной перечисляемого типа возможны операции:
• операция присваивания, например
sell = sozd; d = vs;
• операции отношения, например
if (sell == sozd) …;
• любые операции, выполняемые над типом int.
Использование перечислений даст возможность применять вместо числовых значений смысловые идентификаторы, в результате чего облегчается программирование и повышается читабельность программы.
Структура — это поименованная совокупность данных, состоящая из фиксированного числа компонентов разных типов. Компоненты структуры называются полями.
Синтаксис объявления структуры:
struct.
{.
;
;
};
Например:
struct tip_rab // объявление типа структура tip_rab {.
int tabn; // элементы структуры.
char fio[20]; float zarp;
}rabl; // создается переменная rabl типа.
// struct tip_rab.
или:
struct tip_rab rab2, brigada[10]; // объявление II переменных типа структура tip_rab.
Для доступа к элементам структуры используются операторы:
- • прямого выбора поля структуры («.»);
- • косвенного выбора поля структуры («->»).
Операция «.» обеспечивает доступ к элементу структуры по имени переменной, реализующей структуру, например rabl. tabn=120; // элементу tabn структуры tip_rab // присвоено значение 120.
Операция «->» используется для доступа к элементу структуры при заданном указателе на структуру, например
// объявление указателя на структуру tip_rab struct tip_rab * pi;
II получение значения элемента tabn структуры tip_rab i = p->iteml;
To же самое действие можно выполнить с использованием операции «.» и операции косвенной адресации «*»: i = (*p).tabn;
Определение адреса поля структуры выполняется с помощью операции адресации: &prab -> tabn. Здесь операция -> имеет более высокий приоритет, чем операция &.
Над целыми структурами, имеющими один и тот же идентификатор типа, возможна операция присваивания, например: rabl = гаЬ2 ;
Тип «структура» является основным типом данных в экономических и управленческих задачах.
Объединение — это поименованная совокупность данных, состоящая из фиксированного числа компонентов разных типов, но активным может быть только один компонент. Многие синтаксические и функциональные свойства объединений совпадают со структурами. Например:
union tip_rab // объявление типа объединение.
{.
int tabn; // размер 2 байта.
char fio[20]; // размер 20 байт float zarp; // размер 4 байта.
};
union tip_rab rabl, rab2; // объявление переменных.
// типа tip_rab.
Размер объединения равен размеру максимального компонента объединения, в приведенном примере он равен 20 байтам. Переменная rabl может одновременно хранить в 20 байтах либо значение int, либо массив char, либо значение float. Операция sizeof (rabl) возвращает значение 20, но в том случае, когда rabl содержит объект типа int, 18 байтов остаются неиспользованными (туда помещаются символы-заполнители), аналогично, когда rabl содержит объект тина float, неиспользованными остаются 16 байтов.
Доступ к полям объединения выполняется так же, как и к полям структуры. Объединение может быть инициализировано только одним значением.
Пример 5.11.1
Ввести сведения о 15 студентах, включающие код студента, номер группы, код дисциплины и полученную оценку. Рассчитать средний балл, полученный студентами указанной группы, но указанной дисциплине.
#include int main ().
{.
struct student { int num; int grup; int exam; int ball;
// структура student включает поля: // код студента // номер группы // код дисциплины // оценка.
int gr, ex;
int kol =0; // kol — количество студентов.
float sr = 0; // sr — средний балл.
struct student st[15]; int i;
for (i = 0; i< 15; i++) // ввод сведений о студентах {.
printf («vvedite nomer»); scanf («%d», &st[i]. num);
printf («vvedite gruppu»); scant («%d», &st[i]. grup); printf («vvedite examen»); scant («%d», &st[i]. exam); printf («vvedite ocenku»); scant («%d», &st[i]. ball);
}.
printf («vvedite kod examena»); // ввод кода дисциплины scant («%d» / &ex);
printf («vvedite nomer gruppy»); // ввод номера группы.
scant («%d», &gr) ;
for (i = 0; i < 10; i + +).
if ((st[i]. grup == gr) && (st[i]. exam == ex)).
{.
sr += st[i]. ball; // вычисление суммы баллов kol++; // и количества студентов.
}.
if (kol ≠ 0) // если количество студентов не равно 0 printf («%f», sr / kol); // вывод среднего балла else.
printf («net dannyh»); // вывод сообщения.
// об отсутствии данных.
return 0;