Заменить нулевые элементы строк матрицы на среднее арифметическое - 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, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д