此代码的平均值不正确。如何用这段代码求解平均值。我尝试了所有的事情,但每次都是一样的。它仅显示最后的平均数。
#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;
}
您的程序中需要一个类似的循环。
您的计算函数无效,它无法返回值。有多种方法可以确定总数,以便您可以计算平均值。
例如,在全局范围内定义总计,这是通过将其移至任何函数体之外来完成的。您必须从函数中删除 Total 的定义,因为将使用最接近的外部作用域中的变量。
将其设置为完全静态,它不会在每次函数调用之间自动释放。这允许您传入值并保留总数。
无论您如何选择,您都必须做出一些更改,因为目前您实际上并未计算平均值。有关您所分配的任务或任务的更多详细信息将使每个人受益。 C 的关键字很少,但使用它们的方法很多,为了完全回答您的问题,我们必须知道:
该程序应该做什么?预期的输入/输出有很大帮助。为了找到解决方案,您必须首先充分了解问题。即使从编写良好且可工作的代码中提取预期功能也可能是一个挑战,而使用损坏的代码则几乎不可能做到这一点。
您是否获得了规范?你了解他们吗?我从您的评论中看到您不允许更改函数头/原型(prototype),您还有哪些其他限制?
最后一点。我假设这是一项家庭作业,作为一个参加过许多基于 C 编程的类(class)并且自己教过一些类(class)的人,我可以向您保证 - 通过仅接受必要的帮助,您将从练习中获得最大 yield ,努力自己也尽可能多地思考问题。
关于C程序计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36385023/