Возврат структуры
Функция может и возвращать структуру. return отдаёт только одно значение, но у этого одного значения может быть несколько полей. В уроке «Указатели» функция отдавала два результата через два параметра-указателя. Со структурой часто проще: сложите результаты в одну структуру и верните её. Эта функция превращает число секунд в минуты и секунды:
#include <stdio.h>
typedef struct {
int minutes;
int seconds;
} Time;
Time from_seconds(int total) {
Time result;
result.minutes = total / 60;
result.seconds = total % 60;
return result;
}
int main(void) {
Time run = from_seconds(1000);
printf("%d мин %d с\n", run.minutes, run.seconds);
return 0;
}Программа выведет:
16 мин 40 сТип возвращаемого значения перед именем функции — Time. Функция создаёт локальную переменную result, заполняет её поля и возвращает её. Как и с параметрами, структура копируется: run в main получает копию result, а сама result исчезает, когда функция заканчивается, как любая локальная переменная. Можно было бы сразу создать result со значениями: Time result = {total / 60, total % 60};.
Функция может вернуть и одну из структур массива, который она получила. return items[i]; возвращает копию этого элемента. Присваивание работает так же: best = items[i]; копирует всю структуру в переменную best, сразу все её поля. Так вы найдёте самый дешёвый товар в задании ниже: запомните первый товар, а когда попадётся более дешёвый, запомните уже его.
Задание
- 1
Выше
mainнапишите функциюProduct cheapest(const Product items[], int count), которая возвращает самый дешёвый товар массива. - 2
Ниже цикла в
mainвызовите функцию и сохраните то, что она вернула:Product best = cheapest(shelf, 4);. Затем выведитеСамый дешёвый: Yogurt (14.90), взяв название и цену изbest. - 3
Напишите ещё одну функцию,
Product with_discount(Product item, int percent), которая возвращает товар с ценой, сниженной наpercentпроцентов. Она получает копию, поэтому может изменить цену копии и вернуть её; оригинал остаётся прежним. (Осторожно:percent / 100— это целочисленное деление.) В концеmainвызовите её сbestи10и выведите старую и новую цену:Yogurt: 14.90 -> 13.41.