Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Работа с одномерными массивами






Лабораторная работа №11

Цель: познакомиться с понятием массив; изучить способы описания массивов; реализовать задачу по обработке одномерных массивов.

Основные положения

В языке программирования С заложены средства для задания последовательностей упорядоченных данных. Такие последовательности называются массивами.

Массив (матрица, таблица, вектор) – это структура данных, представляющая собой совокупность элементов одного типа.

Массив называется одномерным, если для получения доступа к его элементам достаточно одной индексной переменной.

Общая форма записи одномерного массива:

тип имя_массива[размер];

В приведенной записи элемент тип объявляет базовый тип массива. Количество элементов, которые будут храниться в массиве с именем имя_массива, определяется элементом размер. Если размерность массива меньше, чем требуется, то компилятор не выдаст сообщения об ошибке. Выход за границы массивов должен следить только сам программист.

В языке С индексация массива начинается с нуля. Например, если размер массива определен величиной 9, то в массиве можно хранить 10 элементов с индексацией 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Доступ к отдельному элементу массива осуществляется с помощью индекса. Индекс описывает позицию элемента внутри массива.

Все массивы занимают смежные ячейки памяти, т.е. элементы массива в памяти расположены последовательно друг за другом. Ячейка памяти с наименьшим адресом относится к первому элементу массива, а с наибольшим – к последнему.

Для одномерных массивов общий размер массива в байтах вычисляется по формуле:

всего байт = размер типа в байтах * количество элементов

В языке С нельзя присвоить один массив другому. Для передачи элементов одного массива другому необходимо выполнить присвоение поэлементно.

В языке С массивы при объявлении можно инициализировать.

Общая форма инициализации массива:

тип имя_массива[размер1] * [размерN] = {список_значений};

В список_значений входят констант, разделенных запятыми. Типы констант должны быть совместимыми с типом массива.

Пример инициализации одномерного массива:

int A[5] = {1, 2, 3, 4, 5};

При этом A[0] = 1, A[1] = 2 и т.д.

В языке С возможна инициализация безразмерных массивов. Например, для одномерного массива:

int A[ ] = {1, 2, 3, 4, 5};

Пример 1. Написать программу заполнения одномерного массива случайными числами из интервала от 1 до 15 по случайному равномерному закону.

Программный код решения примера:

#include < stdio.h> #include < conio.h> #include < time.h> #include < stdlib.h> #define Left 1#define Right 15#define N 10 int main (void) {float R, r, min; float A[N]; int i, j, k; unsigned int some; long int L; L = (long) time(NULL); // Системное времяsome = (unsigned) L; // Приведение типовsrand(some); // Задание исходного случайного числа для rand()printf(" \n\t The initial array of random numbers in the interval [%d, %2d]\n", Left, Right); for (i = 0; i < N; ++i){// Случайное число из интервала [0, 1]r = (float) rand()/RAND_MAX; // Формирование случайного числа из заданного интервалаR = Left + (Right - Left) * r; // Заполнение массива случайными числамиA[i] = R; } // Печать элементов исходного массиваfor (i = 0; i < N; ++i)printf(" \n\t %5d) %10.4f", i + 1, A[i]); printf(" \n\n Press any key: "); _getch(); return 0; } Рисунок 1. – результат формирования массива случайным образом

Пример 2. Написать программу поиска максимального элемента в заданном одномерном массиве. Элементы массива являются целыми числами. Программный код решения примера:

#include < stdio.h> #include < conio.h> int main (void){ int i, size, max; int A[ ] = {3, 5, 2, 8, 12, 0, -7, -3, -21}; size = sizeof(A)/sizeof(A[0]); printf(" \n\t The dimention of the array A is equal to: %d\n", size); max = A[0]; // Предполагаемый максимум for (i = 0; i < size; ++i) if (A[i] > max) max = A[i]; printf(" \n\t Maximum array element: %d\n", max); printf(" \n\n Press any key: "); _getch(); return 0; }

В программе использована инициализация безразмерного массива и определения его размерности с помощью функции sizeof().

Результат выполнения программы показан на рисунке 2.

Рисунок 2 – Определение максимального элемента массива

 

Пример 4. В данном одномерном массиве вещественных чисел поменяйте местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах. Предусмотрите четность и нечетность размерности массива.

Для определения четности места в заданном массиве можно использовать операцию деления по модулю, т.е. %.

Программный код решения примера:

#include < stdio.h> #include < conio.h> // Размер массива#define n 7 int main (void) { int i, k; // Пример массиваfloat A[n] = {1.23F, 2.34F, 3.45F, 4.56F, 5.67F, 6.78F, 7.89F}; float B[n]; // Вспомогательный массив // Обнуление массива for (i = 0; i < n; ++i) B[i] = 0; // Распечатка заданного массиваprintf(" \n\t\t The original array of dimention n = %d: \n", n); printf(" \t"); for (i = 0; i < n; ++i) printf(" %6.2f", A[i]); // Распечатка преобразованного массива printf(" \n\n\t\t The reconfigured array: \n"); for (i = 0; i < n; ++i) { k = i % 2; // Для определения четности индекса массиваif (k == 0 & & i < n - 1) B[i] = A[i + 1]; else if (k! = 0 & & i > 0)B[i] = A[i-1]; else if (k == 0 & & i < n)B[i] = A[i]; } printf(" \t"); for (i = 0; i < n; ++i) printf(" %6.2f", B[i]); printf(" \n\n Press any key: "); _getch(); return 0; }

При инициализации массива каждый его элемент снабжен суффиксом F.

Результат выполнения программы показан на рисунке 3.


Рисунок 3 – Смена четных и нечетных мест чисел массива






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.