Ⅰ 用c語言程序算sinX的值
#include
#include
/*計算n的階乘*/
int factor(int n)
{
if(n==1)
return 1;
else
return factor(n-1)*n;
}
/*得到分子的值*/
double get_numerator(double x,int order)
{
return pow(x,order); //求x^order
}
/*得到分母的值*/
double get_denominator(int n)
{
return factor(n); //求n的階乘
}
/*獲得第n項的符號,即(-1)^n*/
int get_symbol(int n)
{
if(n%2 ==0) //n是偶數
return 1;
else
return -1;
}
int main()
{
int i;
double x;
double sin_x=0;
double tmp=0;
printf("please input the x:\n");
scanf("%lf",&x);
for(i=0;;i++)
{
tmp=sin_x; //暫時保存上一步得到的sin值
sin_x += get_numerator(x,2*i+1)/get_denominator(2*i+1)*get_symbol(i);
if(fabs(sin_x-tmp)<1e-6) //精度滿足要求
break;
}
printf("sin(%lf)=%lf\n",x,sin_x);
return 0;
} /***********************************************************************
學好c語言,首先應該把語言的語法學好,這也是基礎。尤其是注意指針部分,可以說這是c語言的精髓,也是c語言能夠直接操作內存的犀利之處。
其次,應該多練代碼,並且注意代碼的可讀性,規范性。
最好,能夠親身用c語言參加某個項目實踐,畢竟實踐出真知。
至於之後c++或者java的學習,要看自己的發展規劃了。不過學好c語言,絕對對你今後學習其他語言有很大幫助。
*************************************************************************/
Ⅱ c語言計算sinx的值問題,運行無錯但得不到想要的結果.求解
/*sin(x)的泰勒展開式
sin(x)=x-x**3/(3!)+x**5/(5!)+........
*/
#include
#include
#define
PI
3.1415926
void
main()
{
int
n=1,c=1,a,b=1;
long
double
x,d=0,sinx=0;//這里定義長雙精度,long
float不是標準的數據類型
printf("請輸入x的值:");
scanf("%lf",&x);//這里輸入一定是%lf,輸入一開始就不對
for(n=1,c=1,a=1;;a++)
{
d=pow(x,n)/c;
sinx+=b*d;
b*=-1;
n++;
c*=n;
n++;
c*=n;
if(d<1e-5)//可以寫成1e-5,不需再調用函數
{
break;
}
}
printf("sinx的值為%f\n",sinx);
printf("運行的項數為%d\n",a);
printf("sin(x)的值為%lf\n",sin(x));//作測試對比,注意輸入為弧度
}
Ⅲ 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近似值
你的程序錯誤太多。直接給出按泰勒公式展開求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。
本題屬於基礎題。很簡單的程序,不要人為復雜化。
Ⅳ C語言求sinx
修改了一下。 用 前後項的遞推: c=c*x*x/(float)i/(float)(i-1);
#include <stdio.h>
#include <math.h>
int main(){
double x,a,b=1,c=1,sum;
int i,count=1;
scanf("%lf",&x);
sum=x;
for (i=3; fabs(c)>1e-05;i=i+2){
c=c*x*x/(float)i/(float)(i-1);
b= -b;
sum=sum + c*b;
count++;
}
printf("%.3lf %d\n",sum,count);
return 0;
}
Ⅵ 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語言 求sin值
首先,你的測試輸入和測試輸出的數據是對應不上的,你寫錯信息了!
輸入 3.1415026, 3 的時候,輸出才是 -0.07522 。
好了,正確的參考代碼如下:
#include<stdio.h>
doublepower(doublex,intn);//計算乘方的函數
doublefact(intn);//計算階乘的函數
intmain(intargc,charconst*argv[])
{
doublex,s;
intn;
intsign=1;//正負號開關變數,初始狀態為正
printf("Pleaseinputadecimalnumberx,apostiveintnumbern: ");
scanf("%lf%d",&x,&n);
for(inti=0;i<=n;i++)
{
s+=sign*power(x,2*i+1)/fact(2*i+1);
sign=-sign;
}
printf("x=%g,n=%d,s=%.5lf ",x,n,s);
return0;
}
//計算x^n
doublepower(doublex,intn)
{
doublep=1;
//這樣的循環條件,很簡潔。因為函數傳入的是形參,也不會對main的變數造成影響。
for(;n--;)
{
p*=x;
}
returnp;
}
//計算n!
doublefact(intn)
{
doublef=1;
//這樣的循環條件,很簡潔。因為函數傳入的是形參,也不會對main的變數造成影響。
for(;n;)
{
f*=n--;
}
returnf;
}
測試截圖:(分別測試了角度為 180度、90度、45度的弧度值)
Ⅷ 用C語言求sinx的值,望高人指點
你的factorial是一個函數,好象不可以直接乘以一個整數的吧,還有double
factorial(int
n)是不是需要一個返回值呢。if(n==0)
return
1;只是在n=0的時候有返回值,n!=0就沒有了
Ⅸ 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,輸入x值,求解sinx值,保留小數點後6位。
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intmain(void){
inti,t;
doublesum,x,tmp,xx;
printf("Inputx(real-360°~+360°)... ");
scanf("%lf",&x);
xx=x,x*=3.1415926535897932/180;printf("%f ",xx);
for(tmp=sum=x,i=2;tmp>1.0E-5;i++){
t=(i<<1)-1;
sum+=i&1?tmp*=(x*x/t/(t-1)):-(tmp*=(x*x/t/(t-1)));
}
printf("sin(%g°)=%.6f ",xx,sum);
return0;
}