Программирование на языке Си Часть II Матрицы Учитель информатики: Корогод В.А
2 Матрицы Задача: запомнить положение фигур на шахматной доске abcdefgh c6 A[5][2]
3 Матрицы Матрица – это прямоугольная таблица однотипных элементов. Матрица – это массив, в котором каждый элемент имеет два индекса (номер строки и номер столбца) A строка 1 столбец 2 ячейка A[2][3]
4 Матрицы Объявление: const int N = 3, M = 4; int A[N][M]; float a[2][2] = {{3.2, 4.3}, {1.1, 2.2}}; char sym[2][2] = { 'a', 'b', 'c', 'd' }; const int N = 3, M = 4; int A[N][M]; float a[2][2] = {{3.2, 4.3}, {1.1, 2.2}}; char sym[2][2] = { 'a', 'b', 'c', 'd' }; Ввод с клавиатуры: for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) { printf ( "A[%d][%d]=", i, j); scanf ( "%d", &A[i][j] ); } for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) { printf ( "A[%d][%d]=", i, j); scanf ( "%d", &A[i][j] ); } Если переставить циклы? ? A[0][0]=25 A[0][1]=14 A[0][2]=14... A[2][3]=54 i i j j for ( j = 0; j < M; j ++ ) for ( i = 0; i < N; i ++ ) {
5 Матрицы Заполнение случайными числами for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) A[i][j] = random(25)- 10; for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) A[i][j] = random(25)- 10; Какой интервал? ? цикл по строкам цикл по столбцам Вывод на экран for ( i = 0; i < N; i ++ ) { for ( j = 0; j < M; j ++ ) printf("%5d", A[i,j]); printf("\n"); } for ( i = 0; i < N; i ++ ) { for ( j = 0; j < M; j ++ ) printf("%5d", A[i,j]); printf("\n"); } перейти на новую строку for ( j = 0; j < M; j ++ ) printf("%5d", A[i][j]); for ( j = 0; j < M; j ++ ) printf("%5d", A[i][j]); вывод строки Если переставить циклы? ? в той же строке
6 Обработка всех элементов матрицы Задача: заполнить матрицу из 3 строк и 4 столбцов случайными числами и вывести ее на экран. Найти сумму элементов матрицы. main() { const int N = 3, M = 4; int A[N][M], i, j, S = 0;... // заполнение матрицы и вывод на экран for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) S += A[i][j]; printf("Сумма элементов матрицы S=%d", S); } main() { const int N = 3, M = 4; int A[N][M], i, j, S = 0;... // заполнение матрицы и вывод на экран for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) S += A[i][j]; printf("Сумма элементов матрицы S=%d", S); } for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) S += A[i][j]; for ( i = 0; i < N; i ++ ) for ( j = 0; j < M; j ++ ) S += A[i][j];
7 Задания Заполнить матрицу из 8 строк и 5 столбцов случайными числами в интервале [-10,10] и вывести ее на экран. «4»: Найти минимальный и максимальный элементы в матрице и их номера. Формат вывода: Минимальный элемент A[3][4]=-6 Максимальный элемент A[2][2]=10 «5»: Вывести на экран строку, сумма элементов которой максимальна. Формат вывода: Строка 2:
8 Операции с матрицами Задача 1. Вывести на экран главную диагональ квадратной матрицы из N строк и N столбцов. A[0][N-1] A[1][1] A[2][2] A[N-1][N-1] for ( i = 0; i < N; i ++ ) printf ( "%5d", A[i][i] ); for ( i = 0; i < N; i ++ ) printf ( "%5d", A[i][i] ); Задача 2. Вывести на экран вторую диагональ. A[N-1][0] A[N-2][1] A[1][N-2] сумма номеров строки и столбца N-1 A[0][0] for ( i = 0; i < N; i ++) printf ( "%5d", A[i][ N-1-i ]); for ( i = 0; i < N; i ++) printf ( "%5d", A[i][ N-1-i ]); N-1-i
9 Операции с матрицами Задача 3. Найти сумму элементов, стоящих на главной диагонали и ниже ее. Одиночный цикл или вложенный? ? строка 0: A[0][0] строка 1: A[1][0]+A[1][1]... строка i: A[i][0]+A[i][2]+...+A[i][i] S = 0; for ( i = 0; i < N; i ++ ) for ( j = 0; j <= i; j ++ ) S += A[i][j]; S = 0; for ( i = 0; i < N; i ++ ) for ( j = 0; j <= i; j ++ ) S += A[i][j]; цикл по всем строкам for ( j = 0; j <= i; j ++ ) S += A[i][j]; for ( j = 0; j <= i; j ++ ) S += A[i][j]; складываем нужные элементы строки i
10 Операции с матрицами Задача 4. Перестановка строк или столбцов. В матрице из N строк и M столбцов переставить 1-ую и 3-ю строки j A[1][j] A[3][j] for ( j = 0; j <= M; j ++ ) { c = A[1][j]; A[1][j] = A[3][j]; A[3][j] = c; } for ( j = 0; j <= M; j ++ ) { c = A[1][j]; A[1][j] = A[3][j]; A[3][j] = c; } Задача 5. К третьему столбцу добавить шестой. for ( i = 0; i < N; i ++ ) A[i][3] += A[i][6]; for ( i = 0; i < N; i ++ ) A[i][3] += A[i][6];
11 Задания Заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале [-10,10] и вывести ее на экран. Обнулить элементы, отмеченные зеленым фоном, и вывести полученную матрицу на экран. «4»: «5»:
12 1. Дан двумерный массив. Найти сумму элементов каждой строки. 2. Дан двумерный массив. Найти значение максимального элемента каждого столбца. 3. Дана матрица порядка n. Получить произведение ее диагоналей. 4. Дан двумерный массив. Найти значение максимального элемента каждого столбца.