高階語言程式設計實驗五第四題
阿新 • • 發佈:2020-12-10
#高階語言程式設計實驗五第四題
本題實際上就是計算每一項的值,判斷到哪一項會符合題意,即最後一項的絕對值小於10的-6次方,最後把所有的項都加起來
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double jiecheng(double m)//定義計算階乘的函式
{
if(m==1||m==0)
return 1;
else
return m*jiecheng (m-1);//這裡運用了遞迴,但是方法並不好,因為效率會很低
}
//定義出階乘的函式供後面使用
double sin(double x)
{
double i=1;
int j=1;//利用j來作為標號,改變每一項的正負
double sum=0,n;
do
{
if(i==1)//把第一項的特殊情況提出來
{
n=x;//如題,第一項n等於x
}
else
{
n=j*pow(x,i)/(jiecheng(i)*1.0);//計算每一項的數值
}
j=-j;
i+=2;
sum=sum+n;
if(fabs(n)<1e-5)//判斷最後一項的數值大小,如果大於10的-6次方就說明精度還沒有達到題目要求,繼續迴圈知道符合條件
break;
}
while(fabs(n)>=1e-5);
return sum;
}
int main()
{
double x,sum;
printf("Input x:");
scanf("%lf",&x);
sum= sin(x);
printf("sin(x)=%lf",sum);
return 0;
}
接下來展示一下執行結果
總結:值得注意的是,我最開始去運用階乘時,因為定義了階乘的函式為int型,此時編譯並不會報出錯誤,並且當我執行x=1,x=2都是正常執行得到正確結果的。但當我輸入3時,程式執行就會一直處於亂碼狀態(我用了printf()去把每次階乘的值輸出),這時的亂碼就提醒了我們,這個時候的int型是不足以讓階乘函式正常執行的。所以這是我嘗試著把int型改成double型就ok啦!
== 另外,大家可以嘗試著把我的遞迴簡化去進行計算階乘!==