我抨擊我的頭,因爲我無法弄清楚爲什麼我的C代碼不斷打印一組n個數字的錯誤平均值!爲什麼我的平均答案不正確? (C代碼程序找到的意思)
這是我下面的代碼:
int main()
{
int i;
int n;
int sum = 0.0;
int lowest;
int highest;
float average;
int range;
int middle;
double median;
printf("\nEnter the amount of numbers you want?\n");
scanf("%d",&n);
int numbs[n];
int temp[n];
for(i = 0;i < n; i++)
{
printf("\nEnter a number from 0 to 15: ");
scanf("%d",&temp[i]);
}
while (temp[i] < 0 || temp[i] > 15) than 15
{
printf("This number is not from 0 to 15! Please re-enter another number: ");
scanf("%d",&temp[i]);
}
numbs[i] = temp[i];
sum += numbs[i];
}
int sortt = 0, j, x;
for (x = 1; x < n; x++) {
for (j = 0; j < n - x; j++) {
if (numbs[j] > numbs[j + 1]) {
sortt = numbs[j];
numbs[j] = numbs[j + 1];
numbs[j + 1] = sortt;
}
}
}
lowest = numbs[0];
highest = numbs[n-1];
middle = n/2;
if (n % 2)
{
median = numbs[middle];
}
else
{
median = (numbs[middle - 1] + numbs[middle])/2.0;
}
average = sum/n;
range = highest - lowest;
printf("\nSum: %d", sum);
printf("\nAverage: %.2f", average);
printf("\nMedian: %.2f", median);
printf("\nRange: %d\n", range);
return 0;
}
這是我的輸入和輸出下方。你可以看到8除以3不是2,它是2.67!我試過使用double和float。
輸入&輸出:
這是一個可怕的混亂。學習正確的格式,這是編寫正確代碼的第一個狀態。 – Olaf
'int sum = 0.0;'讓我猜,你編譯時沒有啓用警告?將'-Wall -Wextra'添加到您的編譯字符串,並且不接受代碼,直到它編譯時沒有警告。請參閱[**如何調試小程序**](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)並與鴨子交談... –
'average = sum/n;'你在這裏除了兩個int。你需要說'average = sum /(double)n;'或者它會被截斷。 – rlbond