Подсчитать среднее арифметическое элементов двумерного массива - C (СИ)
Формулировка задачи:
Задание: Подсчитать среднее арифметическое элементов двумерного массива.
Ввод: Из консоли. Подается число n - количество строк и столбцов в массиве, затем элементы массива построчно.
Ограничения: 1?n?100, -1000?Array[n]?1000, время работы программы не более 2 с.
Вывод: Вещественное число с точностью 4 знака, равное среднему арифметическому элементов двумерного массива.
Решение задачи: «Подсчитать среднее арифметическое элементов двумерного массива»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define rand_generation
#ifdef rand_generation
#include <time.h>
#endif
int main() {
int n;
setlocale(LC_ALL, "");
#ifdef rand_generation
srand((unsigned)time(NULL));
#endif
while (1) {
printf("Введите n с отрезка [1;100]: ");
scanf("%i", &n);
if (n > 0 && n <= 100)
break;
else printf("Неверный ввод!!! Попробуйте снова!!!\n");
}
int** Array = (int**)malloc(sizeof(int*)*n);
int i = 0, j;
float middle_ar = 0.0f;
for (; i < n; i++) {
Array[i] = (int*)malloc(sizeof(int)*n);
for (j = 0;j < n;j++) {
#ifndef rand_generation
while (1) {
printf("Введите Array[%i][%i] с отрезка [-1000;1000]: ", i, j);
scanf("%i", &Array[i][j]);
if (Array[i][j] >= -1000 && Array[i][j] <= 1000)
break;
else printf("Неверный ввод!!! Попробуйте снова!!!\n");
}
#elif defined rand_generation
Array[i][j] = rand() % 2001 - 1000;
printf("%i\t", Array[i][j]);
#endif
middle_ar += (float)Array[i][j];
}
printf("\n");
}
printf("\nСреднее арифметическое массива: %.4f", middle_ar / (n*n));
return NULL;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, stdlib.h, locale.h
- Определяется макрос rand_generation, который в дальнейшем будет использоваться для генерации случайных чисел.
- Если макрос rand_generation определен, то включается time.h для инициализации генератора случайных чисел.
- Объявляется переменная n типа int, которая будет использоваться для хранения размера массива.
- Устанавливается локальная настройка для вывода русского языка.
- Если макрос rand_generation определен, то генерируется начальное значение для генератора случайных чисел.
- В цикле while(1) происходит запрос на ввод значения переменной n и проверка корректности введенного значения.
- Если значение n больше 0 и меньше или равно 100, то цикл прерывается и происходит переход к следующему этапу.
- В случае неверного ввода, программа выводит сообщение об ошибке и просит повторить попытку.
- Динамически выделяется память под двумерный массив типа int.
- Инициализируются начальные значения i и j, которые будут использоваться для обхода массива.
- Создается переменная middle_ar типа float, которая будет использоваться для хранения суммы элементов массива.
- В цикле for происходит обход всех элементов массива.
- Для каждого элемента массива динамически выделяется память под одномерный массив типа int.
- В цикле for происходит обход всех элементов второмерного массива.
- Если макрос rand_generation не определен, то происходит запрос на ввод значения элемента массива и проверка корректности введенного значения.
- Если значение элемента массива введено корректно, то происходит добавление этого значения к переменной middle_ar.
- Если макрос rand_generation определен, то происходит вывод значения элемента массива.
- После завершения циклов происходит вывод суммы элементов массива.
- Возвращается NULL.