Упростить программу для вычисления суммы - C (СИ)
Формулировка задачи:
Помогите пожалуйста упростить программу, принес преподавателю, он сказал что мы такого не проходили, сказал заново делать, заранее огромное спасибо. Задание: Написать программу для вычисления суммы
S=1+(1/2^2)-(1/3^2)+(1/4^2)-...(1/N^2)m...
пока последнее слагаемое не станет по модулю меньше заранее заданного действительного числа Е<1. Вывести на экран значение S.
#include <stdio.h>
#include <math.h>
#define n 50
int main(){
float s = 1.0;
int e = 1;
int i;
for(i = 2; i < n; i++){
if(i % 2 == 0){
s += pow((float)1/n, 2);}
else{
s -= pow((float)1/n, 2);}
if(s < e)
break;
}
printf("%f", s);
return 0;
}Решение задачи: «Упростить программу для вычисления суммы»
textual
Листинг программы
float absf(float f) {
if (f < 0) f *= -1.0f;
return f;
}
int main() {
float e;
scanf("%f", &e);
if (e < 0 || e > 1) return 1;
float sum = 0.0f;
float a = 1.0f;
int i=1;
do {
sum += a;
++i;
float k = 1.0f;
if (i%2 == 1) k = -1.0f;
a = k/(i*i);
} while(absf(a) > e);
printf("sum: %f", sum);
}
Объяснение кода листинга программы
- В функции
absfпроверяется, является ли число отрицательным. Если это так, то оно умножается на -1.0f. - В функции
mainсчитывается число с помощьюscanf. - Проверяется, является ли число отрицательным или больше 1. Если это так, то программа завершается.
- Инициализируется переменная
sumравной 0.0f. - Инициализируется переменная
aравной 1.0f. - Инициализируется переменная
iравной 1. - В цикле
do-whileпроисходит следующее:- К переменной
sumприбавляется значение переменнойa. - Значение переменной
iувеличивается на 1. - Внутри цикла внутри
ifпроверяется, является лиiнечетным числом. - Если это так, то значение переменной
kустанавливается равным -1.0f. - Значение переменной
aобновляется какk/(i*i).
- К переменной
- Цикл выполняется до тех пор, пока абсолютное значение
aне станет меньшеe. - Выводится значение переменной
sum.