Заменить нулевые элементы строк матрицы на среднее арифметическое - 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;
}
Объяснение кода листинга программы
- Объявлены две макро-переменные ROWS и COLS, которые определяют размерность матрицы.
- В основной функции main() объявлен массив matrix[ROWS][COLS] и инициализирован начальными значениями.
- Происходит вывод исходной матрицы на экран с помощью цикла for и функции printf().
- Для каждой строки матрицы происходит проверка каждого элемента на нулевое значение с помощью условия
if (matrix[i][j] != 0). - Если элемент не равен нулю, то он участвует в расчете среднего арифметического (СА) с помощью переменных average и count.
- После расчета СА для каждой строки матрицы, происходит замена нулевых элементов на полученное СА с помощью цикла for и условия
if (matrix[i][j] == 0). - Происходит вывод конечной матрицы на экран с помощью цикла for и функции printf().
- В конце программы вызывается функция _getch(), которая задерживает консольное окно.
- Функция main() возвращает 0, что означает успешное завершение программы.