Тренировочные задания: Массивы в функциях

Задачи на передачу массивов в функции. Вспомните: массив передаётся по адресу — функция работает с тем же массивом, что и 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;
}

Подтверждение

—