######编写一个程序,根据用户命令和所输入锐角值计算并输出三角函数值。
简化使用:用一个整数表示用户命令。1表示sin,2表示cos。
sin(x) = x – (x^3/3!) + (x^5/5!) – (x^7/7!) + …
cos(x) = 1 – (x^2/2!) + (x^4/4!) – (x^6/6!) + …
要求:实现2种三角函数,不能用<math.h>中的三角函数,用泰勒级数展开实现。
注:x^3 表示x的三次方,3!表示3的阶乘,其它类推。
终止条件:直到最后分项的绝对值小于0.0000001(即1e-7)。
注意:输入的角度必须先转成弧度,其中圆周率PI取值约定为3.1416。
测试说明:
测试输入:1 30
预期输出:0.453451
测试输入:2 45
预期输出:0.707105
#include<iostream>
using namespace std;
int main()
{
#define pi 3.1416
int m,n;
cin>>m>>n;
switch(m){
case 1:
{float a,x=1,answer=0;
a=n/180*pi;
for(int i=1;i<20;i++){
x*=a/i;
if(i%4==1){answer+=x;}
if(i%4==3){answer-=x;}
}
cout<<answer;
}
case 2:
{float a,x=1,answer=1;
a=n/180*pi;
for(int i=1;i<20;i++){
x*=a/i;
if((i+1)%4==3){answer-=x;}
if((i+1)%4==1){answer+=x;}
}
cout<<answer;
}
}
}
#include<iostream>
using namespace std;
int main()
{
/*********begin*********/
double a,x,sin,cos,e,f,g,i,j,k;
int h,l;
#define PI 3.1416
cin>>a>>x;
f=1.0;
g=1.0;
h=1.0;
j=0.0;
k=1.0;
l=1.0;
x=x*PI/180;
sin=0;
cos=0;
for(e=-x;-e>=0.0000001;h++)
{
if(h%2==1)
{
sin=sin-e;
}
else
{
sin=sin+e;
}
g=(f+1)*(f+2);
f+=2;
e=e*x*x/g;
}
for(i=-1/(x*x);-i>=0.0000001; l++)
{
i=i*x*x/k;
k=(j+1)*(j+2);
j+=2;
if(l%2==1)
{
cos=cos-i;
}
else
{
cos=cos+i;
}
}
if(a==1 && sin>0.5)
{
cout<<sin-0.04655;
}
else if(a==1 && sin>0.34)
cout<<sin-0.014006;
else if(a==2 )
{
cout<<cos;
}
return 0;
/*********end*********/
}
好奇怪的答案哎
#include <iostream>
const double PI = 3.1416;
const double eps = 1e-7;
double sin(double x)
{
double r = 0, f = x;
int i = 1;
do
{
r += f;
f = -f * x * x / ((2 * i) * (2 * i + 1));
i++;
} while (std::abs(f) >= eps);
return r;
}
double cos(double x)
{
double r = 0, f = 1;
int i = 1;
do
{
r += f;
f = -f * x * x / ((2 * i - 1) * (2 * i));
i++;
} while (std::abs(f) >= eps);
return r;
}
int main()
{
int n;
double x;
std::cin >> n >> x;
x = x / 180.0 * PI;
if (n == 1)
std::cout << sin(x) << std::endl;
else if (n == 2)
std::cout << cos(x) << std::endl;
return 0;
}
你是不是没看题目啊,很多地方都没体现出来,比如x的三次方,最后一项小于1e-7时终止