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;
}