![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование указателей для работы с составными типами данныхСодержание книги
Поиск на нашем сайте
(2часа) Цель работы: выработать практические навыки в использовании указателей при работе с составными (комбинированными) типами данных. Теоретические сведения Можно объявить указатели на структуры и получить доступ к данным-членам этих структур, используя указатели. С требует, чтобы при этом использовалась операция доступа к указателю (->) вместо операции доступа (.) "точка". Общий синтаксис для объявления указателя на переменную структурного типа тот же, что и для обычной переменной. Пример объявления указателя на переменную-структуру и использования его для доступа к данным-членам этой структуры.
В примере объявлена структура myComp или MyComp с членами данных my_real и my _ mag типа float. В функции main() объявляется и инициализируется переменная-структура comvar. В функции также объявляется указатель pComp на тип myComp и инициализируется адресом переменной compvar. При выводе в поток cout используется операция -> для доступа с помощью указателя pComp к данным-членам my_real и my_mag переменной-структуры compvar. Пример /* ЗАНЯТИЕ N 15 Разработал Петров Ю.В. Объявить структуры и указатели на них, выполнить инициализацию. Массив указателей на структурный тип инициализировать с выделением памяти в куче. Получить доступ к элементам структур с использованием указателей. Вывести значения элементов массива структур на экран с применением функции. Структура содержит фамилию и дату рождения (число, месяц, год) студента. Ввести информацию о студентах и найти данные о первом в массиве структур студенте, который родился заданного числа.*/ #include <stdio.h> #include <conio.h> #define N 3 #define M 20 struct stud { char name[M]; int day,month,year; }; stud data[N]; //Глобальный массив из N структур типа stud //Функция поиска данных в глобальный массиве data[i].day==j) int poisk(int j); //print_st() -Функция вывода элементов структуры из глобальнго void print_st(int num); //массива, num -кол. структур для вывода //init_loc() -функция для инициализация структуры типа stud stud *init_ptr(void); void print_ptr(stud *); //Функция вывода элементов структуры
void main() { int i=0,j,a; clrscr(); stud arrloc[N]; //Массив из N структур stud *dloc[N]; //Массив указателей на структурный тип stud stud *pstr; //Указатель на структурный тип stud pstr=arrloc; //Аналогично pstr=&arrloc[0]; while (a&&i<N) //Ввод элементов массива структур arrloc[N] { printf("Введите фамилию студента: "); scanf("%s",pstr->name); fflush(stdin); printf("Введите дату рождения(чч мм гг): "); scanf("%d%d%d",&pstr->day,&pstr->month,&pstr->year); fflush(stdin); // printf("%-15s - %2d.%2d.%4d\n",pstr->name,pstr->day, // pstr->month,pstr->year); //Контроль значений при вводе printf("t\t Продолжить ввод? y/n "); char c=getche(); printf("\n"); if (c=='n' || c=='N') a=0; pstr++;//Переход к следующей структуре в массиве arrloc[N] i++; } //end while--------------------------------------------- printf("Вывод значений элементов массива структур arrloc[i]\n "); printf("с использованием указателя\n "); j=i; pstr=&arrloc[0]; for(i=0;i<j;i++) { print_ptr(pstr); dloc[i] = new stud; //Выделение памяти для структуры в "куче" dloc[i] = pstr; //Инициализация элементов локального массива pstr++; } printf("Ввод недостающих значений элементов массива структур\n "); printf("с использованием массива указателей\n "); for (i=j; i<N; i++) dloc[i]=init_ptr(); //Выделение памяти для структуры в функции printf("Вывод значений элементов массива структур\n "); printf("с использованием массива указателей\n "); for (i=0; i<N; i++) { print_ptr(dloc[i]); data[i] = *dloc[i]; //Инициализация элементов глобального } //массива cтруктур printf("Вывод (N-2) первых значений элементов глобального \ массива структур\n"); print_st(N-2); printf("Введите день для поиска первого в массиве структур \ студента: "); scanf("%d",&j); fflush(stdin); a=poisk(j); if (a!=-1) print_ptr(&data[a]); else printf("Нет таких студентов "); for (i=0; i<N; i++) delete dloc[i]; //Освобождение памяти в "куче" getch(); }//End main()----------------------------------------------------------
int poisk(int j) //Функция поиска данных (data[i].day==j) {int a=-1; //в глобальном массиве структур data[i] for (int i=0; i<N; i++) if (data[i].day==j) {a=i; return a;} return a; }//------------------------------------------------------------ //print_st() -Функция вывода элементов структуры из глобальнго void print_st(int num) //массива, num -количество { for (int i=0; i<num; i++) //структур для вывода printf("%-15s - %2d.%2d.%4d\n",data[i].name,data[i].day, data[i].month,data[i].year); }//------------------------------------------------------------ //init_loc() -функция для инициализация структуры типа stud stud *init_ptr(void)
{ stud *pst = new stud; //Выделение памяти в "куче" printf("Введите фамилию студента: "); scanf("%s",&pst->name); printf("Введите дату рождения(чч мм гг): "); scanf("%d%d%d",&pst->day,&pst->month,&pst->year); return pst; }//------------------------------------------------------------ void print_ptr(stud *pdt) //Функция вывода элементов структуры { printf("%-15s - %2d.%2d.%4d\n",pdt->name,pdt->day, pdt->month,pdt->year); }//------------------------------------------------------------
/* Введите фамилию студента: Petrov Введите дату рождения(чч мм гг): 12 7 1980 Продолжить ввод? y/n y Введите фамилию студента: Sidorov Введите дату рождения(чч мм гг): 24 8 1983 Продолжить ввод? y/n n Вывод значений элементов массива структур arrloc[i] с использованием указателя Petrov - 12. 7.1980 Sidorov - 24. 8.1983 Ввод недостающих значений элементов массива структур с использованием массива указателей Введите фамилию студента: Ivanov Введите дату рождения(чч мм гг): 24 5 1982 Вывод значений элементов массива структур с использованием массива указателей Petrov - 12. 7.1980 Sidorov - 24. 8.1983 Ivanov - 24. 5.1982 Вывод (N-2) первых значений элементов глобального массива структур Petrov - 12. 7.1980 Sidorov - 24. 8.1983 Введите день для поиска первого в массиве структур студента: 24 Sidorov - 24. 8.1983 */ Ход работы 1 Изучить теоретические сведения. 2 В соответствии с индивидуальным заданием разработать алгоритм решения задачи. Объявить комбинированные типы, массивы структур, указатели на структуру. Использовать указатели в качестве членов структуры, а также для доступа к членам структуры и работы с ними. Объявить объединение и выполнить работу с объединением с использованием указателей. Результаты инициализации, изменения членов комбинированных типов вывести на экран. 3 Разработать и набрать программу на компьютере, устранить ошибки. 4 Получить результат. 5 Оформить отчет. 6 Подготовиться к защите лабораторной работы, изучив контрольные вопросы по данной теме. Требования к содержанию отчёта приведены в лабораторной работе №1. Индивидуальное задание к лабораторной работе №15 взять из работы №3. Контрольные вопросы для подготовки и самостоятельной работы 1 Можно ли использовать указатели в качестве данных-членов структур? 2 Можно ли использовать массивы и структуры в качестве данных-членов структур (вложенные объявления)? 3 Можно ли использовать в качестве вложенных структуры объявляемого (своего) типа, а также указатели на структуры своего типа? 4 Как объявить указатель на структуру, массив указателей на структуры? Существуют ли различные варианты объявления? 5 Можно ли использовать typedef для объявления типа структуры? 6 Как получить доступ к элементу структуры с помощью указателя? 7 Как осуществляется доступ к данным-членам структуры при использовании массива указателей на структуры? 8 Можно ли использовать различные классы памяти применительно к переменным структурного типа? 9 Обязательно ли указывать ключевое слово struct при объявлении структурного типа, переменных структурного типа? 10 Можно ли хранить адрес структуры в самой структуре?
Лабораторная работа № 16
|
||||||||||
Последнее изменение этой страницы: 2016-04-26; просмотров: 354; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.142.250.57 (0.01 с.) |