C: считать положительные / отрицательные числа и 0 в массиве - PullRequest
2 голосов
/ 24 марта 2020

Я пытаюсь написать программу на C для подсчета количества положительных и отрицательных чисел в массиве, а также количества нулей.

Я написал следующий код:

int A[15], pos, neg, nul, i;

[...]

pos = 0;
neg = 0;
nul = 0;

for (i = 0; i <= 15; i++) {
    if (A[i] > 0) {
        pos++;
    }
    if (A[i] < 0) {
        neg++;
    }
    if (A[i] == 0) {
        nul++;
    }
}

Однако, счета всегда неверны. В частности, счет для pos и nul всегда отключен на 1. Массив из 15 положительных чисел и 1 нуля дает pos = 16 и neg = 0, а массив из 15 нулей и 1 положительного числа дает pos = 0 и nul = 16.

Что здесь происходит и что поделать?

Ответы [ 3 ]

3 голосов
/ 25 марта 2020

проблема здесь for (i=0; i<=15; i++). Вы проходите границы вашего массива.

это должно быть for (i=0; i<15; i++)

3 голосов
/ 25 марта 2020

Проблема:

Ваш размер массива 15 , но вы пересекаете его 16 раз из-за:

for (i=0; i<=15; i++)

Значения i: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}:

Всего 16 индексов, где A [15] - неопределенное поведение.

Решение:

Изменить это l oop заголовок к:

for (i = 0; i < 15; i++)

Это обеспечит выполнение l oop 15 раз с индексами входящего массива.

Бонус:

Массив из n элементов обычно просматривается как:

for (i = 0; i < n; ++i)
{
    // process a[i] here
}
1 голос
/ 25 марта 2020

(i = 0; i <= 15; i ++) пройдет границы ваших массивов. </p>

Ваш размер массива равен 15, но, поскольку вы начинаете i с 0, l oop будет работать 16 раз.

Решение заключается в следующем:

(i=0; i<15; i++)
...