2014-11-23 40 views
0

我如何找到平均值,一組數字的中位數而不使用C中的數組? 問題不是找到平均數或中位數的方法,而是如何存儲一組數字並對它們執行一些操作(如果不允許使用數組)?查找平均值,中位數不使用數組

+0

然後使用一個鏈表。或者如果只有少數數字,則將它們全部作爲函數的參數傳遞。 – 2014-11-23 16:01:33

+1

那麼數字是如何存儲的?以什麼格式?一份文件? – jlandercy 2014-11-23 16:06:07

+0

獲取每個數字一個接一個。將它們中的每一個添加到變量sum中,並將另一個變量count加1。除以總和/計數。你得到的意思是 – 2014-11-23 16:10:59

回答

0

一個有趣的問題。

尋找一個地方來存儲所有數字的關鍵。代碼可以使用文件,鏈接列表等。下面使用鏈表和遞歸。

count是偶數時,將其留給OP以便對多種模式或中位數進行優化。

typedef struct num_S { 
    struct num_S *prev; 
    double x; 
} num_T; 

void GetNum(num_T *prev) { 
    num_T current; 
    current.prev = prev; 
    // If new number found ... 
    if (scanf("%lf", &current.x) == 1) { 
    num_T *p = &current; 
    // Sort new entry into list 
    while (p->prev != NULL && p->x < p->prev->x) { 
     double t = p->x; 
     p->x = p->prev->x; 
     p->prev->x = t; 
     p = p->prev; 
    } 
    GetNum(&current); 
    // End of list -now process the list 
    } else { 
    unsigned ModeCount = 0; 
    double Mode = 0.0; 
    unsigned ModeCandidateCount = 0; 
    double ModeCandidate = 0.0/0.0; 
    unsigned Count = 0; 
    double SumX = 0.0; 
    double SumXX = 0.0; 
    num_T *p = current.prev; 
    while (p != NULL) { 
     Count++; 
     SumX += p->x; 
     SumXX += p->x * p->x; 
     if (p->x == ModeCandidate) { 
     ModeCandidateCount++; 
     } else { 
     ModeCandidateCount = 1; 
     ModeCandidate = p->x; 
     } 
     if (ModeCandidateCount > ModeCount) { 
     ModeCount = ModeCandidateCount; 
     Mode = p->x; 
     } 
     p = p->prev; 
    } 

    printf("Count = %u\n", Count); 
    if (Count > 0) { 
     printf("Mode = %lf Count %u\n", Mode, ModeCount); 
     printf("Mean = %lf\n", SumX/Count); 
     printf("STD = %lf\n", sqrt(Count * SumX - SumXX)/Count); 

     Count /= 2; 
     num_T *p = current.prev; 
     while (Count-- > 0) { 
     p = p->prev; 
     } 
     printf("Median = %lf\n", p->x); 
    } 
    fflush(stdout); 
    } 
} 

int main(void) { 
    GetNum(NULL); 
    return 0; 
} 

輸入4 3 4 2 4 1 EOF
輸出:

Count = 6 
Mode = 4.000000 Count 3 
Mean = 3.000000 
STD = 1.130388 
Median = 3.000000 

STD編號:STD Rapid calculation methods