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

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

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

Здравствуйте,нужна помощь с программкой. Задание:В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением ненулевых элементов той строки, в которой расположен этот элемент. Собственно начал работать и вот в чем загвоздка,печатается массив и находится среднее арифметическое,но всех элементов,а надо,чтоб нулевые не учитывались. С заменой еще не разбирался,так как тут застрял. Моя наработка кода,буду признателен за помощь.
Листинг программы
  1. #include "math.h"
  2. #include<stdio.h> //Модуль стандартного ввода-вывода
  3. #include<conio.h> /*Модуль функций расширения ввода-вывода*/
  4. #include<windows.h>
  5. #define Nmax 10
  6. #define Mmax 10
  7. int main()
  8. {
  9. int k,i,j,n=4, m=3;
  10. double sr[4*3],a[Nmax][Mmax]=
  11. {{45,4,0,55},
  12. {0,2,6,44},
  13. {98,0,0,22}
  14. };
  15. SetConsoleOutputCP(1251);
  16. SetConsoleCP(1251);
  17. printf ("Исходная матрица\n");
  18. for (i=0; i<m; i++)
  19. {
  20. k=0;
  21. for ( j=0; j<n; j++)
  22. {
  23. k++;
  24. if (k<5)
  25. printf("%7.0lf%c",a[i][j],j==n-1?'\n':' ');
  26. else
  27. {
  28. k=0;
  29. printf("%7.0lf\n",a[i][j]);
  30. }
  31. }
  32. }
  33. for(i=0; i<m; i++)
  34. {
  35. sr[i]=0;
  36. for(j=0; j<n;j++)
  37. sr[i]+=a[i][j];
  38. sr[i]/=n;}
  39. printf("\nЗначения среднего арифметического в строках матрицы\n");
  40. for(i=0; i<m;i++)
  41. printf("sr[%d]=%8.1lf\n",i,sr[i]);
  42. getch();
  43. return 0;
  44. }

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #define ROWS 3 // количество строк
  5. #define COLS 4 // количество сьолбцов
  6.  
  7. int main()
  8. {
  9.     double matrix[ROWS][COLS] = {{45, 4, 0, 55}, {0, 2, 6, 44}, {98, 0, 0, 22}};
  10.     int i, j, count;
  11.     double average;
  12.    
  13.     // вывод исходной матрицы
  14.     printf("\nИсходная матрица:\n");
  15.     for (i = 0; i < ROWS; ++i)
  16.     {
  17.         for (j = 0; j < COLS; ++j)
  18.             printf("%.*f\t", 0, matrix[i][j]); // звездочка заменится нулем, и дробная часть не выведется
  19.         printf("\n");
  20.     }
  21.    
  22.     printf("\nСредние арифметические:\n");
  23.     for (i = 0; i < ROWS; ++i)
  24.     {
  25.         // расчет СА
  26.         average = 0;
  27.         count = 0;
  28.         for (j = 0; j < COLS; ++j)
  29.             if (matrix[i][j] != 0) // "!= 0" можно опустить
  30.             {
  31.                 average += matrix[i][j]; // сумма ненулевых элементов
  32.                 ++count; // количество ненулевых элементов
  33.             }
  34.         average /= count; // собственно СА
  35.         printf("СА[%d] = %.1f\t", i, average);
  36.         // замена нулевых элементов
  37.         for (j = 0; j < COLS; ++j)
  38.             if (matrix[i][j] == 0)
  39.                 matrix[i][j] = average;
  40.     }
  41.     printf("\n");
  42.    
  43.     // вывод конечной матрицы
  44.     printf("\nКонечная матрица:\n");
  45.     for (i = 0; i < ROWS; ++i)
  46.     {
  47.         for (j = 0; j < COLS; ++j)
  48.             printf("%.*f\t", 1, matrix[i][j]);
  49.         printf("\n");
  50.     }
  51.     // задержка консольного окна
  52.     _getch();
  53.    
  54.     return 0;
  55. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы