Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на С.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Задание для практической работы:

1. Напишите функцию, которая сортирует массив методом пузырька и выводит отсортированный массив на экран. В этом варианте программы, сделайте так, чтобы изменения не коснулись исходного массива.

2. Напишите функцию, которая ищет максимальный элемент в массиве.

3. Напишите функцию, которая принимает два массива одинаковой длинны и поэлементно перемножает их. Результат работы она записывает в элементы первого массива. Т.е. буквально она должна вернуть результат свой работы в первом массиве.

В программе, НЕ В ФУНКЦИИ, выведите результат на экран.

Если мы передаем массивы

[2,5,6]

[1,4,2]

то в результате своей работы, программа должна вывести

2 20 12

Занятие 19. Двумерные массивы.

Сегодня затронем новую тему. Двумерные массивы. Или их еще называют матрицы.

Что такое двумерный массив?

Двумерный массив — это прямоугольная таблица с определенным количеством строк и столбиков. Каждая строка и каждый столбик имеют свой порядковый номер. На рисунке изображен двумерный массив, который имеет 6 строк и 7 столбцов.

Рис.1. Двумерный массив. Общий вид.

Обратите внимание, что столбцы и строки нумеруются, начиная с нуля, как и в одномерных массивах.

Сразу же покажу, как объявить двумерный массив. В сущности, ничего нового. Синтаксис прост и очень похож на объявление обычного массива и любой другой переменной. Сначала указываем тип данных, затем имя массива, а после в квадратных скобках его размерность, то есть количество строк и количество столбиков. На рисунке ниже мы объявили двумерный массив размерностью 6 на 7.

Рис.2 Двумерный массив, объявление.

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

Кстати, нельзя путать местами строки и столбики. Сначала записывается количество строк, потом количество столбиков.

Следующий естественный вопрос:

Как работать с двумерным массивом?

Как и другие переменные, двумерные массивы мы можем инициализировать при их объявлении. Для этого нам нужно указать все элементы массива. Делается это следующим образом.

Листинг 19.1

int arr [2][4] = {{1,2,4,29},{3,4,6,1}};

Записанный выше код создает массив с двумя строчками и четырьмя столбцами, и присваивает каждому элементу определенные значения. Получится вот такой массив.

Рис.3. Двумерный массив инициализированный при объявлении

Кроме того, мы можем задать только некоторые элементы массива, тогда остальные будут заполнены нулями. Например:

Листинг 19.2

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

При таком объявлении мы получим массив, который изображен на следующем рисунке.

Рис.4. Двумерный массив, инициализированный не полностью.

Понятно, что если у нас будет большой массив, то мы замучаемся так все записывать. Да и редко такое бывает нужно.

Как работать с отдельным элементом массива.

Понятно, что любой элемент задается номер строки и столбца, на пересечении которых он расположен. Посмотрите на следующий рисунок. На нем мы выбрали элемент, который находится во второй строке и третьем столбике (в естественной нумерации).

Рис.5. Обращение к элементу двумерного массива.

Обращение к конкретному элементу происходит так же, как и в одномерном массиве. Сначала пишут имя массива, а затем, в квадратных скобках номер строки и номер столбика. Опять напоминаю, сначала идет номер строки, а потом номер столбика. Не путайте это. А так же, помните, что нумерация идет не с единицы, а с нуля. Это очень частая ошибка, всегда следите за этим.

Помните, когда мы хотели пройтись по всему одномерному массиву, мы использовали цикл for, который изменял наш индекс. Так как в двумерном массиве у нас два индекса ( один для строки и один для столбца), то для того, чтобы пройтись по всему массиву нам потребуется два вложенных цикла for. Разберите следующий пример.

Листинг 19.3

#include <stdio.h>

int main (){

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

for (int i=0; i<2; i++){ // 1 цикл

for (int j=0; j<4; j++) // 2 цикл

printf("%d\t",arr[i][j]);

printf("\n");

}

return 0;

}

Данная программа, выводит последовательно все элементы массива. Результат её работы, представлен на следующем рисунке.

Рис.6. Двумерный массив. Поэлементный вывод на экран.

Как работает вложенный цикл, вам уже должно быть понятно.

Сначала переменной i присваивается значение нуль, проверяется условие 0<2, и так как оно выполняется, программа начинает выполнять тело первого цикла. В теле первого цикла программа опять попадает в цикл, теперь уже второй. Переменной j присваивается значение 0 и проверяется условие 0<4. Оно истинно, поэтому выполняется тело второго цикла. Оно состоит из одной инструкции вывода на экран элемента arr[i][j]. Так как на данном шаге у нас i=0 j=0, то выводится значение элемент из нулевой строки и нулевого столбика. В нашем примере это элемент число 1. Тело второго цикла закончилось, происходит увеличение j на единицу j=1.

Проверка условия 1<4. Выполнение тела второго цикла: вывод на экран элемента arr[0][1] в нашем случае это 2. И так далее …

Используя вложенные циклы, мы можем и заполнять двумерные массивы.