題目如下:

代碼如下
#include <stdio.h>
#include <math.h>
double funcos( double e, double x );
int main()
{
double e, x;
scanf("%lf %lf", &e, &x);
printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
return 0;
}
double funcos( double e, double x )
{
double t = 1.0 ;
double l = 1.0 ;
int i ;
int j = 2 ;
double total ;
double sum ;
while ( (t / l ) > e ) //當精度不滿足時候回圈
{
t = pow (x , j) ;
for( i = 1 ; i <= j ; i++ )
{
l *= i ; //求分子
}
total += -(t / l) ; //單項
sum += total ;
j += 2 ; //遞增指數 +2
}
return sum + 1 ;
}
我這覺得思路沒問題,但是代碼不對,自己看不出來哪里出錯了。
uj5u.com熱心網友回復:
你的自定義函式里,total和sum沒有初始化吧。另外,double的輸出應該用%lf,樓主的應該是 %.2lf
uj5u.com熱心網友回復:
你這單項注釋的一行啥意義?
你看你的問題,正負項都沒控制好,答案怎么可能對?
正負項用 *= -1(也就是乘-1)來控制,所以改成 total = -1.0(初始值),sum = 0
然后 for 回圈里的
total += -(t / l) ; sum += total ; 改成 sum += total * (t / l) ; total *= -1; //total當作正負符號的flag,每運算一次改變一次符號
uj5u.com熱心網友回復:
double funcos( double e, double x )
{
double k=1.0 ;
double s ;
double total = 1 ;
int j ;
double i = 2 ;
int falg = -1 ;
int sum = 1 ;
while( k >= e )
{
s = pow ( x , i) ;
for ( j = 1 ; j <= i ; j++ )
{
sum *= j ;
}
k = s / sum ;
total = total + k*falg ;
falg = -falg;
i += 2 ;
}
return total ;
}
改了還是不對
uj5u.com熱心網友回復:
你好好檢查sum階乘對不對,每次計算階乘重新初始化了嗎?要么你就把for里的 j=1 去掉,放到外面初始化j;要么就每次for j回圈前初始化sum
另外,while(k>=e)也有問題,假設 k=s/sum小于e,后面的totle=totle+k*flag還是執行了,也就是會多計算一項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/24095.html
標籤:C語言
