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