Найти наибольшее, наименьшее, сумму и среднее значение массива, который останавливается на 0 в C - PullRequest
0 голосов
/ 16 июня 2019

Таким образом, в основном мне нужно найти наибольшее, наименьшее суммарное значение массива с нулевым окончанием.

Я получил среднее значение и сумму для работы, но не нашел наименьшее наименьшее среднее значениеположительные и отрицательные числа.Массив останавливается при вводе 0.

#include <stdio.h>

int main() {
    int c = 0, n, array[100], large, small;
    float sum = 0;
    //for (c = 0; c < n; n++) {
    do {
        c++;
        printf("\nEnter number:");
        scanf("%d", &array[c]);
        sum += array[c];
    } while (array[c] != 0);

    if (array[c] > large) { large = array[c]; }
    if (array[c] < small) { small = array[c]; }
    if (array[c] == 0) {
        printf("\n Sum = %.2f\n", sum);
        printf("\n Average = %.2f", sum / (c - 1));
        printf("\n Largest %d", large);
    }
    return 0;
}

1 Ответ

1 голос
/ 16 июня 2019

В вашем коде есть несколько проблем:

  • индексы массива начинаются с 0 в C, вы не должны увеличивать c до тех пор, пока не сохраните значение.
  • вам на самом деле не нужно хранить значение, просто посчитав их достаточно
  • вы должны инициализировать large и small с первого считанного значения.
  • вы должны проверить возвращаемое значениеscanf() для обнаружения неверного ввода и предотвращения неопределенного поведения

Вот исправленная версия:

#include <stdio.h>

int main() {
    int c, n, large, small;
    double sum = 0;
    for (c = 0;; c++) {
        printf("Enter number: ");
        if (scanf("%d", &n) != 1 || n == 0)
            break;
        sum += n;
        if (c == 0 || n > large) {
            large = n;
        }
        if (c == 0 || n < small) {
            small = n;
        }
    }
    if (c == 0) {
        printf("no numbers\n");
    } else {
        printf("Smallest: %d\n", small);
        printf("Largest: %d\n", large);
        printf("Sum = %f\n", sum);
        printf("Average = %.2f\n", sum / c);
    }
    return 0;
}

Чтобы проиллюстрировать, как приведенный выше код работает без локального массива, вотпромежуточная версия с массивом и коментариями:

#include <stdio.h>

int main() {
    int c, n, i, array[100], large, small;
    double sum;
    for (c = 0; c < 100; c++) {     // loop reading into array, stop at array size
        printf("Enter number: ");
        if (scanf("%d", &n) != 1)   // read a number, stop on failure
            break;
        if (n == 0)                 // stop when reading a 0
            break;
        array[c] = n;
    }
    if (c == 0) {
        printf("no numbers\n");
        return 0;
    }
    // initialize variables from first entry
    sum = array[0];
    large = small = array[0];
    // loop over remaining entries and update variables
    for (i = 1; i < c; i++) {
        sum += array[i];
        if (large < array[i]) {
            large = array[i];
        }
        if (small > array[i]) {
            small = array[i];
        }
    }
    printf("Smallest: %d\n", small);
    printf("Largest: %d\n", large);
    printf("Sum = %f\n", sum);
    printf("Average = %.2f\n", sum / c);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...