注意精度问题,终止循环不是用#define N XXXX i<=N
谢谢~~~
----------------解决方案--------------------------------------------------------
数学功底,摸清求SIN(X)的原理,
可我数学给忘了.
呵呵
给我点提示就能编出来
----------------解决方案--------------------------------------------------------
离散公式是
sin x=x-x^3/3!+x^5/5!-...+(-1)^(n-1)*x^(2n-1)/(2n-1)!+...
(这里x是弧度)
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<math.h>
main()
{
float sin=0.0,repl,x;
int j,i;
printf("请输入X的值\n");
Scanf("%f",&x);
for(i=1,j=1;sin>=-1||sin<=1;i++,j+=2)
{ repl=pow(x,j)/a(j);
if (i%2==0)
sin-=repl;
else
sin+=repl;
}
printf("sin(X)=%f",sin);
}
long a(int x)
{
int i;
long s=1;
for(i=1;i<=x;i++)
s*=i;
return s;
}
我看了一下,不知道是不是这样,错了你们指正一下;
[此贴子已经被作者于2006-3-9 13:24:09编辑过]
----------------解决方案--------------------------------------------------------
不能调库函数。。。。。
----------------解决方案--------------------------------------------------------
各位大哥帮忙~~~
----------------解决方案--------------------------------------------------------
#define k 50
#define pi 3.1415926
double factorial(int z) /*阶乘,递归算法实现*/
{if(z==0||z==1)
return (1);
else
return (factorial(z-1)*z);
}
double mysin(double x)
{
int n;
long double v;
double y=0,o,p;
for(n=1;n<k;n++)
{
v=factorial(n*2-1);
o=pow((-1),(n-1));
p=pow(x,(n*2-1));
y=y+(o*p/v);
/*
printf("%f %f %f %f\n",v,o,p,y);
*/
}
return(y);
}
void main()
{
float x;
double y,temp;
printf("Enter the randian:");
scanf("%f",&x);
if (x>pi)
{
temp=-2*pi;
while(x>pi)
{
x+=temp;
}
}
if (x<-pi)
{
temp=2*pi;
while(x<-pi)
{
x+=temp;
}
}
y=mysin(x);
printf("sinx:%f\nmysinx:%f\ndisparity:%f%",sin(x),y,(1-sin(x)/y)*100);
getch();
}
怎样把#define k 50
去掉,然后设立另一个方法跳出循环~~~
----------------解决方案--------------------------------------------------------
楼主搜索再搜索~这问题最近问了4,5次了
----------------解决方案--------------------------------------------------------