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

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

  1. Включаем необходимые заголовочные файлы: для работы с консолью, для работы с булевыми значениями, для работы с математическими функциями.
  2. Определяем размерность матрицы: LINES - количество строк, COLUMNS - количество столбцов.
  3. Объявляем двумерный массив z[LINES][COLUMNS] и инициализируем его значениями.
  4. Создаем функцию sum_of_line, которая принимает двумерный массив arr размером siz и считает сумму всех ненулевых элементов в строке. Если в строке нет ненулевых элементов или все элементы положительные, функция возвращает NAN (Not a Number).
  5. В функции main создаем одномерный массив b[LINES], который будет хранить средние арифметические каждой строки матрицы z.
  6. С помощью цикла for перебираем все строки матрицы z и вызываем функцию sum_of_line для каждой строки, сохраняя результат в соответствующий элемент массива b.
  7. С помощью цикла for выводим на экран значения элементов массива b, исключая нулевые значения.
  8. Завершаем программу возвратом значения 0 из функции main.

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


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

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

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