|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-05-11, 10:22 AM | #1 |
長老會員
|
疑問 - 急....這程式我寫不出來
這c語言程式我寫不出來
此帖於 2006-05-11 10:40 AM 被 leowang 編輯. |
__________________ 金錢的數量,決定馬子的漂亮 硬碟的容量,決定男人的力量 製作Mail Logo按這裡 |
|
送花文章: 257,
|
2006-05-11, 11:45 AM | #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 + <第一算式> 除以 <第二算式> */; |
送花文章: 2027,
|
2006-05-11, 12:05 PM | #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; } |
送花文章: 2027,
|
2006-05-11, 12:32 PM | #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,
|
2006-05-11, 03:33 PM | #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,
|
2006-05-11, 06:43 PM | #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,
|
2006-05-11, 10:46 PM | #7 (permalink) | |
管理員
|
引用:
int pow(double,int); 和 int pow(double x, int k) { int i; for(i=1; i<k; i++) x=x*x; } 直接刪掉就好啦 因為 pow(x,y); 是 C 語言內建的函數指令 ... 不需要自己寫副函式 就能直接用,好像是包在 stdlib.h 裏面 ... 改好的...程式 語法:
#include <stdio.h> #include <stdlib.h> void my_fun(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("%0.16f\n",result); } int factorial (int n) { if (n==1) return 1; else return n * factorial(n-1); } %-xn.mf - 從強制從最左邊開始印(預設是從右邊,沒有減號時)。 x 要不要將空未補零值 n 指的是小數點左邊顯示幾位數 m 指的是右邊顯示幾位數。 ex 1: printf("%10.3f",12.123456); 顯示 10.123 ex 2: printf("%010.3f",12.123456); 顯示 0000000010.123 ex 2: printf("%-10.3f",12.123456); 顯示 10.123 %-xnd - 從強制從最左邊開始印(預設是從右邊,沒有減號時)。 x 要不要將空未補零值 n 指的是小數點左邊顯示幾位數 此帖於 2006-05-11 11:15 PM 被 getter 編輯. |
|
送花文章: 37855,
|
2006-05-13, 08:24 PM | #8 (permalink) | |
管理版主
|
引用:
每個人有適合自己的東西及學習方法 離開學校後有4~5年沒碰程式語言 但只要手上能查到語法(舊書及WWW) 剩下的就是 想像力及一點點的邏輯+微弱的程式語言基礎 而 .寫作期間的"熱衷"是 學習的基礎 及 完成度的助力 .看別人程式要找重點 (要完全看的懂他人的寫作,不可能...起碼對個人來說~) .將功能、能想到的抽象東西 及 有助力 的東西畫出來 (管他畫出什麼,自己喜歡就好) .可以的話寫程式語言盡量模組化,打個比方: 要寫一個紅綠燈程式 語法:
main() { do{ 亮燈副程式(哪一個燈參數) 跳出條件之輸入 loop until(是否為跳出條件) } 當然 語法的基礎是不可缺少的東西 只是可靠上WWW來補足 相形之下 此時關鍵字的搜尋經驗就影響到順利度 最後久而久之累積經驗... |
|
送花文章: 2027,
|