Функция со сменным количеством параметров для структуры - C (СИ)
Формулировка задачи:
Здравствуйте!
Есть задание написать функцию со сменным количеством параметром. Этими параметрами есть несколько комплексных чисел. Нужно выполнить их сложение.
Структуру я описала:
Пыталась сделать функцию, но что то у меня не получается:
Помогите пожалуйста
struct Complex
{
float a, b;
};void func(Complex *a, ...)
{
Complex *P = a;
while (P->a != -1 && P->b != -1)
{
cout << P->a << " " << P->b << endl;
P++;
}
}
void main()
{
Complex *END = new Complex;
END->a = -1;
END->b = -1;
Complex *number1 = new Complex, *number2 = new Complex;
number1->a = 1.1;
number1->b = 1.2;
number2->a = 2.1;
number2->b = 2.2;
func(number1, number2, END);
}Решение задачи: «Функция со сменным количеством параметров для структуры»
textual
Листинг программы
#include <stdio.h>
#include <stdarg.h>
typedef struct complex {
float a;
float b;
} complex_s;
void f(int num_args, ...)
{
va_list ap;
va_start(ap, num_args);
for(int i = 0; i < num_args; i++) {
complex_s val = va_arg (ap, complex_s);
printf ("a: %f, b: %f\n", val.a, val.b);
}
va_end (ap);
}
int main(void)
{
complex_s a = {.a=12345, .b=6789};
complex_s b = {.a=5555, .b=66666};
f(2, a, b);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со переменными аргументами и структурой complex_s.
- Создание структуры complex_s, представляющей комплексное число, с полями a и b типа float.
- Определение функции f, принимающей переменное количество аргументов и использующей va_list для их обработки.
- Инициализация va_list с помощью функции va_start.
- Использование цикла for для обработки каждого аргумента в списке.
- Получение следующего аргумента с помощью функции va_arg, приведение его к типу complex_s и сохранение в переменной val.
- Вывод значений полей a и b комплексного числа с помощью функции printf.
- Завершение работы с va_list с помощью функции va_end.
- Определение функции main, создающей два объекта complex_s и передающей их в функцию f.
- Вызов функции f с двумя аргументами: a и b.
- Возврат функцией main значения 0, завершающего выполнение программы.