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。
本題屬於基礎題。很簡單的程序,不要人為復雜化。