【问题标题】:Having trouble calculating the average of 5 numbers in C在 C 中计算 5 个数字的平均值时遇到问题
【发布时间】:2017-01-27 03:24:10
【问题描述】:

我对 C 和编程非常陌生,我在获取 5 个数字的平均值时遇到了问题。我已经尝试了所有我能想到的方法,但我不知道为什么我没有得到除 0 之外的数字。我的代码是:

#include <stdio.h>

int main (void)
{    
  long int first,second,third,fourth,fifth, sum;   
  float avg = (first+second+third+fourth+fifth)/5;     
  printf("Please put in five numbers\n");    
  scanf("%d%d%d%d%d", &first, &second, &third, &fourth, &fifth);    
  printf("You entered: %d %d %d %d %d\n" , first, second, third, fourth, fifth);    
  sum = first+second+third+fourth+fifth;    
  printf("The sum of the numbers you entered is %d\n",
            sum);    
  printf("The average is %d\n", avg);    

  return 0;
}

【问题讨论】:

  • 1) 输入后进行平均计算。例如avg=(float)sum/5; 2) 将%ld 用于long int
  • 2) 读取输入后,除以5.0,而不是5,执行FP除法而不是整数除法。使用"The average is %f\n" 匹配float avg - f,而不是d
  • 4) 将%f 用于float
  • 如果你在写任何代码之前先写出算法,对你会有很大帮助。我无法想象您会编写一个算法来计算平均值,然后才能将数字平均化,但您似乎已经编写了代码来做到这一点。这表明您在写出代码应该做什么之前编写了代码。
  • @DavidSchwartz 实际上 OP 的错误有趣的。在另一个 POV 中,float avg = (first+second+third+fourth+fifth)/5; 可以表示建立了一些并行代码,只要first, second ... or fifth 发生变化,这些代码就会始终执行。这对 C 来说是错误的,但并不是那么难以想象。

标签: c numbers average


【解决方案1】:

我认为问题在于您正在使用计算平均值后给出的变量初始化平均值。尝试在给出变量后计算平均值,即第一,第二,第三,第四和第五。

【讨论】:

  • 还有其他问题。
【解决方案2】:

主要问题是您在获得数字之前计算平均值。未初始化变量的值恰好是0,五个零的平均值也是零。

第二个问题是整数之和除以另一个整数。整数除法会丢弃商的小数部分。

行:

float avg = (first+second+third+fourth+fifth)/5;

必须移动到scanf 之后,并且5 必须变为5.0。结果应显示为带有%f 的浮点数,而不是%d

【讨论】:

    【解决方案3】:

    你的代码有四个问题:

    1. 您在计算变量之前计算平均值。
    2. 您将整数之和与其他整数相除,因此,小数部分将被截断。整数除法会截断小数部分。
    3. 您正在打印avg,您使用格式说明符float 定义为%d,因此它将导致未定义的行为。
    4. 您正在使用 %d 说明符来表示 long int ,它应该是 %ld

    考虑到您的代码会出现的所有这些问题。

    #include <stdio.h>
    int main (void){
    
    long int first,second,third,fourth,fifth, sum;    
    printf("Please put in five numbers\n");    
    
    scanf("%ld%ld%ld%ld%ld", &first, &second, &third, &fourth, &fifth);
    //Changed Due To Problem 4.
    printf("You entered: %ld %ld %ld %ld %ld\n" , first, second, third, fourth, fifth);  
    
    sum = first+second+third+fourth+fifth; 
    
    float avg = (sum)/5.0;     //Changed Problem No.2 and N0.1
    
    printf("The sum of the numbers you entered is %ld\n", //Changed Due To Problem 4.
            sum);    
    
    printf("The average is %f\n", avg);      //Changed Problem No.3  
    
    return 0;
    }
    

    提示
    在寻求帮助之前,请始终尝试自己解决问题,这将使您受益更多。
    并且在编码之前先把它写在纸上,这样会减少很多错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      相关资源
      最近更新 更多