В) Работа со строками и столбцами

Строка или столбец матрицы аналогичны одномерному массиву. Поэтому к ним применимы все алгоритмы, рассмотренные для одномерных массивов.

В применении же ко всей матрице это обычно требует дополнительного внешнего цикла (циклов).

 

Задача 5. Поменять местами первую и последнюю строки матрицы.

 

for (j=0; j<m; j++) {

p=a[0][j];

a[0][j]=a[n-1][j];

a[n-1][j]=p;

}

 

Задача 6. Найти сумму элементов в каждой строке матрицы.

 

Поскольку строк в матрице несколько, ответом будет не одно число, а одномерный массив:

 

int b[10];

 

for (i=0; i<n; i++) {

for (j=s=0; j<m; j++)

s+=a[i][j];

b[i]=s;

}

 

for(i=0; i<n; i++)

printf("%d ", b[i]);

puts("");

 

Задача 7. Найти сумму элементов в каждом столбце матрицы.

 

По сравнению с предыдущей задачей, здесь изменится порядок циклов (ведь сначала нужно целиком подсчитать сумму в одном столбце, и только затем - в другом и т.д.):

 

for (j=0; j<m; j++) {

for (i=s=0; i<n; i++)

s+=a[i][j];

b[j]=s;

}

 

for(j=0; j<m; j++)

printf("%d ", b[j]);

puts("");

 

 

Задача 8. В каждой строке матрицы определить количество элементов, равных нулю. Отсортировать строки матрицы по убыванию этого количества.

 

Прежде всего, нужно определить эти количества и занести их в одномерный массив (обозначим его b):

 

for (i=0; i<n; i++) {

for (j=s=0; j<m; j++)

if (a[i][j]==0) s++;

b[i]=s;

}

 

 

Затем нужно отсортировать матрицу. В процессе этого обменивать местами нужно как сами строки, так и соответствующие им элементы одномерного массива b (чтобы каждый его элемент продолжал соответствовать своей строке):

 

for (i=0; i<n; i++)

for (k=i+1; k<n; k++)

if (b[k]>b[i]) {

for(j=0; j<m; j++)

{ p=a[i][j]; a[i][j]=a[k][j]; a[k][j]=p; }

p=b[i]; b[i]=b[k]; b[k]=p;

}