![]() |
|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
![]() ![]() |
|
主題工具 | 顯示模式 |
|
![]() |
#1 |
長老會員
![]() |
![]() 這c語言程式我寫不出來
![]() 此帖於 2006-05-11 10:40 AM 被 leowang 編輯. |
__________________ 金錢的數量,決定馬子的漂亮 硬碟的容量,決定男人的力量 製作Mail Logo按這裡 |
|
![]() |
送花文章: 257,
![]() |
![]() |
#2 (permalink) |
管理版主
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() <第一算式>
x的k次方 就是 int i; for(i=1; i<k; i++) x=x*x; return x; <第二算式> k! 就是 int i, k_sum=1; //k_sum表示k! 的和 for(i=1; i<=k; i++) k_sum=k_sum*i; return k_sum; 那Σ ,n , k=1 就是表示 累加 n 次 <第一算式> 除以 <第二算式> double sum=0; for(i=0; i<n; i++) /* sum= sum + <第一算式> 除以 <第二算式> */; |
![]() |
送花文章: 2055,
![]() |
![]() |
#3 (permalink) |
管理版主
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() 試寫了一下
不知對不對 語法:
#include <stdio.h> #include <stdlib.h> /* x的k次方 */ double xx(double x, int k) { int i; for(i=1; i<k; i++) x=x*x; return x; } /* k! */ int kk(int k) { int i, k_sum=1; //k_sum表示k! 的和 for(i=1; i<=k; i++) k_sum=k_sum*i; return k_sum; } /*函式 my_fun */ double my_fun(double x, int n) { double sum=0; int i, k=1; for(i=k; i<=n; i++){ sum=sum+(xx(x,i) / kk(i)); } return sum; } int main(int argc, char *argv[]) { printf("%f", my_fun(0.1, 8)); system("PAUSE"); return 0; } |
![]() |
送花文章: 2055,
![]() |
![]() |
#4 (permalink) |
管理員
![]() ![]() |
![]() 語法:
/* 數學式︰ n x^k x^1 k^2 k^n Σ ═--─═--- + --- + ... + --- k=1 k! 1! 2! n! let x = 0.1 ; n = 8 */ #include <stdio.h> #include <stdlib.h> double my_fun(double x,int n) /* 數學運算式 */ { int i,j; double sum = 0; for(i=j=1; i<=n; i++) { j*=i; /* 計算 n! 是多少階乘,既 1×2×..n */ sum += pow(x,i)/j ; /* 計算 x次方 ÷n! 的加總 */ /* pow(x值,i次方)函式 */ } return sum; } display_00() /* 顯示畫面 */ { system("cls"); puts("數學公式:"); puts(" n x^k x^1 k^2 k^n"); puts("Σ = --- = --- + --- + ... + ---"); puts(" k=1 k! 1! 2! n!"); puts("\n let x = 0.1 ; n = 8"); } main() /* 主程式 */ { display_00(); printf("\nSUM = %0.16f \n\n",my_fun(0.1,8) ); system("pause"); } 應該是對的 ... 答案跟 mini 大的一樣 這種 運算式算是有規律性值得,如 p(n,r) 可以用 for/while loop 或 遞回函式去寫 PS. 遞回函式,某些程式碼可能變的很簡單,也時有變的更複雜 ...。 此帖於 2006-05-11 04:32 PM 被 getter 編輯. |
__________________ 在「專業主討論區」中的問題解決後,要記得按一下 ![]() 這是一種禮貌動作。 ![]() 一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。 不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。 天線寶寶說再見啦~ ... 天線寶寶說再見啦~ 迪西:「再見~ 再見~」 『 Otaku Culture Party 』 關心您 ... ![]() |
|
![]() |
送花文章: 37855,
![]() |
![]() |
#5 (permalink) |
管理員
![]() ![]() |
![]() 這是遞回函式的寫法 ... 因為... 所以... 用到了 2 個遞回函式
1. n! 求階乘的遞回函式 2. 運算加總的遞回函式,用 switch() 的方法。 供參考 檔案下載 (原始碼+執行檔) http://rapidshare.de/files/20164379/SUMS.rar.html 語法:
/* 遞回函式06-1 數學式︰ n x^k x^1 k^2 k^n Σ ═---═--- + --- + ... + --- k=1 k! 1! 2! n! let x = 0.1 ; n = 8 */ #include <stdio.h> #include <stdlib.h> fact(int n) /* 遞回函式,求 n! 階乘 */ { int sum = 1; if (n==0 || n==1) { return 1; } else { sum = n * fact(n-1); /* 自己呼叫自己做連乘到 n */ return sum; } } double my_fun(double x,int n) /* 遞回函式,數學式加總 */ { int i=1; switch (n) { case 0: /* n 為 0 的狀況 */ return pow(x,0)/i; /* 可以用 return 1; 取代 */ case 1: /* n 為 1 的狀況 */ i = fact(n); return pow(x,1)/i; default: /* n > 1 的狀況 */ i = fact(n); return my_fun(x,n-1)+pow(x,n)/i; /* 自己呼叫自己加總到 n */ } } display_00() /* 顯示畫面 */ { system("cls"); puts("數學公式:"); puts(" n x^k x^1 k^2 k^n"); puts("Σ = --- = --- + --- + ... + ---"); puts(" k=1 k! 1! 2! n!"); puts("\n let x = 0.1 ; n = 8"); } main() /* 主程式 */ { int x; display_00(); for(x=0; x<=8; x++) /* 依序顯示 n = 0 ~ 8 的值 */ { printf("\n n=%d,SUM = %0.16f",x,my_fun(0.1,x)); } puts("\n"); system("pause"); } 2. 運算加總的遞回函式,用 if - else if - else 的方法 。 語法:
/* 遞回函式06-2 數學式︰ n x^k x^1 k^2 k^n Σ ═---═--- + --- + ... + --- k=1 k! 1! 2! n! let x = 0.1 ; n = 8 */ #include <stdio.h> #include <stdlib.h> fact(int n) /* 遞回函式,求 n! 階乘 */ { int sum = 1; if (n==0 || n==1) { return 1; } else { sum = n * fact(n-1); return sum; } } double my_fun(double x,int n) /* 遞回函式,數學式加總 */ { int i=1; if (n==0) /* n 為 0 的狀況 */ return pow(x,0)/i; /* 可以用 return 1; 取代 */ else if ( n==1 ) /* n 為 1 的狀況 */ return x; else /* n > 1 的狀況 */ { i = fact(n); return my_fun(x,n-1)+pow(x,n)/i; } } display_00() /* 顯示畫面 */ { system("cls"); puts("數學公式:"); puts(" n x^k x^1 k^2 k^n"); puts("Σ = --- = --- + --- + ... + ---"); puts(" k=1 k! 1! 2! n!"); puts("\n let x = 0.1 ; n = 8"); } main() /* 主程式 */ { int x; display_00(); for(x=0; x<=8; x++) /* 依序顯示 n = 0 ~ 8 的值 */ { printf("\n n=%d,SUM = %0.16f",x,my_fun(0.1,x)); } puts("\n"); system("pause"); } 此帖於 2006-05-11 04:40 PM 被 getter 編輯. |
![]() |
送花文章: 37855,
![]() |
![]() |
#6 (permalink) |
長老會員
![]() |
![]() 語法:
#include <stdio.h> #include <stdlib.h> void my_fun(double,int); int pow(double,int); int factorial(int); int main(void) { double x=0.1; int n=8; my_fun(x,n); system("pause"); return 0; } void my_fun(double x, int n) { double result=0; int i; for (i=1;i<=n;i++) result=result+(pow(x,i)/factorial(i)); printf("%f\n",result); } int pow(double x, int k) { int i; for(i=1; i<k; i++) x=x*x; } int factorial (int n) { if (n==1) return 1; else return n * factorial(n-1); } 但不知道該怎麼改~~請大大幫幫忙 此帖於 2006-05-11 08:14 PM 被 leowang 編輯. |
![]() |
送花文章: 257,
![]() |