Заменить нулевые элементы строк матрицы на среднее арифметическое - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте,нужна помощь с программкой. Задание:В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки, в которой расположен этот элемент. Собственно начал работать и вот в чем загвоздка,печатается массив и находится среднее арифметическое,но всех элементов,а надо,чтоб нулевые не учитывались. С заменой еще не разбирался,так как тут застрял. Моя наработка кода,буду признателен за помощь.
#include "math.h"
#include<stdio.h> //Модуль стандартного ввода-вывода
#include<conio.h> /*Модуль функций расширения ввода-вывода*/
#include<windows.h>
 
#define Nmax 10
#define Mmax 10
int main()
{
    int k,i,j,n=4, m=3;
    double sr[4*3],a[Nmax][Mmax]=
    {{45,4,0,55},
    {0,2,6,44},
    {98,0,0,22}
    };
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    printf ("Исходная матрица\n");
  for (i=0; i<m; i++)
  { 
    k=0;
    for ( j=0; j<n; j++)
    {
      k++;
      if (k<5) 
        printf("%7.0lf%c",a[i][j],j==n-1?'\n':' ');
      else
     {
        k=0;
        printf("%7.0lf\n",a[i][j]);
     }
    }
  }
  for(i=0; i<m; i++)
        {
         sr[i]=0; 
         for(j=0; j<n;j++)           
            sr[i]+=a[i][j];
            sr[i]/=n;}      
    printf("\nЗначения среднего арифметического в строках матрицы\n");
    for(i=0; i<m;i++)
        printf("sr[%d]=%8.1lf\n",i,sr[i]);
  getch();
    return 0;
}

Решение задачи: «Заменить нулевые элементы строк матрицы на среднее арифметическое»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
 
#define ROWS 3 // количество строк
#define COLS 4 // количество сьолбцов
 
int main()
{
    double matrix[ROWS][COLS] = {{45, 4, 0, 55}, {0, 2, 6, 44}, {98, 0, 0, 22}};
    int i, j, count;
    double average;
    
    // вывод исходной матрицы
    printf("\nИсходная матрица:\n");
    for (i = 0; i < ROWS; ++i)
    {
        for (j = 0; j < COLS; ++j)
            printf("%.*f\t", 0, matrix[i][j]); // звездочка заменится нулем, и дробная часть не выведется
        printf("\n");
    }
    
    printf("\nСредние арифметические:\n");
    for (i = 0; i < ROWS; ++i)
    {
        // расчет СА
        average = 0;
        count = 0;
        for (j = 0; j < COLS; ++j)
            if (matrix[i][j] != 0) // "!= 0" можно опустить
            {
                average += matrix[i][j]; // сумма ненулевых элементов
                ++count; // количество ненулевых элементов
            }
        average /= count; // собственно СА
        printf("СА[%d] = %.1f\t", i, average);
        // замена нулевых элементов
        for (j = 0; j < COLS; ++j)
            if (matrix[i][j] == 0)
                matrix[i][j] = average;
    }
    printf("\n");
    
    // вывод конечной матрицы
    printf("\nКонечная матрица:\n");
    for (i = 0; i < ROWS; ++i)
    {
        for (j = 0; j < COLS; ++j)
            printf("%.*f\t", 1, matrix[i][j]);
        printf("\n");
    }
    // задержка консольного окна
    _getch();
    
    return 0;
}

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

  1. Объявлены две макро-переменные ROWS и COLS, которые определяют размерность матрицы.
  2. В основной функции main() объявлен массив matrix[ROWS][COLS] и инициализирован начальными значениями.
  3. Происходит вывод исходной матрицы на экран с помощью цикла for и функции printf().
  4. Для каждой строки матрицы происходит проверка каждого элемента на нулевое значение с помощью условия if (matrix[i][j] != 0).
  5. Если элемент не равен нулю, то он участвует в расчете среднего арифметического (СА) с помощью переменных average и count.
  6. После расчета СА для каждой строки матрицы, происходит замена нулевых элементов на полученное СА с помощью цикла for и условия if (matrix[i][j] == 0).
  7. Происходит вывод конечной матрицы на экран с помощью цикла for и функции printf().
  8. В конце программы вызывается функция _getch(), которая задерживает консольное окно.
  9. Функция main() возвращает 0, что означает успешное завершение программы.

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


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

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

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