Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




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

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

                                                        описание полей;

                                                        };

между символами «}» и «;» иногда помещают список декларируемых структурных переменных, при этом «имя_структуры» можно опустить.

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

Пример определения структурного типа:

struct person

    {

char Fio[72];

      int Nom_Gr;

};

Интерпретация объекта типа struct person:

Fio Nom_Gr
72 2

длина в байтах 

Структурный тип "struct имя_структуры" можно использовать для декларации структур­ных переменных, массивов, функций и т.д.

struct person Teacher;       // структурная переменная

struct person Student[100];              // массив структур

struct person *Sved;                // указатель на структуру

Предыдущий пример можно записать кратко:

struct person {

                 char Fio[72];

                 int Nom_Gr;

                        } Teacher, Student[100], *Sved;

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

Примеры групповых операций:

- захват и освобождение памяти для объекта, представленного совокупностью необязательно одно­типных данных;

- запись и чтение данных, хранящихся на внешних носителях как физические и/или логические записи с известной структурой.

Обращение к элементам структур производится посредством:

а) операции принадлежности ( .) в виде:

имя_структуры . имя_элемента

или

 (*указатель_структуры) .имя_элемента

б) операции косвенной адресации (->) в виде:

указатель_структуры -> имя_элемента

Примеры обращения к полям описанной выше структуры:

к полю Fio:                               к полю Nom_Gr:  

Teacher.Fio                             Teacher.Nom_GR

  Student[15].Fio                       Student[15]. Nom_GR

  Sved->Fio                                Sved-> Nom_GR

 

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

Вести сведения о студентах учебной группы (не более 50):

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

- итоги сдачи экзаменов – три оценки.

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

 

#include <stdio.h>

#include <string.h>

#include <conio.h>

 

struct Spisok {

      char Fio[20];

      int Ot[3];

      float S_Bal;

              } *sved;                    // Указатель на структуру

 

 


void Vvod(int nom,struct Spisok *sved)

{   

printf( "\n Vvedi svedenia %d ", (nom+1));

puts("\n FIO - ") ; 

fflush(stdin);

gets(sved->Fio);     // Используем операцию косвенной адресации (->)

float s=0;

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

{

    puts("\n Otcenki - "); scanf(“%d”, 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,Fio_p[20];

clrscr();

puts("\n Vvedi kol-vo < 50 ");

scanf(“%d”,&N);

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

Vvod(i,&Stud[i]);              // Вводим поэлементно

puts("\n Список студентов ”);

for(i=0;i<N;i++)           // Используем операцию принадлежности (.)

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

puts("\n Поиск сведений по первой букве. \n Введите букву ");

scanf(“%c”, &Bukva);

puts("\n Сведения: ");

int kod_p=0;

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

    if(Stud[i].Fio[0]= =Bukva)

{

kod_p=1;

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

 }

if(kod_p==0) puts( "\n Таких НЕТ!");

getch();

}

 

      


Варианты индивидуальных заданий

В программах организовать ввод информации о студентах:

- фамилия и инициалы;

- год рождения;

- номер группы;

- оценки за первый семестр: физика, математика, информатика;

- средний балл.

 

1. Распечатать анкетные данные студентов, сдавших сессию на 4,5.

2. Распечатать анкетные данные студентов-отличников, фамилии которых начинаются с интересующей вас буквы.

3. Распечатать анкетные данные студентов-отличников из интересующей вас группы.

4. Распечатать анкетные данные студентов, фамилии которых начинаются с буквы А, и сдавших математику на 4 и 5.

5. Распечатать анкетные данные студентов, имеющих оценку 3 по физике и оценку 5 по остальным предметам.

6. Распечатать анкетные данные студентов интересующей вас группы. Фамилии студентов начинаются с букв В, Г и Д.

7. Распечатать анкетные данные студентов, не имеющих оценок 3 и 2 по информатике и математике.

8. Вычислить общий средний балл всех студентов и распечатать список студентов со средним баллом выше общего среднего балла.

9. Вычислить общий средний балл всех студентов и распечатать список студентов интересующей вас группы, имеющих средний балл выше общего среднего балла.

10. Распечатать анкетные данные студентов интересующей вас группы, имеющих оценку 2.

11. Распечатать анкетные данные студентов интересующей вас группы, имеющих оценку 5 по информатике.

12. Распечатать анкетные данные студентов, имеющих оценку 4 по физике и оценку 5 по высшей математике.

13. Вычислить общий средний балл студентов интересующей вас группы и распечатать список студентов этой группы, имеющих средний балл выше общего.

14. Распечатать анкетные данные студентов-отличников интересующей вас группы.

15. Распечатать анкетные данные студентов интересующей вас группы, имеющих средний балл выше введенного с клавиатуры.

16. Распечатать анкетные данные студентов интересующей вас группы, имеющих оценку 4 по физике и оценку 5 по высшей математике.

17. Распечатать анкетные данные студентов, упорядоченные по алфавиту.

18. Распечатать анкетные данные студентов, упорядоченные по году рождения.

19. Распечатать анкетные данные студентов, упорядоченные по номеру группы.

20. Распечатать анкетные данные студентов, упорядоченные по среднему баллу.

 

Контрольные вопросы

 

1. Как описываются структуры в языке С?

2. Что такое структурная переменная?

3. Поясните термин “указатель на структуру”.

4. Как обратиться к полю структурной переменной?

5. Как организовать массив структурных переменных?



ЛАБОРАТОРНАЯ РАБОТА № 7

 

Программирование алгоритмов с использованием файлов

Цель работы:

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

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 177.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...