Тема: « Разработка программ, использующих структуры, объединения и перечисления » — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Тема: « Разработка программ, использующих структуры, объединения и перечисления »

2020-05-08 174
Тема: « Разработка программ, использующих структуры, объединения и перечисления » 0.00 из 5.00 0 оценок
Заказать работу

Цели:

-научиться создавать и использовать структуры, объединения и перечисления.

-изучить передачу структур в функции по значению и по ссылке.

-научиться создавать битовые поля в структурах.

 

Характер занятия: репродуктивный.

Форма организации: индивидуальная.

Обеспечение занятия: тетрадь с лекциями,  СИ, компьютер.

 

Требования к знаниям студентов

Перед выполнением практической работы студент должен

знать:

- отличия структуры от массива;

- отличия объединения от структуры и массива;

- отличия перечисления от базовых типов языка;

после выполнения практической работы студент должен

уметь:

- использовать структуры для создания записей данных;

- применять объединения для экономии памяти и сокращения кода программы;

- создавать перечисления и обращаться к его элементам;

- использовать структуры и объединения в качестве параметров функций.

 

Теоретический материал

Структуры — это наборы (иногда их называют агрегатами) логически связанных переменных, объединенных под одним именем, которые могут состоять из переменных различных типов данных. Структуры часто используются, чтобы определить записи, которые должны сохраняться в файлах, служить базой для создания более сложных структур данных, таких как связанные списки, очереди, стеки и деревья.

Описания структур

Рассмотрим следующее описание структуры:

struct card (char *face; char *suit;

};

Ключевое слово struct определяет структуру. Идентификатор card является именем-этикеткой структуры. Имя-этикетка именует структуру, и используется совместно с ключевым словом struct для объявления переменных типа структуры. В данном примере тип структуры — struct card. Переменные, объявленные внутри скобок структуры, являются элементами структуры.

Элементы одной структуры должны иметь уникальные имена, но две различных структуры могут содержать одинаковые имена. Каждое определение структуры должно заканчиваться точкой с запятой.

Элементы структуры могут быть переменными основных типов данных (то есть int, float и т.д.), или агрегатами, такими, как массивы или же другие структуры. Элемент структуры не может быть структурой того же типа, в которой он содержится, но его можно объявить как указатель на тип структуры, в которую он входит, такая структура, называется структурой, ссылающейся на себя.

Определение структуры не резервирует место под элементы структуры в памяти компьютера. Оно просто создает новый тип данных, который можно использовать для объявления переменных. Переменные структуры объявляются так же, как и переменные других типов. Объявление

struct card a, deck[52], *cPtr;

объявляет а — переменную типа struct card, deck — массив из 52 элементов типа struct card и cPtr — указатель на struct card. Можно объявить переменные данной структуры и по-другому:

struct card {

char *face;

char *suit; } a, deck[52], *cPtr;

Имя-этикетка не является для структуры обязательным. Если определение структуры не содержит имя-этикетку, переменные для этой структуры могут быть объявлены только в определении структуры, но не отдельным объявлением.

Следующие операции над структурами являются единственно допустимыми: присваивание переменных-структур переменным того же типа, взятие адреса (&) структуры, обращение к элементам структуры и применение операции sizeof для определения ее размера.

Нельзя сравнивать структуры, поскольку элементы структуры не обязательно хранятся в последовательных байтах памяти.

Инициализация структур

Структуры можно инициализировать, как и массивы, используя список инициализации:

struct card a = {"Three", "Hearts"};

создает переменную а типа struct card (структура определена выше) и присваивает элементу face значение "Three", а элементу suit значение "Hearts".

Если инициализаторов в списке меньше, чем элементов в структуре, остальным элементам автоматически присваивается значение 0 (или NULL, если элемент — указатель). Переменным-структурам, объявленным вне определения любой функции (т.е. глобально) присваиваются 0 или NULL, если они явно не инициализированы во внешнем объявлении. Структуры можно инициализировать и с помощью оператора присваивания. При этом можно либо присвоить переменной-структуре переменную того же типа, либо присвоить значения отдельным элементам структуры.

 

Доступ к элементам структур

Для обращения к элементам структур используются две операции: операция элемента структуры (.), также называемая операцией-точкой, и операция указателя структуры (->), также называемая операцией-стрелкой. Операция элемента структуры обращается к элементу через имя переменной структуры.

Например, для того чтобы напечатать элемент suit структуры а из предыдущего объявления, можно написать оператор

printf("%s", a.suit);

Предположим, что переменная aPtr была объявлена как указатель на struct card и ей был присвоен адрес структуры а. Чтобы напечатать элемент suit структуры а при помощи указателя aPtr, напишите оператор

Выражение aPtr->suit эквивалентно (*aPtr).suit, которое, обращаясь по адресу, содержащемуся в указателе, находит структуру а и обращается к элементу suit, используя операцию элемента структуры. Скобки в данном случае необходимы по той причине, что операция элемента структуры (.) имеет более высокий приоритет, чем операция косвенной адресации (*). Операции указателя структуры и элемента структуры, наряду с круглыми скобками и квадратными скобками ([]), использовавшимися для индексов массивов, являются операциями наивысшего приоритета и ассоциируются слева направо.

Программа на рис.1 демонстрирует использование операций элемента структуры и указателя структуры. С помощью операции элемента структуры элементам а присваиваются значения "Асе" и "Spades" соответственно. Указателю aPtr присваивается адрес структуры а. Оператор printf печатает элементы структуры а, используя операцию элемента структуры с именем переменной а, операцию указателя структуры с указателем aPtr, и операцию элемента структуры с указателем aPtr, к которому применена операция косвенной адресации.

/* Применение операций элемента структуры

и указателя структуры */

#include <stdio.h>

struct card {

char *face;

char *suit; };

main () {

struct card a;

struct card *aPtr;                                                           

a.face ="Ace";

a.suit ="Spades";

aPtr =&a;

printf("%s%s%s\n%s%s%s\n%s%s%s\n",      

a.face, " of ", a.suit,

aPtr->face, " of ", aPtr->suit,

(*aPtr).face, " of ", (*aPtr).suit);

return 0; }

Вывод на экран:

Ace of Spades Ace of Spades Ace of Spades

Рис. 1. Использование операций элемента структуры и указателя структуры

 


Поделиться с друзьями:

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.