fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Создание двумерной матрицы, ибо далеко
  5. // не все компиляторы поддерживают VLA даже в C...
  6. int ** makeMatrix(unsigned int n, unsigned int m)
  7. {
  8. // Можно (и нужно) дописать проверки, что память выделена.
  9. // Для краткости не стал.
  10. int ** a = malloc(sizeof(int*)*n);
  11. for(unsigned int i = 0; i < n; ++i)
  12. a[i] = malloc(sizeof(int)*m);
  13. return a;
  14. }
  15.  
  16. // Заполнение матрицы
  17. void input(int ** A, unsigned int rows, unsigned int cols)
  18. {
  19. for (unsigned int i = 0; i < rows; i++)
  20. for (unsigned int j = 0; j < cols; j++)
  21. {
  22. printf("a[%u][%u] = ", i, j);
  23. scanf("%d", &A[i][j]);
  24. }
  25. }
  26.  
  27. // Подсчет количества отрицательных элементов в
  28. // столбце colNo матрицы A
  29. int minus_count(int ** A, unsigned int rows, unsigned int colNo)
  30. {
  31. int cnt = 0;
  32. for(unsigned int i = 0; i < rows; ++i)
  33. cnt += (A[i][colNo] < 0); // Для отрицательного дает 1
  34. return cnt;
  35. }
  36.  
  37. // Проверка всех столбцов и вывод номеров тех, где ровно
  38. // два отрицательных элемента
  39. void check_2minus(int ** A, unsigned int rows, unsigned int cols)
  40. {
  41. for(unsigned int i = 0; i < cols; ++i)
  42. if (minus_count(A,rows,i) == 2)
  43. printf("Столбец %d содержит два отрицательных элемента\n",i);
  44. }
  45.  
  46. // Функция освобождения памяти
  47. void freeMatrix(int ** A, unsigned int rows)
  48. {
  49. for(unsigned int i = 0; i < rows; ++i) free(A[i]);
  50. free(A);
  51. }
  52.  
  53. int main() {
  54. unsigned int n,m;
  55. printf("Введите количество строк матрицы B / столбцов матрицы C: ");
  56. scanf("%u", &n);
  57. printf("Введите количество столбцов матрицы B / строк матрицы C: ");
  58. scanf("%u", &m);
  59.  
  60. int ** B = makeMatrix(n,m);
  61. int ** C = makeMatrix(m,n);
  62.  
  63. printf("Заполните первый массив: \n");
  64. input(B, n, m);
  65.  
  66. printf("Заполните второй массив: \n");
  67. input(C, m, n);
  68.  
  69. puts("\n"); // "Просвет" перед выводом столбцов первой матрицы
  70. // Проверка первого массива
  71. check_2minus(B, n, m);
  72.  
  73. puts("\n"); // "Просвет" перед выводом столбцов второй матрицы
  74. // Проверка второго массива
  75. check_2minus(C, m, n);
  76.  
  77. // Освобождение памяти
  78. freeMatrix(B, n);
  79. freeMatrix(C, m);
  80.  
  81. }
  82.  
Success #stdin #stdout 0.01s 5364KB
stdin
5 3

-1   2   4
 3   5   6
 7   8   9
 2  -1  -2
-2   0  -4


-1  -2   3  -4   0
-2  -3  -1   7   5
 4  -7  -2  -1   9

stdout
Введите количество строк матрицы B / столбцов матрицы C: Введите количество столбцов матрицы B / строк матрицы C: Заполните первый массив: 
a[0][0] = a[0][1] = a[0][2] = a[1][0] = a[1][1] = a[1][2] = a[2][0] = a[2][1] = a[2][2] = a[3][0] = a[3][1] = a[3][2] = a[4][0] = a[4][1] = a[4][2] = Заполните второй массив: 
a[0][0] = a[0][1] = a[0][2] = a[0][3] = a[0][4] = a[1][0] = a[1][1] = a[1][2] = a[1][3] = a[1][4] = a[2][0] = a[2][1] = a[2][2] = a[2][3] = a[2][4] = 

Столбец 0 содержит два отрицательных элемента
Столбец 2 содержит два отрицательных элемента


Столбец 0 содержит два отрицательных элемента
Столбец 2 содержит два отрицательных элемента
Столбец 3 содержит два отрицательных элемента