修改了一下。 用 前后項(xiàng)的遞推: c=c*x*x/(float)i/(float)(i-1);
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到修武網(wǎng)站設(shè)計(jì)與修武網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋修武地區(qū)。
#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è)試輸入和測(cè)試輸出的數(shù)據(jù)是對(duì)應(yīng)不上的,你寫(xiě)錯(cuò)信息了!
輸入 3.1415026, 3 的時(shí)候,輸出才是 -0.07522 。
好了,正確的參考代碼如下:
#include?stdio.h
double?power(double?x,?int?n);?//?計(jì)算乘方的函數(shù)
double?fact(int?n);????????????//??計(jì)算階乘的函數(shù)
int?main(int?argc,?char?const?*argv[])
{
double?x,?s;
int?n;
int?sign?=?1;?//正負(fù)號(hào)開(kāi)關(guān)變量,初始狀態(tài)為正
printf("Please?input?a?decimal?number?x?,?a?postive?int?number?n??:\n");
scanf("%lf%d",?x,?n);
for?(int?i?=?0;?i?=?n;?i++)
{
s?+=?sign?*?power(x,?2?*?i?+?1)?/?fact(2?*?i?+?1);
sign?=?-sign;
}
printf("x?=?%g,?n?=?%d,?s?=?%.5lf?\n",?x,?n,?s);
return?0;
}
//計(jì)算x^n
double?power(double?x,?int?n)
{
double?p?=?1;
//??這樣的循環(huán)條件,很簡(jiǎn)潔。因?yàn)楹瘮?shù)傳入的是形參,也不會(huì)對(duì)main的變量造成影響。
for?(;?n--;)
{
p?*=?x;
}
return?p;
}
//??計(jì)算n!
double?fact(int?n)
{
double?f?=?1;
//??這樣的循環(huán)條件,很簡(jiǎn)潔。因?yàn)楹瘮?shù)傳入的是形參,也不會(huì)對(duì)main的變量造成影響。
for?(;?n;)
{
f?*=?n--;
}
return?f;
}
測(cè)試截圖:(分別測(cè)試了角度為 180度、90度、45度的弧度值)
輸入和輸出語(yǔ)句,你不想要這么多的提示信息的話,自己修改一下就可以了。
如有幫助,煩請(qǐng)點(diǎn)采納,謝謝!
#include
#include
/*計(jì)算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項(xiàng)的符號(hào),即(-1)^n*/
int get_symbol(int n)
{
if(n%2 ==0) //n是偶數(shù)
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; //暫時(shí)保存上一步得到的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;
} /***********************************************************************
學(xué)好c語(yǔ)言,首先應(yīng)該把語(yǔ)言的語(yǔ)法學(xué)好,這也是基礎(chǔ)。尤其是注意指針部分,可以說(shuō)這是c語(yǔ)言的精髓,也是c語(yǔ)言能夠直接操作內(nèi)存的犀利之處。
其次,應(yīng)該多練代碼,并且注意代碼的可讀性,規(guī)范性。
最好,能夠親身用c語(yǔ)言參加某個(gè)項(xiàng)目實(shí)踐,畢竟實(shí)踐出真知。
至于之后c++或者java的學(xué)習(xí),要看自己的發(fā)展規(guī)劃了。不過(guò)學(xué)好c語(yǔ)言,絕對(duì)對(duì)你今后學(xué)習(xí)其他語(yǔ)言有很大幫助。
*************************************************************************/