close

A:
輸出結果:
my_fun(5)=1.716667
my_fin(8)=1.718279
my_fun(10)=1.718282




#include<stdio.h>

int main()
{
        double my_fun(int);   //宣告一副程式my_fun(),回傳值為double,輸入值為int型態
        printf("my_fun(5)=%lf\n",my_fun(5));   //印出my_fun(5)之值,並呼叫副程式my_fun(),傳入整數5
        printf("my_fin(8)=%lf\n",my_fun(8));
        printf("my_fun(10)=%lf\n",my_fun(10));
        return 0;
}

double my_fun(int n)
{
        double fx=0;   //宣告fx為double型態
        int i,j;
        for(i=1 ; i<=n ; i++)   // 整個算式的次數,有1!~n!個
        {
                double a=1;   //階層之值,預設為1。ex:階層:5! = 1x2x3x4x5=120
                for(j=1 ; j<=i ; j++)  //計算分母的階層,ex: 4!時,a=24
                {
                        a=a*j;
                }
                fx=fx+1/a;  //儲存 1/1! + 1/2! + 1/3! + ... +1/n! 到fx中
        }
        return fx;  //將fx回傳
}



B:
輸出結果:
While N=9,my_fun(n)-my_fun(n-1)<0.00001


#include<stdio.h>

int main()
{
    double my_fun(int);  //宣告一副程式my_fun(),回傳值為double,輸入值為int型態
    int n=1;
    while(n)   //只要n為真(亦即n=/=0),則迴圈會不斷的執行
    {
        if(my_fun(n)-my_fun(n-1)<0.00001)  //判斷my_fun(n)與my_fun(n-1)相減是否小於0.00001
        {
            printf("While N=%d,my_fun(n)-my_fun(n-1)<0.00001\n",n);   //如果是,則列出n
            break;                                                                                                //並且跳出迴圈
        }
        else
        {
            n++;                                                                                                      //不是的話,n每次累加1
        }
    }
    return 0;
}

double my_fun(int n)        //註解如上(q8_13a)
{
    double fx=0;
    int i,j;
    for(i=1 ; i<=n ; i++)
    {
        double a=1;
        for(j=1 ; j<=i ; j++)
        {
            a=a*j;
        }
        fx=fx+1/a;
    }
    return fx;
}


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 nanosheep 的頭像
    nanosheep

    LearningNote

    nanosheep 發表在 痞客邦 留言(1) 人氣()