Тренировочные задания: Двумерные массивы
Десять задач на двумерные массивы.
Задача 1. Ввод матрицы
Считать n и m, затем n × m чисел в матрицу.
Пример ввода:
2 3
1 2 3
4 5 6
Пример вывода:
Введена матрица 2 x 3
Решение
int n, m;
int a[MAX_SIZE][MAX_SIZE];
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &a[i][j]);
}
}
printf("Введена матрица %d x %d\n", n, m);
Задача 2. Вывод матрицы таблицей
Напечатать матрицу с выравниванием по ширине поля %4d.
Пример ввода:
2 3
1 2 3
4 5 6
Пример вывода:
1 2 3
4 5 6
Решение
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
Задача 3. Сумма всех элементов
Найти сумму всех элементов матрицы.
Пример ввода:
2 3
1 2 3
4 5 6
Пример вывода:
Сумма: 21
Решение
int sum = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
sum += a[i][j];
}
}
printf("Сумма: %d\n", sum);
Задача 4. Произведение всех элементов
Найти произведение всех элементов матрицы.
Пример ввода:
2 2
2 3
4 5
Пример вывода:
Произведение: 120
Решение
long long product = 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
product *= a[i][j];
}
}
printf("Произведение: %lld\n", product);
Задача 5. Минимум и максимум поменять местами
Найти минимальный и максимальный элементы и поменять их местами. Если все элементы равны, обмен не требуется.
Пример ввода:
2 2
1 5
3 4
Пример вывода:
5 1
3 4
Решение
int mi = 0, mj = 0, xi = 0, xj = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (a[i][j] < a[mi][mj]) { mi = i; mj = j; }
if (a[i][j] > a[xi][xj]) { xi = i; xj = j; }
}
}
int tmp = a[mi][mj];
a[mi][mj] = a[xi][xj];
a[xi][xj] = tmp;
Задача 6. Положительные, отрицательные, нулевые
Посчитать, сколько в матрице положительных, отрицательных и нулевых элементов.
Пример ввода:
2 3
1 -2 0
3 -4 0
Пример вывода:
положительных: 2, отрицательных: 2, нулевых: 2
Решение
int pos = 0, neg = 0, zero = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (a[i][j] > 0)
{
pos++;
}
else if (a[i][j] < 0)
{
neg++;
}
else
{
zero++;
}
}
}
printf("положительных: %d, отрицательных: %d, нулевых: %d\n", pos, neg, zero);
Задача 7. Суммы строк
Напечатать сумму элементов каждой строки.
Пример ввода:
2 3
1 2 3
4 5 6
Пример вывода:
строка 1: 6
строка 2: 15
Решение
for (int i = 0; i < n; i++)
{
int sum = 0;
for (int j = 0; j < m; j++)
{
sum += a[i][j];
}
printf("строка %d: %d\n", i + 1, sum);
}
Задача 8. Суммы столбцов
Напечатать сумму элементов каждого столбца.
Пример ввода:
2 3
1 2 3
4 5 6
Пример вывода:
столбец 1: 5
столбец 2: 7
столбец 3: 9
Решение
for (int j = 0; j < m; j++)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += a[i][j];
}
printf("столбец %d: %d\n", j + 1, sum);
}
Задача 9. Сумма главной диагонали
Найти сумму элементов главной диагонали. Матрица квадратная (n × n).
Пример ввода:
3 3
1 2 3
4 5 6
7 8 9
Пример вывода:
Сумма главной диагонали: 15
Решение
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += a[i][i]; /* главная диагональ: i == j */
}
printf("Сумма главной диагонали: %d\n", sum);
Задача 10. Транспонирование
Транспонировать квадратную матрицу на месте (строки становятся столбцами).
Пример ввода:
3 3
1 2 3
4 5 6
7 8 9
Пример вывода:
1 4 7
2 5 8
3 6 9
Решение
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++) /* только выше диагонали */
{
int tmp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = tmp;
}
}