1. 程式人生 > 其它 >高階語言程式設計實驗五第四題

高階語言程式設計實驗五第四題

技術標籤:筆記c#程式設計

                             #高階語言程式設計實驗五第四題

本題實際上就是計算每一項的值,判斷到哪一項會符合題意,即最後一項的絕對值小於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; }

接下來展示一下執行結果
執行軟體codeblocks
總結值得注意的是,我最開始去運用階乘時,因為定義了階乘的函式為int型,此時編譯並不會報出錯誤,並且當我執行x=1,x=2都是正常執行得到正確結果的。但當我輸入3時,程式執行就會一直處於亂碼狀態(我用了printf()去把每次階乘的值輸出),這時的亂碼就提醒了我們,這個時候的int型是不足以讓階乘函式正常執行的。所以這是我嘗試著把int型改成double型就ok啦!
== 另外,大家可以嘗試著把我的遞迴簡化去進行計算階乘!==