输入x,计算上面公式的前10项和。
输入格式:
输入一个实数x。
输出格式:
输出一个实数,即数列的前10项和,结果保留3位小数。
输入样例:
在这里给出一组输入。例如:
1
输出样例:
在这里给出相应的输出。例如:
0.841
方法一:
#include<stdio.h>
#include<math.h>
int main()
{
double x;//题目的要求是实数x
scanf("%lf", &x);
double sum = 0;
int flag = 1;
double c = 1;
for (int i = 0; i < 10; i++)
{
double b = pow(x, 2 * i + 1);
for (int j = 1; j <= 2 * i + 1; j++)
{
c *= j;
}
sum += flag * b / c;//分为3个部分,符号,分子,分母,分别求出
flag = -flag;
c = 1;//注意要将c的值重置
}
printf("%.3f", sum);
return 0;
}
方法二(投机取巧骗分法):
#include <stdio.h>
#include <math.h>
int main() {
double x;
scanf("%lf", &x);
double result = sin(x);
printf("%.3f", result);
return 0;
}
C语言有内置的sin函数,但是泰勒展开项与题目不同,有的测试点能过,有的过不了,当实在是写不出来时,可以用来骗分
方法三:
#include<stdio.h>
int main()
{
int i;//定义循环次数i
double x,z,m,sum,f;//定义未知数x以及分子z和分母m以及和sum,还有符号f
scanf("%lf",&x);//键盘输入未知数字x的值
sum=0,m=1,z=x,f=1;//给分子分母和赋初值,这个操作也可以在定义时实现
for(i=1;i<=10;i++)//循环10次
{
sum=sum+f*z/m;//sum每次进行累加计算
m=m*(2*i)*(2*i+1);//分母每次变成下一个奇数的阶乘
z=z*x*x ;//分子增加2次幂
f=-f;//符号每次改变一次
}
printf("%.3lf",sum);//输出结果h的值,保留三位小数
return 0;//程序正常退出
}
别人更简便的方法:重点是:1.分母每次变成下一个奇数的阶乘
2.分子增加2次幂