Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб2.doc
Скачиваний:
8
Добавлен:
11.11.2019
Размер:
138.24 Кб
Скачать

Лабораторная работа №2 Структуры. Указатели.

1. Программирование алгоритмов с использованием структур

Краткие теоретические сведения

Структура объединяет логически связанные данные разных типов. Структурный тип данных определяется описанием:

struct имя_структуры {

описание элементов;

};

Для выделения памяти под структуру надо определить структурную переменную:

struct имя_структуры имя_переменной;

При определении структур можно задавать начальные значения элементам структур. Для ввода значений элементов структур можно использовать оператор cin>> потокового ввода.

Над структурами допускаются следующие операции:

1) Взятие адреса структуры. Адрес структуры может быть получен путем применения операции указатель (&) к структурной переменной.

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

Структурная переменная может использоваться так же, как и переменные типов float,int,char и т.д.

Например:

struct gr /* имя структуры */

{ char fio[10]; /* элемент структуры */

int est[25]: /* элемент структуры */

int nomer; /* элемент структуры */

} gruppa1; /* имя структурной переменной */

struct gr gruppa2; /* объявление структурной переменной */

Если описатель структуры записан до размещения всех функций в исходном файле, то он будет доступен каждой из функций в этом файле. При определении структурной перемен­ной можно инициалиировать (станавливать значения полям структуры). Например

struct date { int day,month,year;};

d[5]={ { 1,3,1980},

{ 5,1,1990},

{ 1,1,2002}

};

Элементами структуры могут быть одна или несколько структурных переменных.

Пример на использование структур

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <iostream.h>

struct Spisok {

char Fio[20];

char Grup[10];

int Ot[3];

float S_Bal;

} *sved;

void Vvod(int nom,struct Spisok *sved)

{ cout << "\n Vvedi svedenia " << (nom+1);

cout << "\n FIO - "; gets(sved->Fio);

cout << " Nomer Gr - "; cin >> sved->Grup;

float s=0;

for(int i=0;i<3;i++) {

cout << "\n Otcenki - "; cin >> sved->Ot[i];

s+=sved->Ot[i];

}

sved->S_Bal=s/3.;

return; }

void main(void)

{ struct Spisok Stud[50]; int i,N; char Bukva;

clrscr();

cout << "\n Vvedi kol-vo < 50 "; cin >> N;

for(i=0;i<N;i++) Vvod(i,&Stud[i]);

cout << "\n Spisok Students";

for(i=0;i<N;i++)

printf("\n %20s %10s %4.2f",Stud[i].Fio,Stud[i].Grup,Stud[i].S_Bal);

cout << "\n Poisk FIO (bukva) "; cin >> Bukva;

cout << "\n Sveden Students";

int kod_p=0;

for(i=0;i<N;i++)

if(Stud[i].Fio[0]==Bukva){ kod_p=1;

printf("\n %20s %10s %4.2f",Stud[i].Fio,Stud[i].Grup,Stud[i].S_Bal); }

if(kod_p==0) cout << " Takix HET!";

cout << "\n Poisk zapisi";

Vvod(-1,sved);

kod_p=0;

for(i=0;i<N;i++)

if(memcmp(sved,&Stud[i],sizeof(sved))==0) { kod_p=1;

printf("\n Poisk \n %20s %10s",Stud[i].Fio,Stud[i].Grup); }

if(kod_p==0) cout << " Takix HET!";

getch();

}

ПРИМЕР.

/* Программа демонстрирует передачу в функцию пользователя sum * /

/* АДРЕСА структуры str */

/* адрес структуры str передается с помощью операции указатель */

/* у функции sum - один параметр, который описан как указатель * /

/* на структуру с шаблоном spis. При обращении к функции sum */

/* происходит присвоение значения адреса структурной переменной */

/* str, и с помощью указателя t можно обращаться к элементам */

/* структуры типа spis, например : t->vans и t->za */

#include <stdio.h>

#include <conio.h>

struct spis{

char *s_vans;

float vans;

char *s_za;

float za;

};

main()

{

static struct spis str={"сентябрь",

600,

"октябрь",

1000

};

float sum(),res;

res=sum(&str);

printf(" общее количество экземпляров=%8.0f штук",res);

getch();

}

float sum(t)

struct spis *t;

{ clrscr();

return(t->vans+t->za);

}

ПРИМЕР.

Вести сведения о студентах учебной группы, каждый элемент массива студенческой группы содержит:

а) фамилию и имя;

в) итоги сдачи экзамена по программированию.

Программа выводит информацию остуденте по его порядковому номеру в списке группы(индекс массива, содержащего введенную информацию)

Текст С-программы может иметь вид:

#include <stdio.h>

#include <conio.h>

struct student

{

char fio[10]; // поле для ФИО студента

int est1; // поле для оценки

} gruppa[25]; // массив для списка группы

void main(void)

{

int i,j,k,priznak;

clrscr();

printf("\n Формирование списка до 25 человек");

/*------Формирование списка----------*/

for (i=1;i<=25;i++)

{

printf("\n Введите сведения о студенте %d и\

\n признак режима работы программы (0-окончить ввод )\

\n",i);

printf("\n Фамилия и инициалы: ");

fflush(stdin); // функция очистки буфера ввода

gets(gruppa[i].fio);

printf("\n Введите оценкy по программированию: ");

fflush(stdin);

scanf("%d",&gruppa[i].est1);

k=i; // запоминаем текущий номер введенной

// информации

printf(" \n Признак? ");

scanf("%d",&priznak);

k=i;

if(!priznak)break;

}

/*---------Просмотр списка------------*/

for (i=0; i<25; i++)

{

printf("\n Сведения о каком студенте?\n");

scanf("%d",&j);

if(j>k)

{

printf("\n НЕТ СВЕДЕНИЙ! ");

continue; // в случае отсутствия информации

} // переход на следующий шаг цикла

printf(" \n СТУДЕНТ: %s \n",gruppa[j].fio);

printf(" \n ВЕСЕННЯЯ СЕССИЯ, ОЦЕНКА\

по ПРОГРАММИРОВАНИЮ: %d",gruppa[j].est1);

printf("\n Признак? ");

scanf("%d",&priznak);

if(!priznak)break;

}

puts("\n РАБОТА ПРОГРАММЫ ЗАВЕРШЕНА! Press any key...");

getch();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]