【问题描述】
已知cos x的近似计算公式如下:
cos x = 1 - /2! + /4! - /6! + ... + /(2n)!
其中x为弧度,n为大于等于0的整数。编写程序根据用户输入的x和n的值,利用上述近似计算公式计算cos x的近似值,要求输出结果小数点后保留8位。
【输入形式】
从控制台输入小数x(0<=x<=10)和整数n(0<=n<=1000),两数中间用空格分隔。
【输出形式】
控制台输出公式结果:小数点后保留8位。
【样例输入1】
1.0472 3
【样例输出1】
0.49996244
【样例输入2】
1.0472 49
【样例输出2】
0.49999788
【样例说明】
输入x为1.0472,n为3,求得cos x近似计算公式的值为0.49996244,小数点后保留8位;同样,输入x为1.0472,n为49,求得cos x近似计算公式的值为0.49999788,小数点后保留8位。
【源代码】
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
double factorial(int n)//定义一个求阶乘的函数
{
double fac = 1;//用double不用int,int容量过小
for (int i = 1; i <= n; i++)
{
fac = fac * i;
}
return fac;
}
int main()
{
double x, cos=1;
int n;//用int不用double,否则会有误差
cin >> x >> n;
for (int i = 1; i <= n; i++)
{
if(i % 2 == 0)
{
cos += pow(x, 2*i) / factorial(2 * i);//pow乘方函数,需头文件cmath
}
if(i % 2 != 0)
{
cos -= pow(x, 2*i) / factorial(2 * i);
}
}
cout << fixed << setprecision(8) << cos << endl;//setpreciion保留小数,需头文件iomanip
return 0;
}
其中使用了自定义求阶乘的函数factorial
double factorial(int n)
{
double fac = 1;
for (int i = 1; i <= n; i++)
{
fac = fac * i;
}
return fac;
}