§ 9. Структуры Программирование на C++ 1
Структуры представляет собой производный (составной) тип, определяемый программистом, создаваемый на основе существующих типов. Структура включает в себя данные, называемые полями. Программирование на C++ 2
Описание структуры имеет следующий формат: struct [имя_структуры] { [тип_1] [имя_поля_1]; … [тип_N] [имя_поля_N]; } Программирование на C++ 3
Пример описания структуры для комплексных чисел: struct complex { // Вещественная часть float Re; // Мнимая часть float Im; } Программирование на C++ 4
После описания структуры можно объявить один или несколько объектов (переменных) как экземпляров этой структуры. // Объявлен объект x типа complex x; // Объявлен указатель // на объект типа complex *p; Программирование на C++ 5
Для доступа к полям (компонентам) объекта используется точка: имя_объекта. имя_поля Пример: x. Re – обращение к полю Re объекта x x. Im – обращение к полю Im объекта x Программирование на C++ 6
Второй способ для доступа используется тогда, когда объявляется указатель на объект некоторой структуры. имя_указателя->имя_поля Пример: p = &x; // обращение к полю Re объекта x p -> Re // то же самое (*p). Re Программирование на C++ 7
// Комплексные числа #include
// Создание массива комплексных чисел // Присвоение значений массива другому массиву #include
void main() { complex X[N], Y[N]; for (int i = 0; i < N; i++) { printf("n. Введите комплексное число: "); scanf ("%f%f", &X[i]. Re, &X[i]. Im); Y[i] = X[i]; printf("n. Y[%d]=(%5. 1 f, %5. 1 f)n", i, Y[i]. Re, Y[i]. Im); } } Программирование на C++ 10
// Создание массива Books, содержащего названия книг, // автора, цену // Вывод названий и авторов книг дешевле 100 р. #include
void main() { book Books[Max. Books]; int k = 0; puts(“Введите название книги”); puts(“Пустая строка – конец ввода”); while (strcmp(gets(Books[k]. title), STOP) && k < Max. Books) { puts(“Введите фамилию: ”); gets(Books[k]. author); puts(“Введите цену: ”); scanf(“%f”, &Books[k++]. value); puts(“Введите название книги”); puts(“Пустая строка – конец ввода”); } Программирование на C++ 12
puts(“Список книг дешевле 100 рублей”); for (int i = 0; i < k; i++) if (Books[i]. value < 100) printf(“%s %sn”, Books[i]. title, Books[i]. author); } Программирование на C++ 13
Функции и структуры Программирование на C++ 14
// Функция для сложения двух комплексных чисел // передача по адресу void sum(complex x, complex y, complex *z); void main() { complex a = {2. 3, 3. 1}, b = {3. 4, -5. 7}, c; sum(a, b, &c); printf("c=(%5. 1 f, %5. 1 f)", c. Re, c. Im); } void sum(complex x, complex y, complex *z) { z -> Re = x. Re + y. Re; z -> Im = x. Im + y. Im; } Программирование на C++ 15
// Функция для сложения двух комплексных чисел // передача по ссылке void sum(complex x, complex y, complex &z); void main() { complex a = {2. 3, 3. 1}, b = {3. 4, -5. 7}, c; sum(a, b, c); printf("c=(%5. 1 f, %5. 1 f)", c. Re, c. Im); } void sum(complex x, complex y, complex &z) { z. Re = x. Re + y. Re; z. Im = x. Im + y. Im; } Программирование на C++ 16
// Функция для сложения двух комплексных чисел // возвращаемое значение complex sum(complex x, complex y); void main() { complex a = {2. 3, 3. 1}, b = {3. 4, -5. 7}, c; c = sum(a, b); printf("c=(%5. 1 f, %5. 1 f)", c. Re, c. Im); } complex sum(complex x, complex y) { complex z; z. Re = x. Re + y. Re; z. Im = x. Im + y. Im; return z; } Программирование на C++ 17
// Функция для сложения двух комплексных чисел // экономия памяти и времени complex sum(const complex &x, const complex &y); void main() { complex a = {2. 3, 3. 1}, b = {3. 4, -5. 7}, c; c = sum(a, b); printf("c=(%5. 1 f, %5. 1 f)", c. Re, c. Im); } complex sum(const complex &x, const complex &y) { complex z; z. Re = x. Re + y. Re; z. Im = x. Im + y. Im; return z; } Программирование на C++ 18