Содержание
- 2. Элементы ЯПВУ Структуры C / С++ struct [ ] { ; · · · · ·
- 3. C / С++ Элементы ЯПВУ Структуры Примеры объявления структур Вариант 1 – объявление структуры с одновременным
- 4. C / С++ Элементы ЯПВУ Структуры Инициализация структуры struct { char fio[40]; int date, zip; double
- 5. C / С++ Элементы ЯПВУ Структуры Присваивание структур При выполнении операции присваивания для переменных одинакового структурного
- 6. C / С++ Элементы ЯПВУ Объединения Объединения (union) – это частный случай структуры, все поля которой
- 7. C / С++ Элементы ЯПВУ Битовые поля Битовые поля – это особый вид полей структуры. Они
- 8. C / С++ Элементы ЯПВУ Перечисления Перечисления (enum) – это набор именованных констант. enum [ ]
- 9. C / С++ Элементы ЯПВУ. Переименование типов Переименование типов (typedef) – задание типу данных нового имени.
- 10. Элементы ЯПВУ Пользовательские типы данных C / С++ Практические занятия Найти ошибки Пример 3 #include #include
- 11. Элементы ЯПВУ Пользовательские типы данных C / С++ Практические занятия Объяснить тексты программ Пример 1 #include
- 12. Элементы ЯПВУ Пользовательские типы данных C / С++ Практические занятия Найти и объяснить ошибки Пример 5
- 14. Скачать презентацию
Элементы ЯПВУ
Структуры
C / С++
struct [<имя_типа>]
{ <тип_поля_1> <имя_поля_1>;
Элементы ЯПВУ
Структуры
C / С++
struct [<имя_типа>]
{ <тип_поля_1> <имя_поля_1>;
<тип_поля_N> <имя_поля_N>;
} [<переменные_структуры>];
Структура (struct) состоит из фиксированного числа элементов – полей. В отличие от массивов, поля структуры могут быть различного типа. Объявление (деклари-рование) структуры описывает шаблон, по которому строятся переменные структуры (при объявлении структуры память не выделяется, она будет выделена при объявлении переменных этого типа структуры). В С++ структура может быть классом и обладать всеми его свойствами.
Формат объявления переменных структуры:
struct <имя_типа> <список_переменных_структуры> ;
где – имя_типа – идентификатор типа структуры (ттетег структуры) ,
– struct – ключевое слово описания структуры,
– тип_поля_N имя_поля_N – список описаний N полей, разделен-ных точкой с запятой – char fio[60]; Поля структуры могут быть любого типа, кроме типа этой же структуры, но могут быть указателями на него.
– переменные_структуры – список переменных или указателей.
Могут быть опущены или тег структуры, или её переменные, но не оба одновременно.
C / С++
И+ПРГ
C / С++
Элементы ЯПВУ
Структуры
Примеры объявления структур
Вариант 1 – объявление
C / С++
Элементы ЯПВУ
Структуры
Примеры объявления структур
Вариант 1 – объявление
одновременным объявлением пере-менных:
struct addr
{ char name[40];
char street[40];
char city[20];
char state[3];
unsigned long int zip, date;
} addr_info, binfo, dinfo;
Вариант 2 – объявление структуры без объявления переменных, а затем объявление переменных отдельно:
struct addr
{ char name[40];
char street[40];
char city[20];
char state[3];
unsigned long int zip, date;
};
struct addr addr_info, dibfo;
Вариант 3 – объявление структуры с
одновременным объявлением только одной переменной (тег опускается):
struct
{ char name[40];
char street[40];
char city[20];
char state[3];
unsigned long int zip, date;
} addr_info;
struct
{ char name[40];
char street[40];
char city[20];
char state[3];
unsigned long int zip, date;
} addr_inf[100], *ps;
Вариант 4 – объявление массива структур и указателя на структуру:
C / С++
И+ПРГ
C / С++
Элементы ЯПВУ
Структуры
Инициализация структуры
struct
{ char fio[40];
int date,
C / С++
Элементы ЯПВУ
Структуры
Инициализация структуры
struct
{ char fio[40];
int date,
double salary;
} worker={"КалмыковВ.", 31, 249030, 6.400,00};
Для инициализации структуры значения её элементов (полей) перечисляют при объявлении переменной в фигурных скобках в порядке их описания.
struct complex
{ float real, im;
} compl [2][3]= {
{{1,1}, {1,1}, {1,1}},
{{2,2}, {2,2}, {2,2}}
};
При инициализации массивов структур надо заключать в фигурные скобки каждый элемент массива, т.к. многомерный массив – это массив массивов.
// строка 1, т.е. массив compl[0]
// строка 2, т.е. массив compl[1]
Доступ к полям структуры
Доступ к элементам структуры осуществляется через операторы:
. (точка) - имя_структуры.имя_поля - доступ через имя структуры. Пример: addr.sity = "Омск";
-> (стрелка) - имя_указателя->имя_поля - доступ через указатель. Пример: ps->street = "Онежская";
C / С++
C / С++
И+ПРГ
C / С++
Элементы ЯПВУ
Структуры
Присваивание структур
При выполнении операции присваивания для переменных
C / С++
Элементы ЯПВУ
Структуры
Присваивание структур
При выполнении операции присваивания для переменных
Пример: После присвоения в y.a хранится значение 10. Массивы структур При выполнении операции присваивания для переменных одинакового структурного типа происходит поэлементное копирование, нет необходимости присваивать значения каждого элемента в отдельности. Вначале объявляют структура, а затем объявляют массив этого же типа. Указатели на структуры srtuct addr *addr_pointer; C / С++ И+ПРГ
#include
int main(void)
{
struct
{ int a;
int b;
} x, y;
x.a = 10;
y = x; // присваивание одной структуры другой
printf ("%d", y.a);
return 0;
}
struct addr addr_list[100]; - создает 100 наборов переменных, каждый организован по структуре addr.
Для получения доступа к определенной структуре указывается имя массива с индексом:
printf ("%1u"', addr_list[2].zip);
Индексирование массива начинается с 0.
Пример: в результате выполнения выражения addr_list[2].name[0] = 'X'; первому символу поля name, находящегося в третьей структуре из addr_list, присваивается значение 'X'.
Они используются обычно в двух случаях: когда структура передается функции с помощью вызова по ссылке, и когда создаются связанные списки и др. структуры с динамическими данными.
C / С++
Элементы ЯПВУ
Объединения
Объединения (union) – это частный случай структуры,
C / С++
Элементы ЯПВУ
Объединения
Объединения (union) – это частный случай структуры,
union [<имя_типа>]
{ <тип_поля_1> <имя_поля_1>;
· · · · · · · · · · · · · · · · · · · · · · · · ·· · · ·
<тип_поля_N> <имя_поля_N>;
} [<переменные_объединения>];
Формат объявления переменных объединения:
union <имя_типа> <список_переменных_объединения>;
где – имя_типа – идентификатор типа объединения (ттетег) ,
– union – ключевое слово описания объединения,
– тип_поля_N имя_поля_N – список описаний N полей, разделен-ных точкой с запятой – int dh;.
Объединения часто используют в качестве поля структуры, а так же когда надо выполнить специфическое преобразование типов, например используя объединения можно манипулировать байтами, составляющими значение типа double, чтобы менять его точность или выполнять какое-либо необычное округление.
C / С++
И+ПРГ
C / С++
Элементы ЯПВУ
Битовые поля
Битовые поля – это особый вид
C / С++
Элементы ЯПВУ
Битовые поля
Битовые поля – это особый вид
Битовое поле может быть членом структуры или объединения и сочетаться с другими типами.
Формат описания битового поля:
<имя_типа> <имя_поля> : <длина_поля>
где – имя_типа – идентификатор типа битового поля,
– имя_поля – идентификатор битового поля,
– длина_поля – количество бит, занимаемое полем (целая положительная константа).
Тип битового
поля может быть:
int,
signed,
unsigned,
bool (в С++).
Пример: байт состояния адаптера модема
struct status_type
{ unsigned delta_cts : 1;
unsigned delta_dsr : 1;
unsigned tr_edge : 1;
unsigned delta_rec : 1;
unsigned cts : 1;
unsigned dsr : 1;
unsigned ring :1;
unsigned rec_line :1;
} status;
Присвоение значения битовому полю:
status.ring = 0;
Если нужны не все поля – ненужные до нужных объявляются как одно поле, но не именуются, а после - опускаются.
struct status_type
{ unsigned : 4;
unsigned cts : 1;
unsigned dsr : 1;
} status;
Ограничения: нельзя получить адрес битового поля; нет массивов битовых данных; и др.
C / С++
И+ПРГ
C / С++
Элементы ЯПВУ
Перечисления
Перечисления (enum) – это набор именованных констант.
C / С++
Элементы ЯПВУ
Перечисления
Перечисления (enum) – это набор именованных констант.
enum [<имя_типа>]
{ <список_констант>} [<переменные_перечисления>];
где – имя_типа – идентификатор типа объединения (ттетег) ,
– enum – ключевое слово описания перечисления,
– список_констант – список целочисленных констант. При отсутствии инициализатора значение первой константы = 0, остальных +1.
Формат объявления переменных:
enum <имя_типа> <переменные_перечисления>;
Примеры: enum coin {penni, nickel, dime, quarter, half_dollar, dollar};
enum coin money; а значить можно выполнить:
money = dime; if (money == quarter) printf("Денег – четверть доллара");
Оператор printf ("%d %D", penny, dime); выведет на экран 0 и 2.
Инициализация: enum coin {penny=2, nickel, dime, quarter=100, half_dollar, dollar};
Значения элементов будут:
penny 2
nickel 3
dime 4
quarter 100
half_dollar 101
dollar 102
Имена перечисляемых констант должны быть уникальными, а значения могут совпадать.
При выполнении арифметических операций перечисления преобразуются в целые числа.
C / С++
И+ПРГ
C / С++
Элементы ЯПВУ.
Переименование типов
Переименование типов (typedef) – задание типу
C / С++
Элементы ЯПВУ.
Переименование типов
Переименование типов (typedef) – задание типу
typedef <тип> <новое_имя_типа> [<размерность>]
где – тип – любой тип данных языка С,
– новое_имя_типа – новое имя для этого типа,
– typedef – ключевое слово переименования типа,
– размерность – размерность нового типа данных.
Пример:
typedef char SIMB[40]; //SIMB - массив из сорока символов
SIMB person; //переменная person - тоже массив из сорока символов
Это эквивалентно объявлению - char person[40];.
typedef используется для:
Задания типам с длинными описаниями (именами) коротких псевдонимов.
для облегчения переносимости программ – если машинно-зависимые типы данных объявить через typedef, то при переносе программы надо изменить только эти операторы.
C / С++
И+ПРГ
Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Найти ошибки
Пример 3
#include
Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Найти ошибки
Пример 3
#include
#include
void main()
{ clrscr();
struct growth {char *name;
int value;};
growth man;
man->value = 45;
man->name = "Anton";
cout<
<
}
Пример 4 Неправильное объявление элемента структуры. Неправильное объявление элемента структуры. C / С++ И+ПРГ
#include
#include
void main()
{ clrscr();
struct book {char title[10]; char auther[10]; }; struct book *lib;
gets (book.title);
gets (book.auther);
cout <
Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Объяснить тексты программ
Пример 1
Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Объяснить тексты программ
Пример 1
#include
#include
void main()
{ clrscr();
struct man {int value; char name;};
man my;
my.value = 45;
my.name = 'Anton';
cout<
Пример 2 C / С++ И+ПРГ
#include
#include
void main()
{ clrscr();
struct my_struct {int a; char b[10];};
struct new_struct
{ int b;
my_struct c;
};
new_struct f[2];
f[1].c.b[5] = 'g';
}
Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Найти и объяснить ошибки
Пример
Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Найти и объяснить ошибки
Пример
#include
#include
void main()
{ clrscr();
struct my
{ int s;
struct {char b};};
struct example(int g;);
};
}
Пример 6 Попытка инициализировать поля структуры в декларации. Попытка вложенного объявления структур. C / С++ И+ПРГ
#include
#include
void main()
{ clrscr();
struct example
{ int b=2;
char c='a';
};
}