我抨击我的头,因为我无法弄清楚为什么我的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