计算一组差异的总和

时间:2020-12-22 03:43:00

标签: c++ arrays

我有一个代码,它计算一个由 10 个数字组成的数组的平均值,然后计算平均值与每个数字之间的差值。现在我需要把所有的差异加起来,但我不知道怎么做。这是我目前所拥有的:

#include <stdio.h>
#include<math.h>

int sum,mean,difference;

int main(void) {
  int i,j;

  int n[10] = {1,7,5,8,3,5,6,8,2,15};

  for(j = 0; j < 10; j++ ){
    sum = sum + n[j];
  }
 
  mean = sum/10;
  printf("mean = %d\n",mean);

  for(i = 0; i < 10; i++){
    difference = mean - n[i];
    printf("difference = %d\n",difference);
  }

  return 0;
}

3 个答案:

答案 0 :(得分:1)

您需要为差值总和取一个新变量,并像计算平均值一样执行相同的操作。

#include <stdio.h>
#include<math.h>

int sum,mean,difference,sum_difference;

int main(void) {
  int i,j;

  int n[10] = {1,7,5,8,3,5,6,8,2,15};

  for(j = 0; j < 10; j++ ){
    sum = sum + n[j];
  }
 
  mean = sum/10;
  printf("mean = %d\n",mean);
  
  sum_difference = 0;
  for(i = 0; i < 10; i++){
     difference = mean - n[i];
     printf("difference = %d\n",difference);
     if(difference < 0) difference = -difference;  // if difference is considered positive
     sum_difference += difference;
  }
    printf("sum_difference = %d\n",sum_difference);
}

答案 1 :(得分:0)

根据您的描述,这似乎并不难。但是有一些陷阱。 例如,您应该考虑值溢出(决定是 int 还是 long)和数据类型等。 有一些 abs(绝对)函数,我现在不知道如何调用,所以我通过 if 做了绝对。

int sumOfDifference = 0;

for(i = 0; i < 10; i++){
  int localDifference = mean - n[i];

  if (localDifference < 0)
    localDifference = 0 - localDifference;

  sumOfDifference += localDifference;
}

printf("sum of difference = %d\n",sumOfDifference);

答案 2 :(得分:0)

您需要在代码中查看一些要点。

  1. 您真的需要此代码的 math.h 库吗?看到你提的问题,这里好像不需要这个库了。
  2. 您尚未将 sum 变量初始化为任何值(在本例中为 0)。请参阅 here 以详细了解这可能如何为您的代码提供垃圾答案(尽管该语言是 c++,但它对几乎所有编程语言都有效)。
  3. mean 变量不应是整数。你在这里很幸运,因为数组中的所有值加起来是一个可以被 10 整除的数字。假设 sum 的结果是 49,那么您就会遇到麻烦。同样,您还需要将变量 difference 定义为 float

说了这么多,回到你的问题,把所有的差异加起来,在开始时将一个 float 变量(比如 sum_diff)初始化为 0。然后在第二个 for 循环中,将代码修改为如下所示:

for(i = 0; i < 10; i++){
    difference = mean - n[i];
    sum_diff+=difference;
  }

现在只需在循环外打印 sum_diff 即可查看您的答案。