Скачать презентацию МАССИВЫ в СИ Одномерные и многомерные массивы Скачать презентацию МАССИВЫ в СИ Одномерные и многомерные массивы

M_A_S_S_I_V__2.pptx

  • Количество слайдов: 20

МАССИВЫ в. СИ МАССИВЫ в. СИ

Одномерные и многомерные массивы Массивы – это группа элементов одного типа (double, float, int Одномерные и многомерные массивы Массивы – это группа элементов одного типа (double, float, int и т. д. ). 1) Одномерные массивы. Объявление массива имеет два формата: Константное выражение в квадратных скобках задает количество элементов массива: Массив занимает непрерывную область памяти. Для одномерного массива полный объем занимаемой памяти в байтах вычисляется по формуле: Массив представляет собой набор однотипных данных, расположенных в памяти таким образом, чтобы по индексам элементов можно было легко вычислить адрес соответствующего значения. Например, пусть одномерный массив А состоит из элементов, расположенных в памяти подряд по возрастанию индексов, и каждый элемент занимает по k байт. Тогда адрес i-того элемента вычисляется по формуле:

2) Многомерные массивы. Объявление массива имеет формат: Пример: Объем занимаемой памяти в байтах для 2) Многомерные массивы. Объявление массива имеет формат: Пример: Объем занимаемой памяти в байтах для двухмерного массива вычисляется по формуле : Если речь идет о двумерном массиве В размерности М*N , расположенным в памяти по строкам, то адрес и B[i][j] вычисляется по формуле:

Отсутствие проверки границ массива В языке Си не производится проверки границ массивов: ничто не Отсутствие проверки границ массива В языке Си не производится проверки границ массивов: ничто не остановит Вас при выходе за границы массива. Переполнение массива может привести к присвоению лишних значений другим переменным или включению в текст программы. Вы можете объявить массив размером N и указать индекс элемента, выходящий за пределы N, что не приведет к появлению сообщений об ошибке. Пример: Так как индексы в Си всегда отсчитываются от 0, то в массиве элементы: находятся

Инициализация массивов Инициализация – возможность задать начальные значения элементов массива без программирования соответствующих действий. Инициализация массивов Инициализация – возможность задать начальные значения элементов массива без программирования соответствующих действий. Пример: 1) задание начальных значений всех элементов массива или только нескольких первых элементов: 2) Инициализация многомерного массива:

Задача 1. Подсчитать сумму элементов массива. Задача 1. Подсчитать сумму элементов массива.

Задача 2: Найти первый отрицательный элемент массива. Задача 2: Найти первый отрицательный элемент массива.

Указатели Когда компилятор обрабатывает оператор определения переменной, например, int i = 0, он выделяет Указатели Когда компилятор обрабатывает оператор определения переменной, например, int i = 0, он выделяет память в соответствии с типом int и инициализирует ее указанным значением 10. Все обращения в программе к переменной по её имени i заменяются компилятором на адрес памяти, в которой хранится значение переменной. Программист может определить собственные переменные для хранения адресов областей памяти. Такие переменные называются указателями. Указатель - это адрес памяти, распределенной для размещения идентификатора (в качестве идентификатора может выступать имя переменной, массива, структуры, строкового литерала). Три вида указателей: 1) Указатели на объект. 2) Указатели на функцию. 3) Указатели на void.

1) Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа 1) Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного или составного). Форма записи: 2) Указатель на функцию содержит адрес в сегменте кода, по которому располагается исполняемый код функции, то есть адрес, по которому передается управление при вызове функции. Форма записи: Например: объявление задает указатель с именем fun на функцию, возвращающую значение типа int и имеющую два аргумента типа double. 3) Указатель на void применяется в тех случаях, когда конкретный тип объекта, адрес которого требуется хранить, не определен (например, если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов различных типов). Примеры:

Связь указателей и массивов В языке СИ между указателями и массивами существует тесная связь. Связь указателей и массивов В языке СИ между указателями и массивами существует тесная связь. например, когда объявляется массив в виде int array[25], то при этом выделяется память не только для двадцати пяти элементов массива, но и для указателя с именем array, значение которого становится равным адресу первого по счету (нулевого) элемента массива. Таким образом, сам массив остается безымянным, а доступ к элементам массива осуществляется через указатель с именем array. С точки зрения синтаксиса языка указатель array является константой, значение которой можно использовать в выражениях, но изменить это значение нельзя. Пример: Здесь указатель p устанавливается на адрес первого элемента масcива, причем операцию присваивания p=array можно записать в эквивалентной форме p=&array[0].

Для доступа к элементам массива существует два различных способа: 1. Использование индексных выражений в Для доступа к элементам массива существует два различных способа: 1. Использование индексных выражений в квадратных скобках, например, array[16]=3 или array[2]=7. Записи array[16] и 16[array] будут эквивалентными обозначают семнадцатый элемент массива. 2. Использование адресных выражений и операции разадресации, например *(p+15)=3 или *(p+1)=7. При таком способе доступа адресное выражение, равное адресу шестнадцатого элемента массива тоже может быть записано разными способами *(p+15) или *(15+p). Операции с указателями Над указателями можно выполнять унарные операции: инкремент (++) и декремент (--). При выполнении данных операций значение указателя увеличивается или уменьшается на длину типа, на который ссылается используемый указатель. Пример:

Динамическое размещение массивов При динамическом распределении памяти для массивов следует описать соответствующий указатель, которому Динамическое размещение массивов При динамическом распределении памяти для массивов следует описать соответствующий указатель, которому будет присвоено значение адреса начала области выделенной памяти. Адрес формируется как возвращаемое значение при обращении к функции calloc или malloc. Одномерный массив a[10] из элементов типа float можно создать следующим образом : Для создания двухмерного массива вначале нужно распределить память для массива указателей на одномерные массивы, а затем распределять память для одномерных массивов. Пусть, например, требуется создать массив a[n][m]. Это можно сделать следующим образом:

Следует только помнить, что в дальнейшем ненужную для выполнения программы память следует освобождать при Следует только помнить, что в дальнейшем ненужную для выполнения программы память следует освобождать при помощи функции free.

Генератор случайных чисел randomize • Функция randomize инициализирует генератор случайных чисел. • Прототип данной Генератор случайных чисел randomize • Функция randomize инициализирует генератор случайных чисел. • Прототип данной функции содержится в файле stdlib. h. • Так как randomize это макро-функция, то рекомендуется при использовании этой функции также включить файл time. h.

Формы записи: 1) rand()%100 – случайные числа от 0 до 99 2) 1 + Формы записи: 1) rand()%100 – случайные числа от 0 до 99 2) 1 + rand()%100 – случайные числа от 1 до 100 3) 200 - rand()%400 – случайные числа от -199 до 200 Задача 3: Вывести 10 случайных целых чисел от 0 до 99

Обработка массивов Задача 4. Заполнить матрицу случайными числами в диапазоне от 0 до 99. Обработка массивов Задача 4. Заполнить матрицу случайными числами в диапазоне от 0 до 99. Найти в полученной матрице максимальное значение.

Задача 4. Написать программу, которая выводит минимальный элемент введенного с клавиатуры массива целых чисел. Задача 4. Написать программу, которая выводит минимальный элемент введенного с клавиатуры массива целых чисел. Для доступа к элементам массива используйте указатель.

Задача 3. Написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет Задача 3. Написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов столбца.

Задача 4. Написать программу, которая методом прямого выбора сортирует по убыванию введенный с клавиатуры Задача 4. Написать программу, которая методом прямого выбора сортирует по убыванию введенный с клавиатуры одномерный массив.