Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_Практ_new1.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
225.79 Кб
Скачать

Лабораторная работа №4 «Двумерные массивы»

Цель: изучение способов определения и инициализации массивов,

основных алгоритмов обработки массивов.

Вывод элементов

Пример

Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A11 и перемещаясь по часовой стрелке, вывести все ее элементы по спирали: первая строка, последний столбец, последняя строка в обратном порядке, первый столбец в обратном порядке, оставшиеся элементы второй строки и т. д.; последним выводится центральный элемент матрицы.

Вариант программы на языке С

#include <stdio.h>

#include <locale.h>

#include <stdlib.h>

#include <time.h>

int main()

{

int n, i, j, k;

int **a;

setlocale(LC_ALL, "");

srand(time(0));

printf("Введите n: ");

scanf("%d", &n);

if(!(n & 1)) // если число чётное, то побитовое "и" с 1 будет равно 1

{ printf("Ошибка: n должно быть нечётным.\n");

return 1;

}

// Выделяем память для массива.

// a - массив указателей. Каждый его элемент указывает на

// массив чисел (т.е. на строку матрицы).

a = (int **) malloc(sizeof(int *) * n);

for(i = 0; i < n; i++)

a[i] = (int *) malloc(sizeof(int) * n);

for(i = 0; i < n; i++)

for(j = 0; j < n; j++)

a[i][j] = rand() % 10;

printf("Матрица:\n");

for(i = 0; i < n; i++)

{

for(j = 0; j < n; j++)

printf(" %d", a[i][j]);

printf("\n");

}

printf("\n");

printf("Результат:\n");

// n/2- количество витков спирали (не считая центрального элемента).

for(k = 0; k < n / 2; k++)

{

for(j = k; j < n - k; j++)

printf("%d ", a[k][j]);

for(i = k + 1; i < n - k; i++)

printf("%d ", a[i][n - k - 1]);

for(j = n - k - 2; j > k; j--)

printf("%d ", a[n - k - 1][j]);

for(i = n - k - 1; i > k; i--)

printf("%d ", a[i][k]);

}

printf("%d", a[n/2][n/2]);

printf("\n");

// Освобождаем память.

// Сначала удаляем массивы, соответствующие строкам.

for(i = 0; i < n; i++)

free(a[i]);

// После - массив указателей на эти строки.

free(a);

return 0;

}

  1. Дана матрица размера MxN. Вывести ее элементы, расположенные в столбцах с нечетными номерами. Вывод элементов производить по столбцам, условный оператор не использовать.

  2. Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A11 и перемещаясь против часовой стрелки, вывести все ее элементы по спирали: первый столбец, последняя строка, последний столбец в обратном порядке, первая строка в обратном порядке, оставшиеся элементы второго столбца и т. д.; последним выводится центральный элемент матрицы.

  3. Дана матрица размера MxN. Вывести ее элементы в следующем порядке: первый столбец сверху вниз, второй столбец снизу вверх, третий столбец сверху вниз, четвертый столбец снизу вверх и т. д.

  4. Дана матрица размера MxN. Вывести ее элементы в следующем порядке: первая строка слева направо, вторая строка справа налево, третья строка слева направо, четвертая строка справа налево и т. д.

  5. Дана квадратная матрица A порядка M. Начиная с элемента A11], вывести ее элементы следующим образом («уголками»): все элементы первой строки; элементы последнего столбца, кроме первого (уже выведенного) элемента; оставшиеся элементы второй строки; оставшиеся элементы предпоследнего столбца и т. д.; последним выводится элемент AM,1.