通过引入数字直到按下0来计算算术和几何均值

时间:2018-08-15 15:53:09

标签: c scanf

我必须计算用户使用C语言输入的数字的算术和几何平均值。该算法可以正常工作,但是在按下0之前,我不知道如何输入数字。我尝试了很多事情,但是没有任何效果。到目前为止,这是我一直尝试做的事情。感谢您的帮助。

int main() {
    int n, i, m, j, arr[50], sum = 0, prod = 1;

    printf("Enter numbers until you press number 0:");
    scanf("%d",&n);
    while (n != 0) {
        for (i = 0; i < n; i++) {
            scanf("%d", &arr[i]);
            sum = sum + arr[i];
            prod = prod * arr[i];
        }
    }
    int armean = sum / n;
    float geomean = pow(prod, (float)1 / n);

    printf("Arithmetic Mean = %d\n", armean);
    printf("Geometric Mean = %f\n", geomean);
    getch();
}

4 个答案:

答案 0 :(得分:4)

您的代码要求事先提供值的数量,然后读取那么多的值。那不是你要做的。

您需要循环查询数字,并在读取的数字为0时退出循环。甚至不需要数组:

int n = 0, i, m, j, sum=0, prod=1;

while (1) {
    int value;
    scanf("%d",&value);
    if (value == 0) {
        break;
    }

    sum=sum+value;
    prod=prod*value;
    n++;
}

int armean=sum/n;
float geomean=pow(prod,(float) 1/n);

答案 1 :(得分:1)

  1. 输入值0时必须中断for循环;因此您应该检查arr [i]。
  2. 不需要循环。

请通过下面的代码;这可能是完整的帮助:

#include <stdio.h>
int main()
{

    int n, i, m, j, arr[50], sum=0, prod=1;
    printf("Enter numbers until you press number 0:");
    for(i=0; i<50; i++)
    {
        scanf("%d",&arr[i]);
        if (arr[i] == 0)
        {
            break;
        }
        sum=sum+arr[i];
        prod=prod*arr[i];
    }
    printf ("%d %d\n",sum, prod);
    n = i+1;
    int armean=sum/n;
    float geomean=pow(prod,(float) 1/n);

    printf("Arithmetic Mean = %d\n",armean);
    printf("Geometric Mean = %f\n",geomean);
    getch();
    return 0;
}

答案 2 :(得分:1)

dbush说的是正确的,您不需要数组,也不需要事先询问数字,但是他没有告诉您如何找到值的数目

int main()
{
int n, sum=0, prod=1, num;
printf("Enter numbers until you press number 0:\n");
for(n=0; ; n++)
{
    scanf("%d",&num);
    if(num==0)
        break;

    sum=sum+num;
    prod=prod*num;
}
printf("sum is %d \n",sum);
printf("prod is %d \n",prod);
printf("n is %d \n",n);
float armean=sum/n; //why int?
float geomean=pow(prod,(float) 1/n);

printf("Arithmetic Mean = %d\n",armean);
printf("Geometric Mean = %f\n",geomean);
//getch();  why getch(), you are not using turboc are you?
}

答案 3 :(得分:0)

不需要数组,但是您应该在从用户那里读取0中输入的数字后对其进行测试。最好也使用浮点算术,以避免算术溢出,因为溢出会很快产生于值的乘积。

在任何情况下,都必须包括<math.h>才能正确定义pow,应该测试scanf()的返回值,如果没有数字,请避免除以00之前输入。

#include <stdio.h>
#include <math.h>

int main() {
    int n = 0;
    double value, sum = 0, product = 1;
    printf("Enter numbers, end with 0: ");
    while (scanf("%lf", &value) == 1 && value != 0) {
        sum += value;
        product *= value;
        n++;
    }
    if (n > 0) {
        printf("Arithmetic mean = %g\n", sum / n);
        printf("Geometric mean = %g\n", pow(product, 1.0 / n));
        getch();
    }
    return 0;
}