C: Создать случайно сгенерированные целые числа, сохранить их в элементах массива и вывести количество целых чисел, хранящихся в каждом элементе.

Я невероятно новичок в C (и в программировании в целом), и почти невозможно понять, как манипулировать массивами (я знаю, что такое массив).

Я пытаюсь написать программу, которая генерирует 100 случайных целых чисел в диапазоне (1–50), сохраняет их в элементах массива (1–10, 11–20, 21-30, 31-40 и 41-50) и вывести количество сгенерированных случайным образом целых чисел, хранящихся в каждом элементе, т.е.

  • 1-10 = 20
  • 11-20 = 30
  • 21-30 = 21
  • 31-40 = 19
  • 41-50 = 20

Лучшее, что я могу придумать до сих пор, это:

void randomNumbers
{
    int count[ARRAY_LENGTH];

    for (int i = 0; i < ARRAY_LENGTH; i++)
    {
        count[i] = 0;
    }

    for (int i = 0; i < ARRAY_LENGTH; i++)
    {
        count[i] = rand() % 50 + 1;
    }


    for (int i = 0; i <= ARRAY_LENGTH - 1; i++)
    {
        printf("Index %d -> %d\n", i, count[i]);
    }
}

введите здесь описание изображения

Это просто говорит: «элемент 1 = случайное число, элемент 2 = случайное число» и т. д.

Я не понимаю, как:

  • Сохраните случайно сгенерированные целые числа в элементах массива
  • Разделите случайно сгенерированные целые числа на соответствующий элемент
  • Скажите программе вывести количество целых чисел, сгенерированных в каждом диапазоне элементов.

person hailnolly    schedule 10.11.2018    source источник
comment
Вы говорите, что у вас есть 5 ячеек, каждая из которых используется для хранения чисел в своем диапазоне? Я не вижу другого пункта в группировке. В сторону: i <= ARRAY_LENGTH - 1; более идиоматичен (и читабелен), чем i < ARRAY_LENGTH;   -  person Weather Vane    schedule 10.11.2018
comment
Если случайное число r находится в диапазоне [1,50], а затем вы хотите уменьшить значение с помощью выражения, которое дает 0, когда r находится в диапазоне 1..10, и дает 2, когда r находится в диапазоне 11..20 и т. д., то (r - 1) / 10 дает правильный результат. (Например, r == 1; (r - 1) / 10 == 0;r == 10; (r - 1) / 10 == 0;r == 11; (r - 1) / 10 == 1;r == 50; (r - 1) / 10 == 4; — и т. д.)   -  person Jonathan Leffler    schedule 11.11.2018


Ответы (1)


Ниже приведен код, который генерирует 100 случайных целых чисел и группирует их по категориям в зависимости от их значения:

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

int main(void)
{
  int i, temp;
  int a[5]; // array to store the frequency
  for(i=0;i<5;i++)
   a[i]=0;
  srand(time(0));  // for generating new random integers on every run
  for(i=0;i<100;i++)
  {
    temp = (rand()%50) + 1; // generates random integers b/w 1 to 50
    a[(temp-1)/10]++;
  }
  for(i=0;i<5;i++)
    printf("%d->%d  = %d\n",i*10+1,(i+1)*10,a[i]); //printing in the desired format
  return 0;
}
person ask    schedule 10.11.2018
comment
Спасибо за это! Можно ли каким-либо образом адаптировать код, чтобы изменить диапазоны (например, 1-12, 13-20 и т. д.)? - person hailnolly; 11.11.2018