Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KL_PrJAVU230200.doc
Скачиваний:
22
Добавлен:
17.03.2015
Размер:
702.46 Кб
Скачать

Массив структур

Пример 3. Объявить массив структур статически, заполнить его данными с клавиатуры, а затем организовать в массиве поиск номера телефона абонента по его фамилии.

/* Массив структур. Обращение к полям структуры через

имя элемента массива */

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include <string.h>

struct Tel{

char name[25];

long number;

};

void main(void)

{

Teltel[5]; /* массив структур - 5 элементов */

charname[25];

inti;

intflag=0; //признак ситуации: абонент не найден

/* ввод данных в массив структур */

for(i=0; i<5; i++)

{

cout<<"\nвведите фамилию абонента";

cin>>tel[i].name;

cout<<"введите его номер";

cin>>tel[i].number;

}

cout<<"\nВыбор телефона по фамилии";

cin>>name;

/* поиск структуры по фамилии абонента */

for(i=0; i<5; i++)

if(!strcmp(name,tel[i].name)) //если строки совпали

{

cout<<"\n номер абонента “<< name ;

cout<<” равен "<<tel[i].number<<endl;

flag=1; //признак ситуации: абонент найден

}

if(flag==0)

cout<<"Абонент не найден"<<endl;

return;

}

Задание 1. Перепишите пример 3, выделяя память под массив динамически и обращаясь к полям структур через адреса структур.

Вложенные структуры

Структура, являющаяся полем другой структуры, на­зывается вложенной.

Заметим, что в характеристики абонента телефона, как правило, входит и адрес абонента. Опишем шаблон структуры Address следующим образом:

struct Address {

char street[25];

int house;

int flat;

};

После этого полное описание характеристик абонента телефона будет выглядеть так:

struct Sprav {

char name[25];

long number;

Address addr;

};

Доступ к вложенной структуре Address осуществляется через имя (или адрес) внешней структуры.

Пример 4. Объявить структуру с вложенной структурой. Заполнить поля структуры с помощью констант соответствующего типа.

Sprav sp;

strcpy(sp.name, “Иванов И.И.”);

sp.number=452230;

strcpy(sp.addr.street, “ пр. Машиностроителей ”);

sp.addr.house=17;

sp.addr.flat=98;

Битовые поля структур

Целочисленные данные могут быть помещены в маленький объем памяти с использованием битовых полей. Битовые поля структуры используются для плотной упаковки данных, имеющих небольшой диапазон изменения, например, для хранения флагов состояний, значение которых 0 или 1 и требует 1бита памяти.

В заголовочном файле dos.h описывается шаблон структуры ftime, поля которой содержат время и дату. Размер каждого поля определен в битах, при этом шесть данных занимают 4 байта памяти:

struct ftime {

unsigned ft_sec: 5;

unsigned ft_min: 6;

unsigned ft_hour: 5;

unsigned ft_day: 5;

unsigned ft_month: 4;

unsigned ft_year: 7; //год – 1980

};

Тип битового поля – целый, обычно unsigned, после двоеточия ставится размер поля в битах. Битовые поля располагаются от меньших номеров битов к большим. Действия над битами осуществляются дольше, чем над байтами, т.к. компилятор должен генерировать специальные коды, поэтому за экономию памяти платим большим кодом программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]