Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Разработка программ с составными типами данныхСодержание книги
Поиск на нашем сайте
(2часа) Цель: выработать практические навыки в написании программ с использованием комбинированных типов данных. Теоретические сведения Структуры С поддерживает определённый пользователем составной тип, объявляемый с ключевым словом struct, который определяет структуры. Эти структуры подобны записям, используемым в других языках программирования. Структура содержит данные-члены, которые являются данными базовых типов, либо являются предварительно объявленными структурами. Структуры не могут содержать структуры своего типа, но могут содержать указатели на такие структуры. Объявление структур В С ключевое слово struct используется не только для объявления объектов структурного типа, но и для объявления нового (структурного) типа. Объявленный тип структуры можно использовать для объявления объектов структурного типа. Представим общий синтаксис для объявления структуры типа (stt) и приведём несколько примеров структур
После объявления типа (<strucType>), его можно использовать для объявления объектов, например sttype Astr, Mstr[5], *pstr; Объявлены объекты структурного типа: Astr - структура; Mstr[5]- массив из 5 -ти структур; pstr- указатель на структуру данного типа. Структура типа Point имеет два члена-данных типа float. Структура типа Person - пример структуры, которая содержит данные-члены, которые являются массивами: firstname []- массив из 12 символов, в котором хранится имя. lastname []- массив из 15 символов, в котором хранится фамилия. birthday типа int, в котором хранится год рождения. weight типа float, в котором хранится вес. Объявление структуры-переменной (объекта структурного типа) не отличается от объявления переменных с базовыми или предварительно определёнными типами.
В этом примере объявлены переменные- структуры Origin, StartPoint типа Point, массив Points [10], имеющий 10 элементов - структур типа Point, переменные Me и You типа Person, массив Us [30], имеющий 30 элементов- структур типа Person и указатель на тип Person. С позволяет инициализировать данные-члены структур. Инициализация осуществляется подобно инициализации массивов и следует тем же правилам. Общий синтаксис для инициализации данных-членов структуры: sttype strucVar ={value1,value2,...}; Компилятор присваивает значение value1 первому данному-члену структуры strucVar, value2 - второму данному-члену структуры strucVar и т.д. С требует соблюдения следующих правил: 1 Присваиваемые значения должны быть совместимы с соответствующими им данными-членами по типу, диапазону и количеству (для массивов). 2 Можно объявлять меньшее количество присваиваемых значений, чем количество данных. Компилятор присваивает нули остальным данным- членам структуры. 3 Нельзя указывать больше инициализирующих значений, чем количество данных-членов. 4 Значения из списка инициализации последовательно присваиваются данным-членам вложенных структур и массивов. Пример инициализации структуры - Point fPoint={12.4,34.5}; В этом примере объявлена переменная fPoint типа Point и инициализированы данных члены х, у значениями 12.4 и 34.5. Доступ к данным-членам осуществляется с помощью операции (.)"точка".
myPoint -структурная переменная, доступ к её данным-членам х, у осуществляется с помощью выражения myPoint. x и myPoint. y соответственно.
Пример
/* ЗАНЯТИЕ N 14 Разработал Петров Ю.В. Объявить составные типы данных, выполнить их инициализацию. Массив структур инициализировать с использованием операторов организации цикла. Получить доступ к элементам структур. Вывести значения элементов массива структур на экран с применением функции. */
#include <stdio.h> #include <string.h> #include <conio.h> #include <alloc.h>
#define N 20 #define M 5 typedef struct Adr //Adr -тип структуры { char town[N]; char *country; char region; float indeks; int kolvo; } adr; //adr -тоже тип структуры (синоним Adr) //input_st() -функция для инициализация структуры типа adr adr input_st(char *town, char *coun, char reg, float ind, int kol); void print_st(adr adr3); //Функция вывода элементов структуры
int main(void) { clrscr(); int a; float f1; char str[125]; //Буфер для ввода строки символов adr adress[M]; //Массив структур adr adr1,adr2={"Kiev","Ukr",'r',12.3,15}; //Явная инициализация adr1=adr2; //Инициализация adr1 присваиванием printf("Вывод элементов структуры "); print_st(adr1); //Вывод adr1 adr1=input_st("Kr","Ukr",'t',134.5,2); //Инициализация adr1 printf("Вывод элементов структуры "); print_st(adr1); //Вывод adr1 int i=0,j;
while (a&&i<M) //Ввод элементов массива структур { printf("Ввод города (char array[N]) "); scanf("%s",&adress[i].town); fflush(stdin); printf("Ввод страны (char *) "); scanf("%s",str); fflush(stdin); adress[i].country=(char*)malloc(strlen(str)+1); strcpy(adress[i].country,str); //adress[i].country=strdup(str); //Возможный вариант иниц. printf("Ввод кода региона (char) "); scanf("%c", &adress[i].region); fflush(stdin); printf("Ввод цифрового кода (float) "); scanf("%f",&f1); fflush(stdin); adress[i].indeks=f1; printf("Ввод количества (int) "); scanf("%i",&adress[i].kolvo); fflush(stdin); printf("\n\t\t\t Продолжить ввод? y/n: "); char c=getche(); printf("\n"); if (c=='n' || c=='N') a=0; i++; } //end while--------------------------------------------- printf("Вывод элементов структур\n "); j=i; for(i=0;i<j;i++) print_st(adress[i]); getche(); return 0; } //end main()-----------------------------------------------
adr input_st(char *t, char *c, char r, float f, int k) { adr ad; //Объявление локальной структуры strcpy(ad.town,t); //Копирование "t" в "ad.town" ad.country=(char*)malloc(strlen(c)+1); //Выделение памяти strcpy(ad.country, c); //Копирование "c" в "ad.country" // ad.country=strdup(c); //Возможный вариант инициализации ad.region=r; ad.indeks=f; ad.kolvo=k; return ad; //Возврат структуры из функции } //end input_st ()--------------------------------------- void print_st(adr adr3) //Функция вывода элементов структуры { printf("| %s ", adr3.town); printf("| %s ", adr3.country); printf("| %4c | %10f|%6i|\n",adr3.region, adr3.indeks, adr3.kolvo); } //end print_st()-----------------------------------------
/*Вывод элементов структуры | Kiev | Ukr | r | 12.300000| 15| Вывод элементов структуры | Kr | Ukr | t | 134.500000| 2| Ввод города (char array[N]) Don Ввод страны (char *) Ukr Ввод кода региона (char) t Ввод цифрового кода (float) 45.67 Ввод количества (int) 8 Продолжить ввод? y/n: y Ввод города (char array[N]) Khar Ввод страны (char *) Ukr Ввод кода региона (char) g Ввод цифрового кода (float) 67.84 Ввод количества (int) 4 Продолжить ввод? y/n: n Вывод элементов структур | Don | Ukr | t | 45.669998| 8| | Khar | Ukr | g | 67.839996| 4| */
Ход работы 1 Изучить теоретические сведения. 2 В соответствии с индивидуальным заданием разработать алгоритм решения задачи. Объявить составные (комбинированные) типы, массивы структур, использовать указатели в качестве членов структуры, объявить объединение и выполнить работу с объединением. Результаты инициализации, изменения членов комбинированных типов в процессе вычисления вывести на экран. 3 Разработать программу, набрать программу на компьютере, устранить ошибки. 4 Получить результат. 5 Оформить отчет. 6 Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме.
Требования к содержанию отчёта приведены в лабораторной работе №1.
Индивидуальное задание к лабораторной работе №14 взять из работы №3.
Контрольные вопросы для подготовки и самостоятельной работы 1 Какие типы данных могут быть членами структур? 2 Каков синтаксис объявления структур? 3 Как объявляются переменные (объекты) структурного типа? 4 Какие виды объектов структурного типа можно объявить? 5 Как производится инициализация данных-членов структуры? Каковы особенности инициализации массивов и структур-членов структуры (вложенных структур)? 6 Можно ли производить неполную инициализацию структуры (не для всех членов структуры)? 7 Какие правила инициализации данных-членов структур Вы знаете? 8 Как располагаются данные-члены структур в памяти? 9 Что такое объединение (union)? 10 Как располагаются в памяти данные-члены объединения? 11 Каков синтаксис объявления типа и объектов типа объединения? 12 В чём отличие объединения от структуры? 13 Как осуществляется доступ к данным-членам структуры, объединения? 14 Как осуществляется доступ к данным-членам структуры, расположенной в массиве структур? Лабораторная работа № 15
|
|||||||||||||||
Последнее изменение этой страницы: 2016-04-26; просмотров: 395; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.69.58 (0.01 с.) |