C程序计算平均值

标签 c logic

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

    #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;
}

最佳答案

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

在 C 中,不会为您完成变量的初始化。之后的总计值是多少:

float total;

答案:无论内存中分配的位置是什么。它可以是 0、20、94、15、7 或 -23 亿,除非给它一个任意值。它的值(value)是不确定的。

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;
}

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

您的计算函数无效,它无法返回值。有多种方法可以确定总数,以便您可以计算平均值。

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

  2. 将其设置为完全静态,它不会在每次函数调用之间自动释放。这允许您传入值并保留总数。

无论您如何选择,您都必须做出一些更改,因为目前您实际上并未计算平均值。有关您所分配的任务或任务的更多详细信息将使每个人受益。 C 的关键字很少,但使用它们的方法很多,为了完全回答您的问题,我们必须知道:

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

  2. 您是否获得了规范?你了解他们吗?我从您的评论中看到您不允许更改函数头/原型(prototype),您还有哪些其他限制?

最后一点。我假设这是一项家庭作业,作为一个参加过许多基于 C 编程的类(class)并且自己教过一些类(class)的人,我可以向您保证 - 通过仅接受必要的帮助,您将从练习中获得最大 yield ,努力自己也尽可能多地思考问题。

关于C程序计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36385023/

相关文章:

c++ - 类型 "incompatible types when assigning to type ‘char[100]’ 的错误消息 ‘char *’“

使用套接字连接到许多服务器之一

c - AVR 模拟器中的意外指针重新分配

Java 方法仅使用左下点、宽度和高度来查找作为两个矩形交集的矩形?

prolog - 一袋弹珠的重量

Python - 将数字与 boolean 值进行比较(始终返回 false)

javascript - 为什么这段 C 代码在 JavaScript 中不起作用?

c++ - 如何在 SQLite 中传递用于触发函数的变量?

java - java计算两个日期之间的时间差,考虑营业时间、停工和周末

php - 编程逻辑 - 在特定时间间隔后仅更新数据库一次