Посчитать сумму знакопеременного ряда - C (СИ)
Формулировка задачи:
Посчитать сумму ряда, в общем.
Результат: 0.63333.
С результатом ln(2)=0,69315 не сходится что-то совсем.
#include <stdio.h>
#include <math.h>
float Sum () {
//предусловие:
int i = 1; //номер шага цикла
float p = 1.0, s = 1.0;
//
//
float eps = 0.01; //точность вычисления
for (;fabs(p)>eps;i++) { //p<eps - условие окончания цикла
p *= (-1.0)/(i+1); //рекуррентная формула
s += p; //нахождение суммы
#ifdef DEBUG
printf("i = %i, p = %f, s = %f\n",i,p,s);
#endif
}
return s;
}
int main() {
float s = Sum();
printf("%f",s);
return 0;
}Решение задачи: «Посчитать сумму знакопеременного ряда»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
//#define DEBUG
double Sum() {
//предусловие:
int i = 1; //номер шага цикла
double p = 1.0, s = 1.0;
//
//
double eps = 0.01; //точность вычисления
for (; fabs(p)>eps; i++) { //p<eps - условие окончания цикла
p = pow(-1.0,i) / (i + 1.0); //рекуррентная формула
s += p; //нахождение суммы
#ifdef DEBUG
printf("i = %i, p = %lf, s = %lf\n", i, p, s);
#endif
}
return s;
}
int main() {
double s = Sum();
printf("%lf\n", s);
return 0;
}
Объяснение кода листинга программы
Код представляет собой функцию Sum(), которая вычисляет сумму знакопеременного ряда, используя рекуррентную формулу.
- В функции
Sum()объявлены следующие переменные:i- номер шага цикла (линия 6)p- текущее значение члена ряда (линия 6)s- текущая сумма ряда (линия 6)eps- требуемая точность вычисления (линия 14)
- Цикл
forначинается с предусловияfabs(p)>epsи выполняется до тех пор, пока абсолютное значениеpбольше заданной точностиeps. Условие окончания цикла -p<eps(линия 16). - Внутри цикла
forвычисляется новый член рядаpс помощью формулыpow(-1.0,i) / (i + 1.0)(линия 18). - Значение нового члена ряда
pдобавляется к сумме рядаs(линия 19). - Если определен макрос
DEBUG, то на каждой итерации цикла выводится сообщение с номером шагаi, значениемpи суммойs(линия 21). - В функции
main()вызывается функцияSum()и результат сохраняется в переменнойs(линия 30). - Результат переменной
sвыводится на экран с помощью функцииprintf()(линия 31). - Функция
main()возвращает 0, что означает успешное завершение программы (линия 33).