【问题标题】:C program calculate averageC程序计算平均值
【发布时间】:2016-04-03 11:49:41
【问题描述】:

此代码的平均值不正确。如何使用此代码解决平均值。我尝试了所有的东西,但每次都是一样的。它仅显示最后一个数字平均值。

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

【问题讨论】:

    标签: c logic


    【解决方案1】:

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

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

    float total;
    

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

    total=total+anumber;
    

    将一个数字加到一个未知数字上,您不知道总数会变成多少。

    问题 #2:您不计算总数。

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

    I.E.数字 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. 您是否给出了规格?你了解他们吗?我从您的评论中看到您不允许更改函数头/原型,您还有哪些其他限制?

    最后一点。我假设这是一个家庭作业,作为一个上过许多基于 C 编程的课程并且自己教过一些课程的人,我可以向你保证——你将通过只接受必要的帮助来充分利用练习,尽量自己独立思考问题。

    【讨论】:

      【解决方案2】:

      您的变量“total”是 compute() 函数的本地变量,因此它不包含所有输入数字的总和 - 每次调用 compute() 时它都是新变量,每次通过循环.

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

      【讨论】:

      • 我可以把“total”写成局部变量吗?我不想在 compute() 函数中使用这个变量。 compute() 函数只能是“void compute(int anumber,int *max,int *min,float *average,int count)”。
      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2013-01-14
      • 1970-01-01
      • 2012-06-19
      相关资源
      最近更新 更多