C程序计算平均值

C program calculate average

此代码的平均值不正确。如何用这段代码求解平均值。我尝试了所有的事情,但每次都是一样的。它仅显示最后一个平均数。

    #include<stdio.h>
void compute(int anumber,int *max,int *min,float *average,int count);

int main ()
{
    int max=0,min=100;
    float average=0;
    int number,i=0;


    printf("\nenter a number:");
    scanf("%d",&number);
    while(number>0){
        i++;
        compute(number,&max,&min,&average,i);
        printf("\nenter a number:");
        scanf("%d",&number);
    }
    printf("\naverage %.2f",average);
    printf("\ncount %d",i);
    printf("\nmin %d",min);
    printf("\nmax %d",max);

    return 0;

}
void compute(int anumber,int *max,int *min,float *average,int count)
{
    float total;
    total=total+anumber;

    *average=total/count;
    ++count;
    if(anumber>*max)
       *max=anumber;
    else if(anumber<*min)
       *min=anumber;
}

您的变量 "total" 是 compute() 函数的局部变量,因此它不包含所有输入数字的总和 - 每次调用 compute() 时它都是新变量,即每次循环时间。

如果你想一次处理每个数字,你可以在计算函数中找到总计,如果你把总计设为全局变量。那么正确的方法是通过将总数除以值的数量来求一次平均值。

问题 #1: 总数和数字未初始化。

在 C 中,没有为您完成变量的初始化。之后的总价值是多少:

float total;

答案:内存中分配位置的任何内容。它可以是 0、20、94、15、7 或 -23 亿,除非 you 给它一个任意值。它的价值是不确定的。

total=total+anumber;

通过将一个数字与一个未知数相加,您不知道总数会变成多少。

问题 #2: 你没有计算总数。

总数是通过取一组中的所有数字并将它们相加来计算的。

即数字 2、4、6 的总数是 2 + 4 + 6,等于 12。首先你应该注意的是重复的存在。添加是可以抽象的公共方面。我们通常将重复抽象为一个循环,即

int i;
float total = 0;
for(i = 0; i <= 6; i+=2)
{
     total += i;
}

您的程序中需要类似的循环。

你的计算函数无效,它不能return一个值。有几种方法可以确定总数,以便您可以计算平均值。

  1. 例如,在全局范围内定义总计,这是通过将它移到任何函数体之外来完成的。您必须从函数中删除 total 的定义,因为将使用最近的外部作用域中的变量。

  2. 使total static,不会在每次函数调用之间自动释放。这允许您传入值并允许保留总数。

无论您的选择如何,您都必须进行一些更改,因为现在您实际上并不是在计算平均值。有关分配给您的任务或任务的更多详细信息将使每个人受益。 C的关键字很少,但是使用方法很多,为了完整回答你的问题,我们必须知道:

  1. 程序应该做什么?预期 input/output 帮助很大。为了提出解决方案,您必须首先充分了解问题。即使从编写良好且有效的代码中提取预期的功能也可能是一个挑战,使用损坏的代码几乎不可能做到这一点。

  2. 是否提供了规格?你了解他们吗?我从您的评论中看到您不允许更改功能headers/prototypes,您还有哪些其他限制?

最后一点。我假设这是一项家庭作业,因为有人已经学习了很多基于 C 编程的 类 并且自己教过一些我可以向你保证 - 你将通过仅接受帮助来从练习中获得最大收益有必要,自己也尽量自己去想问题。