【发布时间】:2013-09-16 05:49:48
【问题描述】:
在提示用户输入 5 个整数后,我正在尝试计算算术、几何和调和平均值以及标准差。
我的算术平均值运行良好。它之后的其他人很麻烦..我几乎肯定这是因为我的结构,但我只是不确定在网上和我的教科书中研究后要改变什么......并且对此表示赞赏!
代码如下:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
float a_mean;
float g_mean;
float h_mean;
float st_dev;
sum1 = 0; sum2 = 0; sum3 = 0;
float data[100];
n = 5;
int i;
int main()
{
printf("Please Enter Five Integers:\n"); /* Prompts user input */
for ( i = 0; i < n; ++i)
{
scanf("%f", &data[i]);
sum1 = sum1 + data[i];
}
a_mean = sum1 / n;
{
sum2 = sum2 * data[i];
}
g_mean = pow(sum2, 1 / n);
{
sum3 = sum3 + ( 1 / data[i] );
}
h_mean = n / sum3;
printf("Arithmetic mean: %0.2f\n", a_mean);
printf("Geometric mean: %0.2f\n", g_mean);
printf("Harmonic mean: %0.2f\n", h_mean);
return 0;
}
我知道这可能是我的 for 结构的基本内容,但我对这些东西还不太了解,所以提前谢谢
**另外,忽略我还没有尝试为标准偏差形成计算/输出的事实。谢谢
【问题讨论】:
-
好的,谢谢大家,我最小化了全局变量,将循环移到一起并进行了一些调整,我的 arith 和harm 都可以工作,但是 geo 给了我 0.00,这个公式看起来有缺陷吗编码去?谢谢
-
是的,您的几何平均值逻辑有缺陷。想想第一次通过循环会发生什么 - sum2 是 0,所以 sum2 * data[0] 将是 0。所以在下一次通过循环时 sum2 仍然是 0 ...
-
sum2 += sum2 * data[i];
-
对不起,我按下了回车键..这一切都是一条评论。无论如何,然后我有 g_mean = pow(sum2, 1 / n);用于最终计算。这给了我一个值,在测试时,在实际地理位置的 + 或 - ~2 内。意思应该是。
-
这让我很吃惊。 0+0 仍然是 0。 pow(sum2, 1/n) 也是有问题的。 1 和 n 都是整数,这意味着 1/n 将是整数除法。对于 n > 1 的任何值,1/n 将为 0。1.0/n 将强制浮点除法,这将为您提供所需的小数结果。