编写程序计算下列函数(精度为0.0001%) (1)sinx=x-x^3/3!+x^5/5!-x^7/7!+... 编译通过,可实现不了功能?

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<conio.h>

void main()
{
float SIN(float x);
float COS(float x);
float SUM(void);
char func_name[4];
float x,y;
int i;
printf("please choose the function you need:sin,cos or SUM\n");
printf("input the function name,and the number x\n(if you choose SUM,please input x as 0):");
scanf("%s%f",func_name,&x);
if(strcmp(func_name,"SIN")==0)
i=1;
if(strcmp(func_name,"COS")==0)
i=2;
if(strcmp(func_name,"SUM")==0)
i=3;
switch(i)
{
case 1:
y=SIN(x);
break;
case 2:
y=COS(x);
break;
case 3:
y=SUM();
}
printf("\n%s%5.2f=%5.2f",func_name,x,y);
getchar();
}

long fac(int num)
{
long factorial=num;
num--;
for(;num>=1;num--)
{
factorial*=num;
}
return factorial;
}

float SIN(float x)
{
float y=0;
int i=0;
while(((long)(y*1000000)%10)==0)
{
y+=pow(-1,i)*pow(x,i*2+1)/(float)fac(i*2+1);
i++;
}
return y;
}

float COS(float x)
{
float y=0;
int i=0;
while(((long)(y*1000000)%10)==0)
{
y+=pow(-1,i)*pow(x,i*2)/(float)fac(i*2);
i++;
}
return y;
}

float SUM(void)
{
float y=0;
int i=0;
while(((long)(y*1000000)%10)==0)
{
y+=pow(1/i,i);
i++;
}
return y;
}

第1个回答  2011-04-15
,5,7,9,........
#include<iostream>
using namespace std;
int main()
{ double pi=3.1415926;
double x,result;
double sin(double x);
cout<<"Pleae input X:";
cin>>x;
result=sin(x*pi/180);//角度转换成弧度
cout<<"sinX="<<result<<endl;
return 0;
}
double sin(double x)
{ int i,si;
double r,e,f,sqr;
sqr=x*x;
r=0; e=x; i=1;si=1;
while(e/si>1e-6)
{
f=e/si;
r=(i%4==1)? r+f : r-f;
e=e*sqr; i+=2;si*=i*(i-1);
}
return r;
}
另外,团IDC网上有许多产品团购,便宜有口碑
第2个回答  2011-04-20
,5,7,9,........
#include<iostream>
using namespace std;
int main()
{ double pi=3.1415926;
double x,result;
double sin(double x);
cout<<"Pleae input X:";
cin>>x;
result=sin(x*pi/180);//角度转换成弧度
cout<<"sinX="<<result<<endl;
return 0;
}
double sin(double x)
{ int i,si;
double r,e,f,sqr;
sqr=x*x;
r=0; e=x; i=1;si=1;
while(e/si>1e-6)
{
f=e/si;
r=(i%4==1)? r+f : r-f;
e=e*sqr; i+=2;si*=i*(i-1);
}
return r;
}
另外,虚机团上产品团购,超级便宜
第3个回答  2011-04-14
任务
第4个回答  2011-04-14
调试了吗追问

有,运行没错,就是达不到预想的结果,如:我输入cos 0得不到1.

追答

哦我想你应该还没试过单步调式吧?
追踪一下各个变量,然后一步一步执行 我想你会看到问题出在哪的
我试了试单问题还挺多的
我慢慢看下啊
我想你对公示的理解可能还不足 我对这几个公式找了几个特殊例子测试发现有一些出现了死循环 问题在于 while(((long)(y*1000000)%10)==0)这句会永远满足

追问

嗯,我也再好好看看!

本回答被提问者采纳
第5个回答  2011-04-15
renwu
相似回答