Тренировочные задания: Массивы в функциях
Задачи на передачу массивов в функции. Вспомните: массив передаётся по адресу — функция
работает с тем же массивом, что и main. Каждую задачу оформляйте отдельной функцией.
Часть 1. Одномерные массивы
Задача 1. Ввод массива
Функция читает n чисел в массив.
Пример ввода:
5
1 2 3 4 5
Пример вывода:
Массив введён
Решение
void input_array(int a[], int n)
{
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
}
Задача 2. Вывод массива
Функция печатает элементы массива через пробел.
Пример ввода:
5
1 2 3 4 5
Пример вывода:
1 2 3 4 5
Решение
void print_array(int a[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
Задача 3. Сумма элементов
Верните сумму элементов массива.
Пример ввода:
5
1 2 3 4 5
Пример вывода:
15
Решение
int sum_array(int a[], int n)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += a[i];
}
return sum;
}
Задача 4. Максимум
Найдите максимальный элемент массива.
Пример ввода:
5
3 9 2 7 4
Пример вывода:
9
Решение
int max_array(int a[], int n)
{
int max = a[0];
for (int i = 1; i < n; i++)
{
if (a[i] > max)
{
max = a[i];
}
}
return max;
}
Задача 5. Количество отрицательных
Посчитайте, сколько в массиве отрицательных чисел.
Пример ввода:
6
-1 5 -3 0 -7 2
Пример вывода:
3
Решение
int count_negative(int a[], int n)
{
int count = 0;
for (int i = 0; i < n; i++)
{
if (a[i] < 0)
{
count++;
}
}
return count;
}
Задача 6. Развернуть массив
Разверните массив на месте. Функция ничего не возвращает — изменения остаются в массиве.
Пример ввода:
5
1 2 3 4 5
Пример вывода:
5 4 3 2 1
Решение
void reverse_array(int a[], int n)
{
for (int i = 0; i < n / 2; i++)
{
int tmp = a[i];
a[i] = a[n - 1 - i];
a[n - 1 - i] = tmp;
}
}
Задача 7. Заполнить значением
Заполните весь массив одним и тем же значением.
Пример ввода:
5 7
Пример вывода:
7 7 7 7 7
Решение
void fill_array(int a[], int n, int value)
{
for (int i = 0; i < n; i++)
{
a[i] = value;
}
}
Задача 8. Среднее арифметическое
Верните среднее арифметическое элементов массива. Обратите внимание на приведение типа.
Пример ввода:
4
2 4 5 5
Пример вывода:
4.00
Решение
double average_array(int a[], int n)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += a[i];
}
return (double)sum / n;
}
Часть 2. Двумерные массивы
Задача 9. Ввод матрицы
Функция читает n × m чисел в матрицу.
Пример ввода:
2 3
1 2 3
4 5 6
Пример вывода:
Матрица введена
Решение
void input_matrix(int a[MAX_SIZE][MAX_SIZE], int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &a[i][j]);
}
}
}
Задача 10. Вывод матрицы таблицей
Функция печатает матрицу с выравниванием.
Пример ввода:
2 3
1 2 3
4 5 6
Пример вывода:
1 2 3
4 5 6
Решение
void print_matrix(int a[MAX_SIZE][MAX_SIZE], int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
}
Задача 11. Сумма всех элементов
Верните сумму всех элементов матрицы.
Пример ввода:
2 3
1 2 3
4 5 6
Пример вывода:
21
Решение
int sum_all(int a[MAX_SIZE][MAX_SIZE], int n, int m)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
sum += a[i][j];
}
}
return sum;
}
Задача 12. Обмен строк
Поменять местами две строки. Функция типа void — изменения видны в main.
Пример ввода:
3 3
1 2 3
4 5 6
7 8 9
0 2
Пример вывода:
7 8 9
4 5 6
1 2 3
Решение
void swap_rows(int a[MAX_SIZE][MAX_SIZE], int m, int r1, int r2)
{
for (int j = 0; j < m; j++)
{
int tmp = a[r1][j];
a[r1][j] = a[r2][j];
a[r2][j] = tmp;
}
}
Задача 13. Сумма главной диагонали
Верните сумму элементов главной диагонали. Матрица квадратная.
Пример ввода:
3 3
1 2 3
4 5 6
7 8 9
Пример вывода:
15
Решение
int main_diag_sum(int a[MAX_SIZE][MAX_SIZE], int n)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += a[i][i];
}
return sum;
}
Задача 14. Транспонирование
Транспонировать квадратную матрицу на месте. Функция типа void.
Пример ввода:
3 3
1 2 3
4 5 6
7 8 9
Пример вывода:
1 4 7
2 5 8
3 6 9
Решение
void transpose(int a[MAX_SIZE][MAX_SIZE], int n)
{
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;
}
}
}
Часть 3. Трёхмерные массивы
Задача 15. Ввод трёхмерного массива
Функция читает l × r × c чисел.
Пример ввода:
2 2 2
1 2 3 4
5 6 7 8
Пример вывода:
Массив введён
Решение
void input_cube(int a[MAX_SIZE][MAX_SIZE][MAX_SIZE], int l, int r, int c)
{
for (int k = 0; k < l; k++)
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
scanf("%d", &a[k][i][j]);
}
}
}
}
Задача 16. Вывод по слоям
Функция печатает массив послойно.
Пример ввода:
2 2 2
1 2 3 4
5 6 7 8
Пример вывода:
Слой 1:
1 2
3 4
Слой 2:
5 6
7 8
Решение
void print_cube(int a[MAX_SIZE][MAX_SIZE][MAX_SIZE], int l, int r, int c)
{
for (int k = 0; k < l; k++)
{
printf("Слой %d:\n", k + 1);
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
printf("%4d", a[k][i][j]);
}
printf("\n");
}
printf("\n");
}
}
Задача 17. Сумма всех элементов
Верните сумму всех элементов трёхмерного массива.
Пример ввода:
2 2 2
1 2 3 4
5 6 7 8
Пример вывода:
36
Решение
int sum_cube(int a[MAX_SIZE][MAX_SIZE][MAX_SIZE], int l, int r, int c)
{
int sum = 0;
for (int k = 0; k < l; k++)
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
sum += a[k][i][j];
}
}
}
return sum;
}
Задача 18. Поиск значения
Проверьте, встречается ли в массиве заданное число. Функция возвращает 1 или 0.
Пример ввода:
2 2 2
1 2 3 4
5 6 7 8
6
Пример вывода:
1
Решение
int contains_value(int a[MAX_SIZE][MAX_SIZE][MAX_SIZE], int l, int r, int c, int value)
{
for (int k = 0; k < l; k++)
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
if (a[k][i][j] == value)
{
return 1;
}
}
}
}
return 0;
}