Разработать функцию с переменным количеством параметров для подсчета вещественных чисел - 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 из функции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д