Динамическое заполнение матрицы - C (СИ)
Формулировка задачи:
Есть вот такой код нужно перевести его на Си и чтобы можно было ввести N и M вводились с клавиатуры.
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int N, M;
cout << "Введите количество строк" << endl;
cin >> N;
cout << "Введите количество столбцов" << endl;
cin >> M;
// заполняем массив случаныйми числами
srand(time(NULL));
float matrix[N][M];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
matrix[i][j] = rand() % 100;
cout << matrix[i][j] << " ";
}
cout << endl;
}
//находим индекс минимального значения и максимальное значение в каждой строке
float arrayMAX[N], arrayMIN[N];
int index_j[N];
for (int i = 0; i < N; i++)
{
arrayMAX[i] = matrix[i][0];
arrayMIN[i] = matrix[i][0];
index_j[i] = 0;
for (int j = 0; j < M; j++)
{
if (arrayMAX[i] < matrix[i][j])
arrayMAX[i] = matrix[i][j];
if (arrayMIN[i] > matrix[i][j])
{
arrayMIN[i] = matrix[i][j];
index_j[i] = j;
}
}
}
// заменяем минимальное значение на средние из максимальных значений других строк
float arithmet_mean;
for (int i = 0; i < N; i++)
{
arithmet_mean = 0;
for (int j = 0; j < N; j++)
{
if (i != j)
arithmet_mean += arrayMAX[j];
}
arithmet_mean /= N - 1;
matrix[i][index_j[i]] = arithmet_mean;
}
//выводим результат
cout << endl;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
system("pause");
return 0;
}Решение задачи: «Динамическое заполнение матрицы»
textual
Листинг программы
#include <stdio.h>
#include <time.h>
int main(void)
{
int rows, cols;
int i, j;
printf("Rows: ");
scanf("%d", &rows);
printf("Columns: ");
scanf("%d", &cols);
int *Matrix = malloc(rows*cols * sizeof(int));
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
Matrix[i*cols + j] = rand() % 100;
printf("%3d ", Matrix[i*cols + j]);
}
printf("\n");
}
free(Matrix);
system("pause");
return 0;
}
Объяснение кода листинга программы
В этом коде происходит следующее:
- Объявляются переменные rows и cols типа int, которые будут использоваться для хранения количества строк и столбцов матрицы соответственно.
- В цикле с помощью функции scanf() с клавиатуры считываются значения переменных rows и cols.
- Динамически выделяется память под матрицу с помощью функции malloc(). В качестве аргумента функции передается произведение количества строк на количество столбцов, умноженное на размер памяти, занимаемой одним элементом массива (sizeof(int)).
- В двух вложенных циклах происходит инициализация всех элементов матрицы случайными целыми числами от 0 до 99 с помощью функции rand().
- С помощью цикла внешнего уровня и функции printf() выводится на экран содержимое матрицы.
- Выделяется лишняя память с помощью функции free().
- Запускается функция system(
pause), которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет клавишу. - Программа возвращает 0, что означает успешный конец работы.