Необходимо изменить программу с С# на СИ - 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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
, , - Определяется функция вывода матрицы: void output(int ** a, int n)
- В функции main определяется переменная n типа int, в которую с клавиатуры вводится число.
- Если введенное число меньше 1, программа завершается с ошибкой.
- Задается двумерный массив типа int**, выделяется память под него.
- Если не удалось выделить память под массив, то происходит освобождение памяти и возврат ошибки.
- Выполняется цикл по размеру матрицы, начиная с 1 и до n-1, для заполнения элементов матрицы.
- Выполняется два вложенных цикла, заполняющих все элементы матрицы случайными числами от 1 до 100.
- Выводится на экран матрица.
- Находится минимальное и максимальное значение в матрице.
- Вычисляется среднее арифметическое максимального и минимального значения.
- Выводится на экран максимальное, минимальное и среднее арифметическое значение.
- Выполняется два вложенных цикла, начиная с 1 и до n-1, для вычитания из каждого элемента второго подмассива значения среднего арифметического.
- Выводится на экран обновленная матрица.
- Освобождается память, выделенная под массив.
- Программа возвращает 0, что означает успешное завершение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д