1

在提示用户输入 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 结构的基本内容,但我对这些东西还不太了解,所以在此先感谢

**另外,忽略我还没有尝试形成标准偏差的计算/输出的事实。谢谢

4

3 回答 3

1

要么在一个 for 循环中进行所有求和,要么在三个 for 循环中进行。

既然你开始尝试两者!

Here is the code:
#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];
                    sum2 = sum2 * data[i];
                    sum3 = sum3 + ( 1 / data[i] );
                }

            a_mean = sum1 / n;
            g_mean = pow(sum2, 1 / n);
            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;
}
于 2013-09-15T21:48:29.533 回答
0

你的问题是for循环只会运行scanf,然后改变sum1。您需要将sum2 = sum2 * data[i]and移动sum3 = sum3 + (1 / data[i])到 for 循环的主体中(在 for 循环之后的 {} 内)。

于 2013-09-15T21:49:19.973 回答
0

首先-您的代码无法编译,您在全局变量中缺少一堆类型。其次 - 您不能仅通过使用大括号来分解循环并继续,在第一个循环之后您拥有的几组只会作为普通代码执行一次,因此其他总和不会被正确收集。

至于风格——尽量少用全局变量,这是个坏习惯

于 2013-09-15T21:49:48.070 回答