c语言sinx近似值算法
‘壹’ 用c语言求多项式求sinx的近似值。
#include <stdio.h>
double factorial(double n)
{//求n!
double result=1;
for(int i=1;i<=n;i++)
{
result*=i;
}
return result;
}
double sinx(double x,int n)
{//求sin(x),精度为n
double result=0;
bool bAdd=true;//是加还是减
for(int i=1;i<=n;i++)
{
if(bAdd)
{
result+=((double)x*(2*i-1)/factorial(2*i-1));
}
else
{
result-=((double)x*(2*i-1)/factorial(2*i-1));
}
bAdd=!bAdd;
}
return result;
}
void main()
{
printf("%f\r\n",sinx(0.4,10));
}
‘贰’ c语言问题 编写程序,计算sinx的近似值,精确到10的负六次方
#include<stdio.h>
#include<math.h>
main()
{
float a,b=1;
float i,sinx,x;
scanf("%f",&x);
a=x;
sinx=0;
for(i=1;fabs(a/b)>=1e-6;i++)
{
sinx+=a/b;
a=-a*x*x;
b=b*2*i*(2*i+1); }
printf("%f",sinx);
}
‘叁’ C语言计算sinx的近似值
/*sinx=x-x^3/3!+x^5/5-x^7/7!...*/
#include<stdio.h>
#include<math.h>
#define ACCURARY 0.00000001
main()
{
int i=1,j=1,k,n=1,x;
printf("sinx=x-x^3/3!+x^5/5-x^7/7!...\n请输入一个x\n");
scanf("%d",&x);
double sinx=0;
for(i=1;fabs(t)>=ACCURARY;i+=2)
{
for(k=1;k<=i;k++)
{n=n*i;}
j++;
t=pow(-1,j)*pow(x,i)/n;
sinx=sinx+t;
}
printf("sin%d=%.8f\n",x,sinx);
}
你编译一下,看看行不,我好久没弄了。
‘肆’ C语言编程计算sinx的近似值
#include"stdio.h"
intmain(intargc,char*argv[]){
doublex,s,t,eps;
inti;
printf("Pleaseenterx&eps(R:0<eps<1)... ");
if(scanf("%lf%lf",&x,&eps)!=2||eps<=0||eps>=1){
printf("Inputerror,exit... ");
return0;
}
printf("sin(%g)≈",x);
for(s=t=x,x*=x,i=1;t>=eps;i++){
(t*=x)/=((i*i<<2)+i+i);
s+=i&1?-t:t;
}
printf("%f ",s);
return0;
}
运行样例:
‘伍’ c语言求sinx的近似值!!!!!急
修改及测试代码如下:
#include <stdio.h>
#include <math.h>
double fact(n)
//数据类型使用有误
{
int x;
double y;
y=1;
for(x=1;x<=n;x++){
y=y*x;
}
return y;
}
int main()
{//思路有些乱
double i,sum,x;
int n=1,flag=1;
scanf("%lf",&x);
i=x;//第一项
sum=0;
while(fabs(i)>=0.000001) //少了一个0
{
sum+=i;
flag=-flag;
n=n+2;
i=(flag*pow(x,n)/fact(n));
}
printf("%.10f\n",sin(x));
printf("sin<%f>=%.10f",x,sum);
return 0;
}
‘陆’ 用c语言计算sin(x)的近似值的代码
根据台劳公式:
sin(x)=x-(x^3)/3!+(x^5)/5!+……(-1)^(n)x^(2n+1)/(2n+1)!
采用递推法根据级数的前20项计算sin(x)的近似值:
(注: x为弧度值, x^(n+1)表示x的n+1次方)
我写的代码如下:
# include <stdio.h>
int main ()
{
double sx,x,a,b;
int n,f=1;
printf ("Please input x:");
scanf ("%lf",&x);
sx=a=x;
b=1;
for (n=1;n<=20;++n)
{
a*=x*x;
b*=4*n*n+2*n;
f=-f;
sx+=a/b*f;
}
printf ("sin(x)=%lf\n",sx);
return 0;
}
希望对你有所帮助。
‘柒’ c语言编程求sinx的近似值(泰勒展开)
您好,是这样的:泰勒展开是这个:sinx=x-x^3/3!+x^5/5!-..
下面给出算20项的程序。
#include"math.h"
#include"stdio.h"
void main()
{
double x=0,y=0,z=1,s=1,mynum=0;
int i=1 ,j=0, k=1;
scanf("x=%f",&x);
for(i=1;i<20;i++)
z=1;k=1;
for(j=1;j<=2*i-1;j++)
{
z=x*z;//算j次方
k=k*j;//算阶乘}
s=-j*pow(-1,i);//pow(a,b)是a的b次方
z=z*s/k;
mymun=mynum+z;
}
printf("sinx=x-x^3/3!+x^5/5!-..");
printf("sinx=%f",mynum);
getch();
}
‘捌’ C语言初学者请教!编程求sinx近似值,已写程序,求改错!
#include<stdio.h> /*以下代码运行通过*/
#include<math.h>
main()
{
float sum,sinx,x,s;
int i,j; /*j为-1的次方变量*/
printf("Please inter x: \n");
scanf("%f",&x);
i=1;s=1;j=-1;
sum=0;
sinx=sin(x);
printf("%f\n",sinx);
for(i=1;(fabs(sum-sinx))>=0.000001;i=i++) /*你的程序中这句判断有错,应该是大于该精度内的sum值执行for内循环语句。*/
{ s=s*i;
if(i%2!=0) /*当i为奇数时,才执行,把偶数跳过,但s的值仍变化,这样除以的就是阶乘。*/
{ j=-j; /*用j来控制正负号*/
sum+=(double)(pow(x,i)/s)*j;
}
}
printf("sinx=%f\n",sum);
}
‘玖’ c语言求泰勒公式sinx近似值
你的程序错误太多。直接给出按泰勒公式展开求sinx近似值的程序。
#include<stdio.h>
#include<math.h>
intmain()
{
doublei,x,k,s=0;
scanf("%lf",&x);
k=x;
for(i=1;abs(k)>=0.0000001;i++)
{s+=k;k*=-x*x/(i*2*(i*2+1));}
printf("%.3lf",s);
return0;
}
//运行示例截图:
此时输入为角度值,例如截图中输入30,输出为0.5。
本题属于基础题。很简单的程序,不要人为复杂化。