Найти в каждой строке матрицы, если там есть отрицательный элемент, ср. арифметическое всех элементов, исключая нулевые - C (СИ)
Формулировка задачи:
Задана матрица Z(5,4) Найти в каждой строке, если там есть отрицательный элемент, среднее арифметическое всех элементов, исключая нулевые и записать эти значения в массив В. Вывести исходную матрицу Z и массив B. / За ранее огромное спасибо !
Решение задачи: «Найти в каждой строке матрицы, если там есть отрицательный элемент, ср. арифметическое всех элементов, исключая нулевые»
textual
Листинг программы
#include <stdio.h> #include <stdbool.h> #include <math.h> #define LINES 5 #define COLUMNS 4 int z[LINES][COLUMNS] = { { 1, 2, 3, 4 }, { -1, -2, -3, -4 }, { 0, 1, 2, 3 }, { 0, -1, -2, -3 }, { 0, -1, -1, -1 } }; double sum_of_line(int* arr, size_t siz) { int sum = 0; int non_zero_elements = 0; bool exist_negative = false; while( siz-- ) { if( *arr < 0 ) exist_negative = true; if( *arr != 0 ) { ++non_zero_elements; sum += *arr; } ++arr; } if( non_zero_elements == 0 || !exist_negative ) return NAN; return (double)sum / (double)non_zero_elements; } int main() { double b[LINES]; int i; for( i = 0; i < LINES; ++i ) { b[i] = sum_of_line(z[i], COLUMNS); } for( i = 0; i < LINES; ++i ) { if( b[i] == b[i] ) printf("%d = %f\n", i, b[i]); } return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
для работы с консолью, для работы с булевыми значениями, для работы с математическими функциями. - Определяем размерность матрицы: LINES - количество строк, COLUMNS - количество столбцов.
- Объявляем двумерный массив z[LINES][COLUMNS] и инициализируем его значениями.
- Создаем функцию sum_of_line, которая принимает двумерный массив arr размером siz и считает сумму всех ненулевых элементов в строке. Если в строке нет ненулевых элементов или все элементы положительные, функция возвращает NAN (Not a Number).
- В функции main создаем одномерный массив b[LINES], который будет хранить средние арифметические каждой строки матрицы z.
- С помощью цикла for перебираем все строки матрицы z и вызываем функцию sum_of_line для каждой строки, сохраняя результат в соответствующий элемент массива b.
- С помощью цикла for выводим на экран значения элементов массива b, исключая нулевые значения.
- Завершаем программу возвратом значения 0 из функции main.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д