Задача с динамическим выделением памяти - C (СИ)
Формулировка задачи:
Написать пользовательскую функцию на языке Си. Массивы А и В динамические, выделение памяти выполнить функциями malloc и calloc, обращение к элементам только через указатель.
Заданы 2 массива А и В. Первым на печать вывести массив, содержащий наибольшее значение. Напечатать также это значение и его порядковый номер.
Решение задачи: «Задача с динамическим выделением памяти»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 4
#define M 7
void Print(int *arr, const int size)
{
int i;
for (i = 0; i < size; i++)
printf("%d ", *(arr + i));
printf("\n");
}
int main(void)
{
int i, *arr = malloc(sizeof(*arr) * (N + M)), *A = arr, *B = arr + N, *pMax = arr;
srand(time(NULL));
for (i = 0; i < N + M; i++)
{
*(arr + i) = rand() % 100;
if (*pMax < *(arr + i))
pMax = arr + i;
}
if (pMax < B)
{
Print(A, N);
Print(B, M);
printf("Max is %d with number %d\n", *pMax, pMax - A + 1);
}
else
{
Print(B, M);
Print(A, N);
printf("Max is %d with number %d\n", *pMax, pMax - B + 1);
}
free(arr);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с памятью и вводом/выводом данных
- Определение констант N и M, которые задают размер массивов A и B соответственно
- Объявление функции Print, которая выводит элементы массива на экран
- Объявление переменной i для использования в цикле
- Выделение памяти под массив arr с помощью функции malloc. Размер массива определяется как сумма размеров массивов A и B
- Разделение выделенной памяти на массивы A и B, а также указатель pMax, который будет отслеживать максимальный элемент
- Инициализация генератора случайных чисел с помощью функции srand и времени
- Заполнение массива arr случайными числами от 0 до 99
- Поиск максимального элемента в массиве arr с помощью указателя pMax
- Если максимальный элемент находится в первой половине массива (до указателя B), то выводится список элементов массива A, затем список элементов массива B и сообщение о том, что максимальное число находится в позиции pMax - A + 1
- Если максимальный элемент находится во второй половине массива (после указателя B), то выводится список элементов массива B, затем список элементов массива A и сообщение о том, что максимальное число находится в позиции pMax - B + 1
- Освобождение памяти, выделенной под массив arr, с помощью функции free
- Возврат значения 0, что означает успешное завершение программы