数组的统计信息

我需要一个程序来评估任意数量整数的Min,Max,Avg和Geometric avg。到目前为止,这是我想出的。在我添加平均值之前,Min和Max都工作正常。现在Min和Avg工作正常,但是Max给出了错误的数字(通常是第二大数字)。几何平均数也只有0.00000。谢谢你的帮助。

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

int main(int argc,char const *argv[]) {

  int arr[100],max,i,min,size,lok = 1;
  float arit = 0,geom = 0,sum = 0,prod = 0;
    printf("\nSay how many integers you want to input: ");
    scanf("%d",&size);

    printf("\nType %d integers: ",size);

      for (i = 0; i < size; i++) //put values in arr
        scanf("%d",&arr[i]);
            max = arr[0];
            min = arr[0];
      for (i = 1; i < size; i++) { //calc maximum
        if (arr[i]>max) {
            max = arr[i];
            lok = i+1;
          }


        if (arr[i]<min) { //calc minimum
            min = arr[i];
            lok = i+1;
          }



      for (i = 0; i < size; i++) { //calc avg
            sum = sum + arr[i];
        }
            arit = sum/size;

      for (i = 0; i < size; i++) {
        prod = prod * arr[i];
      }
        geom = pow(prod,1./size);
      }


      printf("\n%d is maximum",max);
      printf("\n%d is minimum",min);
      printf("\n%f is avg",arit);
      printf("\n%f is geometric avg",geom);




  return 0;
}
haobeiju 回答:数组的统计信息

这将解决您使用Min和Max的问题​​,我想也将解决几何均值(检查它)这是关闭句子的问题

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

int main(int argc,char const *argv[]) {

  int arr[100],max,i,min,size,lok = 1;
  float arit = 0,geom = 0,sum = 0,prod = 1;
  printf("\nSay how many integers you want to input: ");
  scanf("%d",&size);

  printf("\nType %d integers: ",size);

  for (i = 0; i < size; i++) //put values in arr
    scanf("%d",&arr[i]);
  max = arr[0];
  min = arr[0];
  for (i = 1; i < size; i++) { //calc maximum
    if (arr[i]>max) {
      max = arr[i];
      lok = i+1;
    }

    if (arr[i]<min) { //calc minimum
      min = arr[i];
      lok = i+1;
    }
  }
  for (i = 0; i < size; i++) { //calc avg
    sum = sum + arr[i];
  }
  arit = sum/size;

  for (i = 0; i < size; i++) {
    prod = prod * arr[i];
  }
  geom = pow(prod,1./size);

  printf("\n%d is maximum",max);
  printf("\n%d is minimum",min);
  printf("\n%f is avg",arit);
  printf("\n%f is geometric avg",geom);

  return 0;
}

关于Geometric意味着您正在这样做。

float arit = 0,prod = 0;

然后

  for (i = 0; i < size; i++) {
    prod = prod * arr[i];
  }

总之会返回0,因为您将prod初始化为0

,

两个主要问题是

  • 放错位置的}大括号

  • prod = 0

  • 的错误初始化

我也做了一些其他更改:

  • 检查输入的有效性

  • 使用double代替float(除非有充分的理由不这样做)。

  • 删除未使用的lok

  • 所有统计信息仅需要一个循环

  • 按惯例移动了\n换行符的位置。

这是修改后的代码:

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

int main(int argc,char const *argv[]) {

    int arr[100],size;
    double arit = 0,prod = 1;   // init prod to 1

    printf("\nSay how many integers you want to input: ");
    if(scanf("%d",&size) != 1 || size < 1 || size > 100) {
        exit(1);                                    // or other action
    }

    printf("\nType %d integers:\n",size);          // added newline
    for (i = 0; i < size; i++) {
        if(scanf("%d",&arr[i]) != 1) {
            exit(1);                                // or other action
        }
    }

    max = arr[0];
    min = arr[0];

    for (i = 0; i < size; i++) {                    // just one loop
        if (arr[i] > max) {
            max = arr[i];
        }
        if (arr[i] < min) {
            min = arr[i];
        }
        sum = sum + arr[i];
        prod = prod * arr[i];
    }

    arit = sum / size;
    geom = pow(prod,1.0 / size);

    printf("%d is maximum\n",max);                 // reposition newlines
    printf("%d is minimum\n",min);
    printf("%f is avg\n",arit);
    printf("%f is geometric avg\n",geom);
    return 0;
}
本文链接:https://www.f2er.com/3160098.html

大家都在问