Необходимо изменить программу с С# на СИ - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Необходимо изменить с С# на Си
class Program
    {
        static void output(int[,] m)
        {
            for (int i = 0; i < m.GetLength(0); i++) {
                for (int j = 0; j < m.GetLength(1); j++)
                    Console.Write(m[i,j]+"\t");
                Console.WriteLine();
            }      
        }
        static void Main()
        {
            Random rand = new Random();
            Console.Write("N = ");  int n = int.Parse(Console.ReadLine());
            int[,] m = new int[n, n];
            for (int i = 0; i < n; i++)
                for (int j = 0; j < n; j++)
                    m[i, j] = rand.Next(1, 100);
            output(m); int min = m[1, 0]; int max = m[1, 0];
            for (int i = 1; i < n; i++)
                for (int j = 0; j < i; j++)
                    if (m[i, j] > max) max = m[i, j];
                    else if (m[i, j] < min) min = m[i, j];
            double ave = (double)(max + min) / 2;
            Console.WriteLine(String.Format("Максимум: {0}; Минимум: {1}; Среднее арифметическое: {2}", max, min, ave));
            for (int i = 0; i < n; i++)
                m[i, n - i - 1] -= (int)ave;
            output(m);
            Console.ReadLine();
        }
    }

Решение задачи: «Необходимо изменить программу с С# на СИ»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void output(int ** a, int n)
{
    int i, j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
            printf("%d\t", a[i][j]);
        printf("\n");
    }
}
 
int main (void)
{
    srand(time(NULL));
 
    int n;
    printf("N = ");
    scanf("%i", &n);
    if (n < 1) return -1;
 
    int **m;
    if ((m = (int**) malloc(n * sizeof(int*))) == NULL) return -1;
    if ((m[0] = (int*) malloc(n * n * sizeof(int))) == NULL)
    {
        free(m);
        return -1;
    }
    size_t x;
    for (x=1; x<n; x++)
        m[x] = m[x-1] + n;
 
    int i, j;
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            m[i][j] = 1 + rand() %100;
    output(m, n);
 
    int min = m[1][0], max = m[1][0];
    for (i=1; i<n; i++)
        for (j=0; j<i; j++)
            if (m[i][j] > max) max = m[i][j];
            else if (m[i][j] < min) min = m[i][j];
    double ave = (double)(max + min) / 2.0;
 
    printf("Максимум: %d; Минимум: %d; Среднее арифметическое: %lf\n", max, min, ave);
 
    for (i=0; i<n; i++)
        m[i][n - i - 1] -= (int)ave;
    output(m, n);
 
    free(m[0]);
    free(m);
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы: , ,
  2. Определяется функция вывода матрицы: void output(int ** a, int n)
  3. В функции main определяется переменная n типа int, в которую с клавиатуры вводится число.
  4. Если введенное число меньше 1, программа завершается с ошибкой.
  5. Задается двумерный массив типа int**, выделяется память под него.
  6. Если не удалось выделить память под массив, то происходит освобождение памяти и возврат ошибки.
  7. Выполняется цикл по размеру матрицы, начиная с 1 и до n-1, для заполнения элементов матрицы.
  8. Выполняется два вложенных цикла, заполняющих все элементы матрицы случайными числами от 1 до 100.
  9. Выводится на экран матрица.
  10. Находится минимальное и максимальное значение в матрице.
  11. Вычисляется среднее арифметическое максимального и минимального значения.
  12. Выводится на экран максимальное, минимальное и среднее арифметическое значение.
  13. Выполняется два вложенных цикла, начиная с 1 и до n-1, для вычитания из каждого элемента второго подмассива значения среднего арифметического.
  14. Выводится на экран обновленная матрица.
  15. Освобождается память, выделенная под массив.
  16. Программа возвращает 0, что означает успешное завершение.

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


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

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

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