Найти в каждой строке матрицы, если там есть отрицательный элемент, ср. арифметическое всех элементов, исключая нулевые - 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.