Из нескольких массивов сформировать матрицу - C (СИ)
Формулировка задачи:
Задание: Даны два динамических одномерных массива X и Y размера N. Сформировать динамическую матрицу Z размера N*3, в которой первый столбец образуют элементы массива X, второй столбец-элементы массива Y, а третий столбец заполнен средними арифметическими значениями соответствующих пар элементов из X и Y
вот что у меня получилось. компилятор выводит только первые 19 строк, а потом закрывается
наведите пожалуйста на мысль в чем может быть причина
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int main()
{
int n;
float **Z, *X, *Y;
printf("Enter n=");
scanf_s("%d", &n,1);
X = (float*)malloc(n * sizeof(float));
if (!X)
return 1;
Y = (float*)malloc(n * sizeof(float));
if (!Y)
return 1;
for (int i = 0; i < n; i++)
{
*(X + i) = rand() % 200;
*(Y + i) = rand() % 200;
}
printf("\n");
Z = (float**)malloc(n*sizeof(float*));
for (int i = 0; i<3; i++)
Z[i] = (float*)malloc(3 * sizeof(float));
if (!Z)
{
printf("ERROR\n");
return 1;
}
printf("\nArray:\n");
for (int j = 0; j < n; j++)
{
for (int i = 0; i<3; i++)
{
if (i == 0)
Z[i][j] = X[j];
if (i == 1)
Z[i][j] = Y[j];
if (i == 2)
Z[i][j] = (Y[j] + X[j]) / 2;
printf("%7.1f", Z[i][j]);
}
printf("\n");
}
for (int i = 0; i < 3; i++)
free(Z[i]);
free(Z); free(Y); free(X);
return 0;
}Решение задачи: «Из нескольких массивов сформировать матрицу»
textual
Листинг программы
Z[i] = (float*)malloc(3 *n* sizeof(float));
Объяснение кода листинга программы
В данном коде происходит выделение памяти под массив (матрицу) Z с помощью функции malloc. Алгоритм действий следующий:
- Выполняется операция выделения памяти под массив Z с помощью функции malloc. В качестве аргумента функции передается размер памяти, который вычисляется как произведение трех (3) на значение переменной n. Значение переменной n передается в функцию malloc без изменений, так как она ожидает его в таком виде.
- Результат операции присваивается переменной Z. Значение переменной Z будет являться адресом начала выделенной памяти. Пример кода:
- Z[i] = (float)malloc(3 n* sizeof(float)); В данном коде переменная Z используется как индекс для доступа к элементам массива. Значение переменной i используется как индекс для доступа к элементам массива Z. Значение переменной n определяет размер массива, который будет выделен для каждого элемента массива Z.