Ввод и вывод двумерного массива в процедуре - C (СИ)
Формулировка задачи:
Не понимаю как написать процедуру для ввода и вывода двумерного массива вещественных чисел и как эту процедуру потом можно будет вызвать в main, и возможно ли это? Помогите.
for ( i = 0; i <= 2; i++ )
{
for ( j = 0; j <= 3; j++ )
{
scanf ("%f", &Matrix[i][j]);
}
}Решение задачи: «Ввод и вывод двумерного массива в процедуре»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
float **matrixFill(unsigned rowsCount, unsigned colsCount);
void matrixPrint(float **matrix, unsigned rowsCount, unsigned colsCount);
int main(void)
{
unsigned rowsCount;
printf("N: ");
scanf("%d", &rowsCount);
unsigned colsCount;
printf("M: ");
scanf("%d", &colsCount);
float **matrix = matrixFill(rowsCount, colsCount);
matrixPrint(matrix, rowsCount, colsCount);
free(matrix);
return 0;
}
float **matrixFill(unsigned rowsCount, unsigned colsCount)
{
unsigned i, j;
float **matrix = (float **) malloc (rowsCount * sizeof(float *));
for (i = 0; i < rowsCount; i++) {
*(matrix + i) = malloc (colsCount * sizeof(float));
for (j = 0; j < colsCount; j++) {
printf("Matrix [%d][%d]: ", i, j);
scanf("%f", &(*(*(matrix + i) + j)));
}
}
return matrix;
}
void matrixPrint(float **matrix, unsigned rowsCount, unsigned colsCount)
{
unsigned i, j;
printf("Matrix: \n");
for (i = 0; i < rowsCount; i++) {
for (j = 0; j < colsCount; j++) {
printf("%5.1f", *(*(matrix + i) + j));
}
printf("\n");
}
}
Объяснение кода листинга программы
- Программа начинается с заголовка, в котором подключаются необходимые библиотеки: stdlib.h и printf.h
- Затем определяются две функции: matrixFill и matrixPrint.
- В функции main происходит ввод количества строк и столбцов двумерного массива с помощью scanf.
- Далее, создается двумерный массив с помощью функции matrixFill и выводится на экран с помощью функции matrixPrint.
- После использования, двумерный массив освобождается с помощью функции free.
- Программа завершается возвратом 0 в функции main.
- Функция matrixFill создает двумерный массив, заполняет его значениями, введенными пользователем, и возвращает его.
- В цикле происходит выделение памяти под каждую строку массива.
- Затем, в цикле происходит заполнение значений каждой ячейки массива с помощью scanf.
- Функция matrixPrint выводит значения двумерного массива на экран.
- В цикле происходит обход всех ячеек массива и вывод их значений с помощью printf.
- Значения разделены пробелом для лучшей читаемости.