麻煩c語言高手看一下囉...急 |
|
sunnysophia
一般會員 發表:8 回覆:4 積分:2 註冊:2004-11-15 發送簡訊給我 |
如果我要寫一個求中位數的程式
x為長度10的陣列(x[0]~x[10]已排序)
以下是我寫的求中位數的函式
我想問的是
因為我是藉由printf來檢查我所求是否有錯
但我發現
當我取DATA_SIZE = 10時
x[4]與x[5]印出來的值 居然會與已排序好的x[4]及x[5]不一樣
這種情形不是每run一次就這樣
是有時候會出現這種錯 但Md值都還是算對
請問大大我哪裡有錯嗎?
由於是程式新手 麻煩指點...^^
double median(double *x)
{
bubble_sort(x);
int Md2, Md3, Md4;
double Md1, Md;
if(DATA_SIZE % 2 == 0) // DATA_SIZE為偶數時
{
Md1 = (DATA_SIZE / 2) 0.5; // 決定中位數之位次
printf("Md1=%f\n",Md1);
Md2 = Md1 - 0.5;
printf("Md2=%d\n",Md2);
Md3 = Md1 0.5;
printf("Md3=%d\n",Md3);
Md = (x[Md2 - 1] x[Md3 - 1]) / 2;
printf("x[%d]=%f\n",Md2-1,x[Md2-1]);
printf("x[%d]=%f\n",Md3-1,x[Md3-1]);
printf("Md=%f\n",Md);
}
if(DATA_SIZE % 2 != 0) // DATA_SIZE為奇數時
{
Md4 = (DATA_SIZE / 2) 0.5; // 決定中位數之位次
printf("Md4=%d\n",Md4);
Md = x[Md4];
printf("Md=%f\n",Md);
}
return Md;
}
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
sunnysophia 您好: 幾個建議供您參考:
1.您貼錯區了。
2.x為長度10的陣列(x[0]~x[9]已排序)=>陣列數值似乎打錯了。
3.您的演算規則一時間無法體會,底下改寫您的程式碼,供您參考修改。
double median(double *x) { bubble_sort(x); double Md; int index = (int) Data_SIZE / 2; if (DATA_SIZE % 2 == 0) // DATA_SIZE為偶數時 Md = ( x[index-1] x[index] ) / 2.; // 最中間兩項的平均值 else Md = x[index]; // DATA_SIZE為奇數時,為中間那一項 return Md; }RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |