2014-03-24 128 views
1

我製作了這個程序來訂購數據集並顯示最大值,最小值,平均值和中位數。本來我的主要任務是,我決定通過製作功能來清理它。平均功能是運作基金,但是在nan後增加了幾個平均值。有什麼建議麼?在此先感謝球員返回的平均函數nan

#include <stdio.h> 

int findSize(); 
double findAverage(int size, double num[]); 
double findMedian(int size, double num[]); 
void findLowtoHigh(int size, double num[]); 
void findHightoLow(int size, double num[]); 

int main() 
{ 
while(1) 
{ 
    int size = findSize(); 

    if(size <= 1) 
    { 
    return 0; 
    } 

    double num[size]; 
    double holder; 
    double lowest; 
    double highest; 
    double average; 
    double median; 

    fprintf(stdout, "\n"); 

    for(int i = 0; i <= size - 1; i++) 
    { 
    int j = i+1; 
    fprintf(stdout, "Please enter number %d: ", j); 
    fscanf(stdin, "%lf", &num[i]); 
    } 

    if(size > 1) 
    { 
    for(int y = 0; y < size - 1; y++) 
    { 
    for(int k = 0; k < size - 1; k++) 
    { 
    if(num[k] > num[k+1]) 
    { 
     holder = num[k]; 
     num[k] = num[k+1]; 
     num[k+1] = holder; 
    } 
    } 
    } 
    } 

    findLowtoHigh(size, num); 

    findHightoLow(size, num); 

    average = findAverage(size, num); 

    median = findMedian(size, num); 

    fprintf(stdout, "\n\nLowest Value: %3.4f", num[0]); 
    fprintf(stdout, "\nHighest Value: %3.4f", num[size-1]); 
    fprintf(stdout, "\n\nAverage Value: %3.4f\n", average); 
    fprintf(stdout, "Median Value: %3.4f", median); 

    fprintf(stdout, "\n"); 
} 

} 

int findSize() 
{ 
int size; 

fprintf(stdout, "\nPlease enter size of the array: "); 
scanf("%d", &size); 

return size; 
} 

void findLowtoHigh(int size, double num[]) 
{ 
fprintf(stdout, "\nFrom least to greatest: "); 

for(int x = 0; x <= size - 1; x++) 
{ 
    fprintf(stdout, "%3.2f ", num[x]); 
} 
} 

void findHightoLow(int size, double num[]) 
{ 
fprintf(stdout, "\nFrom greatest to least: "); 

int reverse = size - 1; 

while(reverse != -1) 
{ 
    fprintf(stdout, "%3.2f ", num[reverse]); 
    reverse--; 
} 
} 

double findAverage(int size, double num[]) 
{ 
double average; 

for(int a = 0; a <= size - 1; a++) 
{ 
    average = average + num[a]; 
} 

average = average/size; 

return average; 
} 

double findMedian(int size, double num[]) 
{ 
double median; 

if(size % 2 == 0) 
{ 
    median = (num[size/2 - 1] + num[size/2])/2; 
} 
else 
{ 
    median = num[size/2]; 
} 

return median; 
} 
+1

定義爲array [num]的數組的元素是array [0],array [1],...,array [num-1]。您正在訪問數組外部的一個元素。 – pmg

+0

你的程序中有*未定義的行爲*。檢查你的循環條件。 –

回答

2

您必須初始化average。更改爲

double average=0; 
+0

謝謝!這工作。我會開始初始化,我從爪哇過來,我猜我太過分了。出於好奇,我的其他變量像中位數也是以同樣的方式初始化的,爲什麼沒有任何問題?我現在已經初始化了所有這些以確保安全,謝謝! – yaboi

+0

@ user3457012因爲您正在使用'average'(最初是垃圾)並添加它的值。在其他情況下,比如'median',它們總是被賦值(並且垃圾值不被使用)。 –

0

編譯與(輕度)優化和所有reasobnable警告你prrogram開啓(gcc -O -Wall是Linux上的起點,clang類似),並檢查(和修復!)編譯器的所有投訴。只有這樣你纔可以問'網絡。