Статистика массива - PullRequest
       28

Статистика массива

1 голос
/ 05 ноября 2019

Мне нужна программа для оценки Min, Max, Avg и Geometric avg любого числа целых чисел. Это то, что я придумал до сих пор. Мин и Макс работали очень хорошо, пока я не добавил Avg. Сейчас Min и Avg работают правильно, но Макс дает неправильное число (обычно второе наибольшее число). Также геометрическое среднее дает только 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;
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Двумя основными проблемами были

  • неуместное закрытие } скобка

  • неверная инициализация 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], max, i, min, size;
    double arit = 0, geom = 0, sum = 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;
}
0 голосов
/ 05 ноября 2019

Это исправит вашу проблему с Мин и Максом, и, я думаю, также исправит среднее геометрическое (отметьте его). Это была проблема закрытия предложений

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

О геометрическом среднем вы делаете это.

float arit = 0, geom = 0, sum = 0, prod = 0;

, а затем

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

Это всегда вернет 0, потому что вы инициализируете prod на 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...