Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курс ПЯВУ 2 сем / Практические / Пр №12.Структуры

.odt
Скачиваний:
12
Добавлен:
17.04.2015
Размер:
22.05 Кб
Скачать

Пр №12. Стуктуры.

План занятия.

    1. Декларация структуры студент.

    2. Декларация структуры комплексные числа.

    3. Присвоение структур.

    4. Инициализация структур.

        5. Определение размеров структур.

        6. Массив структур.

        7. Массивы структур и функции.

        8. Домашнее задание.

Объявление полей структуры возможно только без инициализации. Если несколько полей следующих друг за другом в описании структуры имеют один и тот же тип, то для их описания можно использовать синтаксис объявления нескольких переменных одного и того же типа. Типом поля может быть любой тип (как системный, так и пользовательский), описанный ранее.

Примеры структур

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

struct Point{

double x, y;

};

Структура в си, содержащая информацию об окружности (координаты центра и радиус):

struct Circle{

double x, y, radius;

};

Структура в си, содержащая информацию о студенте (фамилия, имя, отчество, номер зачетной книжки, средний балл):

struct Student{

char surname[15], name[15], patronymic[15];

unsigned number;

double rate;

};

Структура в си, содержащая информацию о группе студентов (название группы, количество студентов, список студентов (максимально 30)):

struct Group{

char name[10];

unsigned number;

struct Student list[30];

};

Объявление переменной определенной структуры осуществляется после описания данной структуры в следующем виде:

struct тип имя №1[= значение №1][,...];

struct Point pnt[3] = {{0,0},{1,0},{0,1}};

struct Circle c1 = {10.0,10.0,5.0},

c2 = {0.0,0.0,25.0};

struct Student st

= {"Иванов”,”Иван”,”Иванович”,959623,7.5};

struct Group gr ={

"97-BC”, 3, {

{"Иванов”, ”Иван”, ”Иванович”, 979601,8.0},

{"Петров”, ”Петр”, ”Петрович”, 979602,6.5},

{"Сидоров”,”Сидор”,”Сидорович”,979603,9.0}

}

};

От обязательно использования ключевого слова struct можно отказаться, если описывать структуру, используя оператор объявления типа typedef в следующем виде:

typedef struct [первичное имя типа] {...} имя типа;

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

Структура, содержащая информацию о книге (ФИО автора, название книги, год издания):

typedef struct {

char author[20], title[50];

unsigned year;

} BOOK;

Объявление переменной данного типа:

BOOK book = {"А. Дюма”,”Три мушкетера”, 1986};

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

имя_переменной.имя_поля

Сначала указывается имя переменной структуры, а затем, через точку, имя поля. С точки зрения языка С при таком обращении к полю его значение может выступать как LValue, так и RValue значения.

Примеры

Вычисление длины окружности, заданной переменной cir типа Circle:

double length = 2.0*3.1415*cir.radius;

//Декларация структуры студент.Ввод и вывод структур.

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int main()

{

struct student

{

char fio[30];// определено поле fio

char group[8];// определено поле group

int year;

int informatika, math, fizika, history;

};

student std;

printf("Ввести Студента\n");

printf("\n Ввести Ф И О ");

gets(std.fio);

printf("\n Ввести группу ");

scanf("%s",std.group);

printf("\n Ввести оценку по информатике ");

scanf("%i",&std.informatika);

printf("\n Ввести оценку по математике ");

scanf("%i",&std.math);

printf("\n Ввести оценку по физике ");

scanf("%i",&std.fizika);

printf("\n Ввести оценку по истории ");

scanf("%i",&std.history);

printf("ФИО %s\n",std.fio);

printf("Группа %s\n",std.group);

printf("Информатика %i \n",std.informatika);

printf("Математика %i \n",std.math);

printf("Физика %i \n",std.fizika);

printf("История %i \n",std.history);

system("pause");

return 0;

}

//Декларация, инициализация и вывод структур

#include<stdlib.h>

#include<math.h>

int main()

{

struct {

int a;

int b;

} x, y;

x.a = 10;

x.b=2;

printf("%d %d", x.a,x.b);

system("pause");

return 0;

}

// 10 2

//Присвоение структур.

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int main()

{

struct {

int a;

int b;

} x, y;

x.a = 10;

x.b=2;

y = x; /* присвоение структур */

printf("%d %d", y.a,y.b);

system("pause");

return 0;

}

// 10 2

//Инициализация структур.

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int main()

{

struct klass {

char name[20];

char klass_name;

float bal;

};

struct klass d, b[5], *c;

struct klass a = {"Sergey", 'B', 4.5 };

printf("%s %c %f", a.name,a.klass_name,a.bal);

system("pause");

return 0;

}

//Sergey B 4.5

//Определение размеров структур.

#include<stdio.h>

#include<stdlib.h>

int main()

{

struct student{

char fam[20];

char name[20];

char otch[20];

int rate; };

student petrov;

int i;

i=sizeof(struct student);

printf(" Vel= %i \n",i);

system("pause");

return 0;

}

//64

Массив структур.

//Массивы структур и функции.

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int main()

{

struct complex

{

float x;

float y;

};

complex p[10];

int i,n,nmax;

float max;

printf("Vvesti k-vo thisel\n");

scanf("%i",&n);

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

{

printf("Vvedite complex chislo\n");

scanf("%f%f",&p[i].x,&p[i].y);

}

max=pow(p[0].x*p[0].x+p[0].y*p[0].y,0.5);nmax=0;

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

if (pow(p[i].x*p[i].x+p[i].y*p[i].y,0.5)>max)

{

max=pow(p[i].x*p[i].x+p[i].y*p[i].y,0.5);nmax=i;

}

printf("Nomer maxsimalnogo modulya %i \n",nmax);

printf("Maxsimalnogo modulya %f \n",max);

system("pause");

return 0;

}

//n=5

//Vvedite complex chislo

// 3

//1+3i

//Vvedite complex chislo

//5 0.2

//5+0.2i

//Vvedite complex chislo

//-0.2 3

//-0.2+3i

//Vvedite complex chislo

//4.2 0.01

//4.2+0.01i

//Vvedite complex chislo

//-6.2 0.45

//-6.2+0.45i

//Nomer maxsimalnogo modulya 4

//Структуры и функции.

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

struct student

{

char fio[30];// опрределено поле fio

char group[8];// определено поле group

int year;

int informatika, math, fizika, history;

};

int main()

{

void vvodstr(student &std);

void vivodstr(student std);

int i,n;

student std;

student grup[5];

printf("Vvecti gruppy studentov\n");

scanf("%d",&n);

for(i=0;i<n;i++){

vvodstr(std);

grup[i]=std;

}

for(i=0;i<n;i++){

std=grup[i];}

vivodstr(std);

system("pause");

return 0;

}

void vvodstr(student &std)

{

printf("Ввести студента\n");

printf("\n Ввести ФИО ");

gets(std.fio);

printf("\n Ввести группу ");

scanf("%s",std.group);

printf("\n Ввести оценку по информатике ");

scanf("%i",&std.informatika);

printf("\n Ввести оценку по математике ");

scanf("%i",&std.math);

printf("\n Ввеси оценку по физике ");

scanf("%i",&std.fizika);

printf("\n Ввести оценку по истории ");

scanf("%i",&std.history);

};

void vivodstr(student std)

{

printf("ФИО %s\n",std.fio);

printf("Группа %s\n",std.group);

printf("Информатика %i \n",std.informatika);

printf("Математика %i \n",std.math);

printf("Физика %i \n",std.fizika);

printf("История %i \n",std.history);

};

1. Домашняя работа.

Разработать алгоритм и написать программу калькулятора вычисления: суммы,

разности, произведения, частного двух комплексных чисел триганометрическую

форму и экспоненциальную форму с помощью структур

и функций.

Пример: программа вычисления суммы двух комплексных чисел.

// Программа сложения двух комплексных чисел

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

int main()

{

// описание структуры complex

struct complex {

float re; // действительная часть

float im; // мнимая часть

};

char ch;

struct complex a, b, c; // объявление переменных типа complex

float temp; // промежуточная переменная

printf("Введите первое слагаемое: ");

printf("\n действительная часть = ");

scanf("%f",&temp);

a.re = temp;

printf("\n мнимая часть = ");

scanf("%f",&temp);

a.im = temp;

printf("Введите второе слагаемое: ");

printf("\n действительная часть = ");

scanf("%f",&temp);

b.re = temp;

printf("\n мнимая часть = ");

scanf("%f",&temp);

b.im = temp;

// складываем действительные части

c.re = a.re + b.re ;

// складываем мнимые части

c.im = a.im + b.im;

// вывод результатов на экран

printf("Результат сложения c=%f %s %f%s \n" ,c.re, " + " ,c.im ,"i");

system("pause");

ch=getchar();

return 0;

}

1

1

2

2

c=3+3i