![]() |
|
|||||||
| 論壇說明 |
|
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
![]() |
|
|
主題工具 | 顯示模式 |
|
|
#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 + <第一算式> 除以 <第二算式> */; |
|
|
送花文章: 2057,
|
|
|
#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;
}
|
|
|
送花文章: 2057,
|
|
|
#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,
|
|
|
#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,
|
|
|
#8 (permalink) | |
|
管理版主
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
引用:
每個人有適合自己的東西及學習方法 離開學校後有4~5年沒碰程式語言 但只要手上能查到語法(舊書及WWW) 剩下的就是 想像力及一點點的邏輯+微弱的程式語言基礎 而 .寫作期間的"熱衷"是 學習的基礎 及 完成度的助力 .看別人程式要找重點 (要完全看的懂他人的寫作,不可能...起碼對個人來說~) .將功能、能想到的抽象東西 及 有助力 的東西畫出來 (管他畫出什麼,自己喜歡就好) .可以的話寫程式語言盡量模組化,打個比方: 要寫一個紅綠燈程式 語法:
main()
{
do{
亮燈副程式(哪一個燈參數)
跳出條件之輸入
loop until(是否為跳出條件)
}
當然 語法的基礎是不可缺少的東西 只是可靠上WWW來補足 相形之下 此時關鍵字的搜尋經驗就影響到順利度 最後久而久之累積經驗... |
|
|
|
送花文章: 2057,
|