Причина проста.
a[i]
находится между 1 и 10 и, следовательно, когда вы пишете:
++frequency[a[i]+1];
Вы заполняете индексы от 2 до 11 из frequency
. Однако frequency
имеет только индексы от 0 до 10. Поэтому вы перебираете массив frequency
и в массив a
и записываете a[0]
. Это случается, когда a[i]
равно 10. Поскольку при 100 числах есть 10% -ный шанс, что вы получите 10, вы увеличиваете a[0]
(увеличивая frequency[11]
) примерно в 10 раз. Поскольку первое значение также было в диапазоне от 1 до 10, конечное значение составляет от 10 до 20.
Редактировать: По той же причине, по которой вы индексируете a
от 0 до SIZE-1
, вы также должны индексировать frequency
от 0 до 10. Что вы делаете, это создаете индексы от 1 до 10, и также +1 их! Например это здесь:
for(i=1;i<=10;i++)
printf("%5d%10d\n",i,frequency[i+1]);
должно быть
for(i=0;i<10;i++)
printf("%5d%10d\n",i,frequency[i]);
Обратите внимание, что начиная с 0, не до 10, и индексируя frequency
на i
вместо i+1
В качестве альтернативы, вы могли бы иметь
for(i=1;i<=10;i++)
printf("%5d%10d\n",i,frequency[i-1]);
, который индексирует frequency
на i-1
, чтобы сделать индекс правильным.