我想將陣列中的值利用函式加個數
可是我寫出來的變成只有最後一個數加上
請教各位一下
程式碼如下
#include
int f(int x[]);
void main()
{
int w,a[]={2,1,7,9,5,6};
for(w=0;w<6;w++)
{printf("%d \n",f(a));
}
}
int f(int x[])
{int s,i;
for (s=0;s<6;s++)
{x[s]=x[s]+10;
i=x[s];
}
return i;
}
2007-01-13 14:08:25 · 2 個解答 · 發問者 Jack 2 in 電腦與網際網路 ➔ 程式設計
To:藍色水瓶
為什麼是用f(a,w)而不是f(a)呢?
麻煩替我這個阿呆解答一下@@
感謝兩位的回答^^
2007-01-15 02:57:56 · update #1
int f(int x[],int s)
{
x[s]=x[s]+10;
return x[s];
}
printf("%d\\n",f(a,w));
2007-01-15 08:44:38 補充:
每次進入函式 迴圈都會執行一輪
出來的結果只有陣列的最後一個
所以把函式內的迴圈拿掉
反正沒用到
2007-01-13 19:04:35 · answer #1 · answered by poolqa 3 · 0⤊ 0⤋
#include
#include
void f(int x[])
{int s;
for (s=0; s<6; s++)
x[s] += 10;
}
void main()
{ int w, a[]={2,1,7,9,5,6};
f(a);
for(w=0; w<6; w++)
printf("%d\\n", a[w]);
system("pause");
}
你錯在:
你印出的是副程式傳回值。
而副程式每次都把 a從第0個到第5個都加10,
而傳回值 i 是第5個 a 加10的值。
2007-01-14 00:24:34 補充:
這種寫法不太好,一不小心,就會算超過足標的大小。
如:你將來把 a[] 改成了 {2, 1, 7, 9} (少了 5, 6兩個值),
而你只記得改主程式 w<4,忘了改副程式 s<4!
方法一:藍色水瓶的方法。副程式只處理主程式指定的那一個值。
優點:簡單,而且絕不會有副程式漏改的問題。
缺點:1. 多傳一個參數,較慢。
2. 現代的CPU和Compiler往往可以幫你加速。
你例子剛好就可。
但藍色水瓶法,Compiler沒辦法幫你加速。
2007-01-14 00:24:56 補充:
方法二:Jacob Lee 法。沒有藍色水瓶法的缺點,但有Lori法的危險!
解決之道:請Compiler幫你處理!
方法 1. 設個全域變數 (Global Variable, GV):
int array_size;
副程式用 s
改 w
2. 程式較慢一小點:GV的速度〝有時候〞會比區域變數慢一小點!
2007-01-14 00:28:43 補充:
方法 2. 用 OO。OO沒有方法 1. 的缺點。
缺點:1. 個人認為OO較難學。
2. OO的程式較難Compiler,因此程式較大,且執行速度較慢。
OO人的說法:正確性遠比那一點速度差別重要。
個人觀點:因程式大小不同,慎選該用 OO 或 非 OO 語言。
2007-01-15 08:39:50 補充:
藍色水瓶把你的副程式改寫成一次只算你要算的那一個 element 的值,
而不是算整個陣列的值。
所以,要告訴副程式:我現在要算哪一個。
2007-01-13 19:10:49 · answer #2 · answered by ? 7 · 0⤊ 0⤋