Разработать функцию с переменным количеством параметров для подсчета вещественных чисел - C (СИ)
Формулировка задачи:
День добрый!
Задание: Целая переменная - счетчик, затем последовательность вещественных переменных. Функция возвращает сумму переменных
Написал код для решения данной задачи, но где-то похоже ошибся. Не могу понять почему не правльно работает. Можете подсказать мою обшибку? Результат работы исходного кода приложил в виде принтскрина
Просмотре похожие темы на форуме, не нашел похожей задачи, вот пришлось создавать новую тему.
#include <stdlib.h>
#include <stdio.h>
float sum(int n,...);// прототип функции
void main()
{
printf("Float summa=%.3f\n", sum(3,5.5,2.5,1.5));
}
float sum(int n,...)
{
int *p=&n+1;// определение и инициалазация указателя на счетчик
// и берем адрес первой вещественной переменной
float s;// сумма
float *f;// указателя для вещественных переменных
f=(float*)p;// указываем, что дальше будем работать с переменным типа float
printf("address n=%p\n",&n); // проверка адреса, просто чтобы посмотреть, что получаем адрес
printf("address p=%p\n",p); // проверка адреса, просто чтобы посмотреть, что получаем адрес
printf("address f=%p\n",f); // проверка адреса, просто чтобы посмотреть, что получаем адрес
printf("number of first float paramenter: %d\n",*p); // значение первого парамета, проверка, что туда попали
for(s=0;n>0;n--) // цикл суммирования вещественных чисел
{
s+=*f++;
printf("%.3f\n",s); // мониторинг, что происходит сумма вещественных переменных
}
return s;
}Решение задачи: «Разработать функцию с переменным количеством параметров для подсчета вещественных чисел»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
float sum(int n,...);
void main()
{
printf("Float summa=%.3lf\n", sum(4,5.5,2.5,1.5,2.5));
}
float sum(int n,...)
{
int *p=&n+1;
double s;
double *f;
f=(double*)p;
for(s=0;n>0;n--)
{
s+=*f++;
}
return s;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с переменными и функциями.
- Объявляем функцию с переменным количеством параметров sum(int n,...).
- В функции main() выводим результат вычисления функции sum на экран.
- Внутри функции sum() перебираем все передаваемые параметры, начиная со второго (n=1, поскольку n не относится к числовым параметрам).
- Создаем указатель на первый нетипированный параметр и инициализируем его значением n+1.
- Инициализируем переменную s значением 0 и переменную f значением n.
- Перемещаем указатель f на следующий нетипированный параметр.
- В цикле прибавляем к переменной s значение каждого нетипированного параметра, начиная с первого и до последнего, с шагом -1, т.е. уменьшаем значение n на единицу при каждой итерации.
- Возвращаем переменную s из функции.