Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
10.Структуры.docx
Скачиваний:
3
Добавлен:
23.08.2019
Размер:
25.92 Кб
Скачать
  1. Как вывести содержимое массива структур в виде таблицы?

Массив структур удобно выводить в виде таблицы, например, как в телефонной книге, экзаменационной ведомости и т.д. Данная задача, несмотря на свою простоту, имеет некоторые тонкости. Очевидный способ вывода таблицы заключается в том, чтобы выводить содержимое каждой структуры на одной строке, разделяя поля пробелами:

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

printf("%s ", workers[i].name);

printf("%d ", workers[i].age);

printf("%g\n", workers[i].salary);

}

Такой способ отображает весь массив, но колонки оказываются неровными:

Для ровного вывода следует воспользоваться табуляцией – «\t»

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

printf("%s\t", workers[i].name);

printf("%d\t", workers[i].age);

printf("%g\n", workers[i].salary);

}Однако и в данном случае могут возникнуть проблемы. Например, если одно из имен слишком длинное:

Хорошим способом решения этой проблемы является использование модификатора количества позиций под переменную:

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

printf("%10s\t", workers[i].name);

printf("%d\t", workers[i].age);

printf("%g\n", workers[i].salary);

}

И, наконец, для выравнивания по левому краю существует модификатор «-».

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

printf("%-10s\t", workers[i].name);

printf("%d\t", workers[i].age);

printf("%g\n", workers[i].salary);

}

  1. Можно ли передавать структуры в качестве аргументов функций и возвращать структуры в качестве значений функций?

Передача структуры в качестве аргумента функции

Рассмотрим следующую задачу. Объявить структуру Point (Точка) с вещественными полями x, y и z, которые задают координаты этой точки в трехмерном пространстве. Написать функцию, которая принимает два аргумента типа Point и возвращает расстояние между ними.

#include "stdafx.h"

#include <iostream>

using namespace std;

struct Point {

float x;

float y;

float z;

};

float sqr(float number) {

return number*number;}

float getDistance(Point p, Point q) {

return sqrt(sqr(p.x-q.x) +sqr(p.y-q.y) +sqr(p.z-q.z));

}

int main() {

Point p = {1,2,3};

Point q = {2,3,4};

cout << getDistance(p,q)) << endl;

}

Возврат структур в качестве значения функции

Создадим функцию, которая принимает две точки и возвращают ту из них, которая отстоит дальше от начала координат.

#include <iostream

using namespace std;

struct Point {

float x;

float y;

float z;

};

float sqr(float number) {

return number*number;

}

float getDistance(Point p, Point q) {

return sqrt(sqr(p.x-q.x) +sqr(p.y-q.y) + sqr(p.z-q.z));

}

Point farPoint(Point p1, Point p2) {

Point zero = {0,0,0};

float d1 = getDistance(zero, p1);

float d2 = getDistance(zero, p2);

return d1>d2 ? p1 : p2;

}int main() {

Point p = {1,2,3};

Point q = {2,3,4};

Point far = farPoint(p,q);

cout << far.x << " " << far.y << endl;

}

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