Сложные типы данных: структуры

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

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

скаляры и массивы, в том числе и другие структуры (подструктуры). Комбинируя массивы, структуры, объединения, можно создавать сложные типы данных,

позволяющие моделировать сложные типы данных.

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

Спецификатор объявления структуры: struct.

Форма объявления структурного типа:

struct имя_структурного_типа { тип_1 поле_1; тип_2 поле_2; … тип_n поле_n; } переменная_1, переменная_2; Пример: struct StudentStruct { char fio[50]; int Years; int number; } stud_first, all_student [5];  

В примере объявлена переменная структурного типа stud_first и массив

переменных структурного типа all_student размерностью 5.

После объявления структуры и переменных данного типа возможно обращение к полям структуры, посредством следующих операторов:

stud_first.fio = "Nikolaev E.I. "; stud_first.Years = 23; stud_first.number = 33; // или all_student[0] = stud_first; all_student[1].fio = "Ivanov E.A. "; all_student[1].Years = 18; all_student[1].number = 1;

Задание 6.Выполните задание в соответствие с индивидуальным вариантом (в программе обязательно должны использоваться массивы структур):

6.1. Объявите структуру STUDENT, поля которой отображают фамилию, имя и отчество студента, а также порядковый номер в списке группы. Затем объявите массив размерности пять переменных типа STUDENT. В цикле осуществите заполнение массива переменных типа STUDENT значениями. Затем у пользователя запросите порядковый номер и произведите поиск студента в массиве и вывод всей информации о нем на экран.

6.2. Объявите структуру AUTO, поля которой отображают марку, ФИО владельца и стоимость автомобиля. Затем объявите массив размерности пять переменных типа AUTO. В цикле осуществите заполнение массива переменных типа AUTO значениями. Затем у пользователя запросите стоимость и произведите поиск всех машин стоимостью более указанной и вывод всей информации о таких машинах на экран.

6.3. Объявите структуру DIGIT, поля которой отображают три числа целого типа. Затем объявите массив размерности пять переменных типа DIGIT. В цикле осуществите заполнение массива переменных типа DIGIT значениями. Затем у пользователя запросите число и произведите поиск всех элементов массива, для которых сумма трех полей структуры DIGIT меньше введенного числа. Найденные тройки чисел выведите на экран.

6.4. Объявите структуру TRADE, которая содержит поля: наименование товара, цена, код поставщика. Организуйте инициализацию массива размерности семь переменных типа TRADE. Выведите на экран все товары с ценой, большей 50.25.

6.5. Объявите структуру WEEK, которая содержит поля: номер дня недели, название дня недели. Организуйте инициализацию массива размерности семь переменных типа WEEK. Программа должна запросить номер дня недели, затем в массиве должен осуществиться поиск элемента-структуры с требуемым полем-номером дня. После нахождения вывести название дня недели.

6.6. Объявите структуру DATA, которая содержит поля: номер, наименование изделия. Организуйте инициализацию массива размерности семь переменных типа DATA. Выведите на экран все изделия с номером больше введенного пользователем.

6.7. Объявите структуру NOTE, которая содержит поля: номер записи, месяц, число. Организуйте инициализацию массива размерности семь переменных типа NOTE. Пользователь вводит месяц и число. Программа выводит все записи для данного месяца с датой позже указанной.

6.8. Объявите структуру GAME, которая содержит поля: наименование игры, цена игры, количество дисков. Организуйте инициализацию массива размерности семь переменных типа GAME. Пользователь вводит число дисков. Программа выводит информацию обо всех играх, продаваемых комплектами дисков в том количестве, в котором указал пользователь.

6.9. Объявите структуру FLAT, которая содержит поля: номер по порядку,

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

размерности семь переменных типа FLAT. Пользователь вводит метраж.

Программа выводит информацию обо всех квартирах, стоимость которых меньше указанной.

6.10. Объявите структуру AUTO, которая содержит поля: номер по порядку, стоимость машины, марку машины. Организуйте инициализацию массива размерности семь переменных типа AUTO. Программа выводит информацию обо всех автомобилях, стоимость которых меньше средней стоимости авто в массиве.

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

1. Что такое структурный тип данных? Как объявить тип-структуру?

2. Как происходит обращение к полям переменной-структуры?

3. Как происходит обращение к полям переменной-массиву структур?

4. Опишите, какие типы допускается использовать для создания полей структуры?

5. Можно ли одну переменную-структуру присвоить другой?

7 Функции в языке C/С++

Краткие теоретические сведения.Язык С/С++ представляет программисту большие возможности в определении структуры программы. Качество программы зависит от квалификации программиста, от его умения разбить всю программу на логически обоснованные функции (модули).

Функции – это фундаментальные конструкции С, связанные с решением

поставленной задачи или ее части. Функция – это самостоятельная единица

программы. Функции для решения определенного рода задач можно выделить в

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

Библиотеки функций позволяют:

1) использовать одни и те же функции разными программистами;

2) повысить структурированность и наглядность программ;

3) облегчить чтение, освоение и корректировку кода программ;

Любая программа на языке С содержит одну главную функцию main и любое количество других функций.

При использовании функций программисту следует учитывать:

1) классы памяти и видимость переменных функций;

2) определение функций (тексты функций);

3) объявление функций;

4) вызов функций;

5) способы обмена данными различных типов между функциями.

Определение функций и возвращаемый ими результат. Определение функции – это ее текст на языке С. В нем определяется имя функции, формальные параметры, операторы тела функции и тип возвращаемого результата. Каждая функция должна иметь заголовок и тело. Структура каждой функции идентична структуре главной функции main.

Структура заголовка функции:

[тип_возвращаемого_значения] имя_функции ([список_форм_параметров])

тип_возвращаемого_значения – определяет тип результата, возвращаемого

функцией с помощью оператора return;

имя_функции – идентификатор, с помощью которого функция вызывается на

выполнение;

список_форм_параметров – определяет типы и имена формальных параметров –

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

Элементы списка формальных параметров функции разделяются запятыми.

Каждый элемент списка формальных параметров – это объявление одного

формального параметра функции в виде:

тип формальный_параметр

Примеры заголовков функций:

int Sum(int x, int y, int z);

double Percent(int Basa, float perc);

float f2(int c);

void print_2();

Если функция возвращает результат, то такую функцию можно использовать в правой части оператора присвоения и во всех выражениях, где допустимо

использование данного типа. Например:

int a = Sum (2, 3, 5);

double res; res = Percent (5, 0.4);

float func = f2 (0);

Если указано, что функция возвращает значение типа void, это значит, что

функция не формирует и не возвращает значения результата с помощью оператора return. То есть функцию нельзя использовать в выражениях. В теле такой функции могут быть операторы return, но за этими операторами не должны следовать выражения.

Примеры определения пользовательских функций:

int add (int a, int b) { return a+b; }   float Summa (int N){ int i, res = 0; for (i=0; i<=N; i++) res += i; return res; }

Выполните в среде MS Visual C++ следующий пример:

// подключение заголовочных файлов

#include "iostream.h"

#include "stdio.h"

#define pi 3.1415926 // макроопределение

// объявление функции для вычисления площади круга

double Square_Circle (double R)

{

return pi * R * R;

}

// объявление функции для вычисления длины окружности

double Line_Circle (double R)

{return 2 * pi * R;}

// объявление функции для вычисления суммы квадратов чисел от 1 до N

int Sum_of_NN (int N)

{

int i = N, sum = 0;

while (i)

{

sum += i*i;

i--;

}

return sum;

}

int main(int argc, char* argv[])

{

char * str = "|--------------------------------------|\n"

"| |\n"

"| Task 6 (Example) |\n"

"| |\n"

"|--------------------------------------|\n";

printf("\n");

printf("%s", str);

double r;

int n;

printf ("Inter R of circle > ");

scanf ("%lf", &r);

printf (

"\nSquare of circe is %.4lf, and length of circle is %.4lf",

Square_Circle (r),

Line_Circle (r)

);

printf ("\n\ninter N > ");

scanf ("%d", &n);

printf (

"\nSumm N^2 from 1 to %d is %d\n\n",

n,

Sum_of_NN (n)

);

system("PAUSE");

return 0;

}

После набора исходного кода откомпилируйте программу, запустите ее на

выполнение.

Окно консольного приложения после ввода запрашиваемых данных выглядит следующим образом:

Сложные типы данных: структуры - student2.ru

После завершения работы с программой переходите к выполнению

индивидуального задания.

Задание 7.В каждом варианте нужно выполнить следующие действия:

1) объявить пользовательскую функцию с необходимыми для выполнения задания формальными параметрами;

2) программировать тело функции;

3) реализовать диалог с пользователем.

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

7.1. Написать функцию, вычисляющую значение синуса угла. В функцию передается значение угла в градусах. В главной программе с использованием созданной функции выводятся значения синусов углов от 00до 3600 с шагом alfa (значение alfa в градусах запрашивается программой у пользователя).

7.2. Написать функцию, выводящую на экран объем шара радиуса R в кубических метрах. В функцию передается значение R в миллиметрах. В главной программе с использованием созданной функции выводятся значения объемов шаров радиусами от 0 до 10 с шагом step (значение step запрашивается программой у пользователя).

7.3. Написать функцию, вычисляющую объем прямоугольного параллелепипеда со сторонами a, b, c в кубических сантиметрах. В функцию передаются значения a, b, c в метрах. В главной программе с использованием созданной функции выводятся значения объемов параллелепипедов (значения a, b, c запрашиваются у пользователя до тех пор, пока не будут введены все нули).

7.4. Написать функцию, вычисляющую значение суммы ряда:

Сложные типы данных: структуры - student2.ru .

В функцию передается значение n - количество слагаемых в сумме. В программе запрашивается целое число N (количество слагаемых). После этого с использованием созданной функции выводится сумма ряда для введенного N. Программа запрашивает ввод N до тех пор, пока пользователь не введет 0.

7.5. Написать функцию, вычисляющую площадь прямоугольного треугольника по его катетам. В главной программе у пользователя запрашивается значения катетов и с использованием созданной функции выводится площадь треугольника. Запрос значений катетов продолжается до тех пор, пока пользователь не введет хотя бы одно нулевое или отрицательное значение.

7.6. Написать функцию, вычисляющую значение косинуса угла. В функцию передается значение угла в градусах. В главной программе с использованием созданной функции выводятся значения косинусов углов от 00 до 3600 с шагом

alfa (значение alfa в градусах запрашивается программой у пользователя).

7.7. Написать функцию, вычисляющую количество чисел, делящихся на 7 в диапазоне от 7 до N (значение N передается в качестве параметра). В главной программе у пользователя запрашивается число N до тех пор, пока не будет введено число, меньшее 7, и с использованием созданной функции подсчитывается количество чисел, делящихся на 7.

7.8. Написать функцию, вычисляющую объем прямоугольной призмы, основанием которой является прямоугольный треугольник. Главная программа запрашивает все необходимые параметры и выводит результат (при этом объем рассчитывается с использованием созданной функции).

7.9. Написать функцию, вычисляющую объем шара в кубических метрах по его радиусу. В главной программе с помощью цикла организовать запрос у

пользователя радиуса шара в миллиметрах. Программа завершается, если

пользователь вводит значение радиуса меньшее или равное 0.

7.10. Написать функцию, которая рассчитывает массу шара. Плотность шара и его радиус передаются в качестве параметров. В главной программе в бесконечном цикле запрашиваются значения плотности и радиуса, затем с использованием пользовательской функции осуществляется вывод результата (округлить до 3-го знака после запятой). Условием выхода из цикла служит ввод отрицательных или нулевых значений для плотности или радиуса.

7.11. Написать функцию, вычисляющую расстояние между двумя точками на плоскости. В качестве формальных параметров в функцию передаются координаты двух точек. В главной программе запрашиваются координаты точек, и с использованием созданной функции выводится расстояние между ними в метрах, сантиметрах и миллиметрах.

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

1. Что представляет собой функция в языке С?

2. Как описывается функция?

3. Что такое формальные и фактические параметры функции?

4. С помощью какого оператора из функции возвращается значение?

5. Как передать в функцию несколько параметров?

6. Как описывается заголовок функции, которая не возвращает параметров?

7. Как вызывается пользовательская функция?

Наши рекомендации