Заполнение массива случайными числами
ВВЕДЕНИЕ
Лабораторный практикум посвящен языку Си в его базовом варианте. Для исполнения данного цикла пригодна любая операционная среда и любая система программирования Си, так как те свойства языка, которые здесь изучаются, являются ядром языка и присутствуют во всех ее реализациях. Здесь рассматривается работа в операционной системе Windows XP и системе программирования Borland C.
Описание каждой лабораторной работы начинается с разделов «Цель работы», «Краткие теоретические сведения» и «Примеры решения задач». Указанные в разделе «Краткие теоретические сведения» темы обязательно должны быть изучены по материалам лекционного курса и по литературе до начала лабораторной работы, а также должны быть разобраны все решения, приведенные в разделе «Примеры решения задач».
ЛАБОРАТОРНАЯ РАБОТА № 13
ОДНОМЕРНЫЕ МАССИВЫ
Цель работы:получение практических навыков в работе с одномерными массивами.
Краткие теоретические сведения
Массив – это конечная именованная последовательность однотипных величин. Массивы широко используются в том случае, если необходимо обработать много данных, которые пользователь вводит с клавиатуры.
Массив называется одномерным, если он состоит из одной строки и N столбцов (вектор).
Формат описания массива следующий:
тип_элементов имя [размерность];
Размерность – это количество элементов в массиве (целая положительная константа).
Например:
int array[10];
Данная запись означает, что резервируется память для 10 чисел целого типа с именем array и порядковыми номерами (индексами) от 0 до 9 включительно. В Си индексация начинается с нуля,поэтому размер массива, указанный в описании, всегда на единицу больше максимального значения индекса.
Чтобы обратиться к отдельному элементу массива, надо указать имя массива и номер элемента в массиве (индекс) в квадратных скобках. Индекс является целым числом.
array[0] – первый элемент массива, array[9] – последний элемент массива.
Элементы массива обладают всеми атрибутами заданного типа.
Существуют два варианта объявления массива:
§ неинициализированный (например, массив с четырьмя элементами целого типа можно определить как int array[4];);
§ инициализированный. Определяется следующим образом: int array[]={2, 3, 5, 7};
Ввод элементов массива
Ввод элементов одномерного массива с клавиатуры осуществляется следующим образом:
const int n=5; // количество элементов в массиве
float array[n]; // объявление массива
int i; // объявление индекса элементов
for (i=0; i<n; i++)
{ printf(“array[%d]=”, i); // печать подсказки
scanf(“%f”, &array[i]); // считывание с клавиатуры элемента
}
Заполнение массива случайными числами
Пусть требуется заполнить массив равномерно распределенными случайными числами в интервале [a,b]. Поскольку для целых и вещественных чисел способы вычисления случайного числа в заданном интервале отличаются, рассмотрим оба варианта. Здесь и далее предполагается, что в начале программы есть строчка
const int n = 10;
Описание функции-датчика случайных чисел находится в заголовочном файле stdlib.h.
Удобно также добавить в свою программу функцию random:
int random (int N) { return rand() % N; }
которая выдает случайные числа с равномерным распределением в интервале [0,N-1]. Для получения случайных чисел с равномерным распределением в интервале [a,b]надо использовать формулу
k = random ( b – a + 1 ) + a;
Для вещественных чисел формула несколько другая:
x = rand()*(b - a)/RAND_MAX + a;
Здесь константа RAND_MAX– это максимальное случайное число, которое выдает стандартная функция rand.
В приведенном ниже примере массив Aзаполняется случайными целыми числами в интервале [-5,10], а массив X– случайными вещественными числами в том же интервале.
const int n=10;
float x[n];
int i, A[n], a=-5, b=10;;
randomize(); // инициализация генератора случайных чисел
for (i=0; i<n; i++)
A[i]=random(b-a+1)+a; // каждому элементу массива
// присваивает некоторое случайное значение
for (i=0; i<n; i++)
x[i]=(float)rand()*(b-a)/RAND_MAX+a;
Если необходимо, чтобы числа были не только положительными, но и отрицательными, можно записать, например, так:
array[i]=20 – random (100);
Вывод элементов массива
1. Вывод элементов массива в одну строку экрана:
const int n=5;
float array[n];
int i;
for (i=0; i<n; i++)
printf(“%f \t”, array[i]); // \t – табуляция
Для вывода элементов массива в один столбец экрана в функции printf нужно заменить \t на \n – переход на новую строку экрана.
Операция sizeof
С помощью операции sizeof() можно определить размер памяти, которая соответствует идентификатору или типу. Операция sizeof() имеет следующий формат:
sizeof (выражение);
В качестве выражения может быть использован любой идентификатор либо имя типа. Если в качестве выражения указано имя массива, то результатом является размер всего массива (т. е. произведение числа элементов на длину типа).
printf(“%d \n”, sizeof (array));