Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 342; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.195.180 (0.006 с.) |