【问题标题】:Average of an arbitrary amount of numbers任意数量数字的平均值
【发布时间】:2019-10-14 02:16:14
【问题描述】:

我目前正在尝试为课堂作业创建一个 C 程序,该程序取任意数量的测试分数的平均值。但是,我遇到了一些问题。

我的教授提供了一个大纲来帮助入门。我也只能在指定的地方添加代码,所以没有额外的变量等。

这是我目前所拥有的:

#include <stdio.h>

void calculateAverage()
{
    int grade, count, sum;
    double average;

/*     add code to input grades, calculate average, and print it */
/* --> between here */

printf("Enter the amount of test scores.\n");
scanf("%d", &count);

grade = 0;
sum = 0;

while (grade != -1 && grade <= 100 && grade >= 0)
{
    printf("Enter the grade. Enter -1 when you are done entering grades.\n");
    scanf("%d", &grade);

    if (grade != -1 && grade <= 100 && grade >= 0)
    {           
        sum = sum + grade;      
    }

    else
    {
        average = (sum / count);

        printf("average is %.2lf \n", &average);
    }

}
/* --> and here */
}

int main(void)
{
    while (1)
        calculateAverage();
return 0;
}

所以我遇到的问题是,到目前为止,平均值将始终计算为 0。究竟为什么会发生这种情况,我将如何解决它以便给我正确的平均值?

更新 所以我尝试将平均值加倍,以避免类型不匹配,这确实消除了我的编译器警告,但所有输入值的平均值仍然为 0。

#include <stdio.h>

void calculateAverage()
{
    int grade, count, sum;
    double average;

/*     add code to input grades, calculate average, and print it */
/* --> between here */

printf("Enter the amount of test scores.\n");
scanf("%d", &count);

grade = 0;
sum = 0;

while (grade != -1 && grade <= 100 && grade >= 0)
{
    printf("Enter the grade. Enter -1 when you are done entering grades.\n");
    scanf("%d", &grade);

    if (grade != -1 && grade <= 100 && grade >= 0)
    {           
        sum = sum + grade;      
    }

    else
    {

        average = (double)(sum / count);

        printf("average is %.2f \n", &average);
    }

}
/* --> and here */
}

int main(void)
{
    while (1)
        calculateAverage();

return 0;
}

【问题讨论】:

  • 在这个程序中没有任何东西可以阻止用户说他们将输入 3 个等级,然后实际输入 1000000。为什么不随手计算呢?此外,无需明确测试-1,因为这已经超出了您的 0-100 范围测试。除非你想用它做一些特别的事情。
  • 打开编译器警告(-Wall -Wextra,如果使用 gcc 或 clang)。你应该得到一份关于你使用 printf 的信息。
  • 我使用 -1 是因为我的教授希望我们用它来终止每组成绩。
  • 平均值应该只打印一次。

标签: c average


【解决方案1】:
#include <stdio.h>

void calculateAverage()
{
    int grade, count, sum;
    double average;

/*     add code to input grades, calculate average, and print it */
/* --> between here */

printf("Enter the amount of test scores.\n");
scanf("%d", &count);

grade = 0;
sum = 0;

while (grade != -1 && grade <= 100 && grade >= 0)
{
    printf("Enter the grade. Enter -1 when you are done entering grades.\n");
    scanf("%d", &grade);

    if (grade != -1 && grade <= 100 && grade >= 0)
    {           
        sum = sum + grade;      
    }

    else
    {

        average = (double)(sum / count);

        printf("average is %.2lf \n", average);  #  <---- Please fix this!
    }

}
/* --> and here */
}

int main(void)
{
    while (1)
        calculateAverage();

return 0;
}

你的代码有几个问题:

  1. 一个是您正在使用&amp; 运算符打印平均地址。
  2. 您可以更改的另一件事是在打印双精度时使用correct format specifier

【讨论】:

  • 您认为用于打印double 值的格式有什么问题?
  • 我们使用 %lf 打印双精度值。
  • 啊,那个 printf 语句似乎一直是平均 0 的原因。感谢您的反馈!
  • @Tareun,如果有帮助,请点赞并接受答案。
  • 可以使用%lf打印double的值,只要库符合C99或更高版本,但在C90中只有%f有效,在以后的标准中继续有效.当然,使用较新的符号与scanf() 中使用的格式一致;这是添加功能的主要原因。但是因为所有float 值在传递给printf() 之前总是被提升为double,所以从来没有办法打印float。该表示法始终打印double 值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多