Динамическое заполнение матрицы - 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;
}

Объяснение кода листинга программы

В этом коде происходит следующее:

  1. Объявляются переменные rows и cols типа int, которые будут использоваться для хранения количества строк и столбцов матрицы соответственно.
  2. В цикле с помощью функции scanf() с клавиатуры считываются значения переменных rows и cols.
  3. Динамически выделяется память под матрицу с помощью функции malloc(). В качестве аргумента функции передается произведение количества строк на количество столбцов, умноженное на размер памяти, занимаемой одним элементом массива (sizeof(int)).
  4. В двух вложенных циклах происходит инициализация всех элементов матрицы случайными целыми числами от 0 до 99 с помощью функции rand().
  5. С помощью цикла внешнего уровня и функции printf() выводится на экран содержимое матрицы.
  6. Выделяется лишняя память с помощью функции free().
  7. Запускается функция system(pause), которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет клавишу.
  8. Программа возвращает 0, что означает успешный конец работы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы