Hy! это мой первый пост о переполнении стека, я знаю, что он довольно длинный, надеюсь, меня не забанят!
Вероятно, одним из наиболее элегантных подходов было бы использование функции, которая меняет местами два полученных аргумента - используя ее для обмена компонентами матрицы. Допустим, что-то вроде swap (a, b) .
Как уже говорили многие, мы должны рассмотреть возможность использования вспомогательной переменной
auxiliary = a ;
a = b ;
b = auxiliary ;
Недавно я выбрал новый метод, который мне показался впечатляющим, с использованием побитовой операции XOR (http://en.wikipedia.org/wiki/Xor), таким образом, вспомогательное оборудование не требуется
a ^= b ;
b ^= a ;
a ^= b ;
Вы можете легко использовать эту операцию, чтобы поменять местами два элемента (a и b) - я считаю, что это не по теме, но я настаивал на этой идее, потому что нашел ее довольно интересной.
Наконец, отвечая на ваш вопрос, вы можете использовать, скажем,
int swap (int *a , int *b){
(*a)^=(*b);
(*b)^=(*a);
(*a)^=(*b);
return 0;
}
при наличии матрицы, объявленной как
#define ROW_COUNT 5
#define COLUMN_COUNT 5
....
int a[ROW_COUNT][COLUMN_COUNT];
Вы можете использовать XOR для обмена строками, сначала идентифицируя элементы, которые нужно поменять местами (в соответствии с индексом строки, как вы уже сказали)
printf("\nSwap Row: "); scanf("%d", &swp1) ; // first row index
printf("With Row: "); scanf("%d", &swp2); // second row index
for (j = 0 ; j < COLUMN_COUNT ; j++){
swap( &a[swp1][j] , &a[swp2][j] );
}
Надеюсь, это будет полезно в вашей дальнейшей практике.
Также попробуйте этот пример, я уверен, что впоследствии вы поймете всю идею намного лучше (не забудьте, что индекс матрицы начинается с 0!)
#include "stdio.h"
#include "conio.h"
#define ROW_COUNT 5
#define COLUMN_COUNT 5
int swap (int *a , int *b){
(*a)^=(*b);
(*b)^=(*a);
(*a)^=(*b);
return 0;
}
int main(){
int i, j ;
int swp1, swp2 ;
int a[ROW_COUNT][COLUMN_COUNT];
// Create ( ROW_COUNT X COLUMN_COUNT ) random matrix
for (i = 0 ; i < ROW_COUNT ; i++ )
for (j = 0 ; j < COLUMN_COUNT ; j++ ) a[i][j] = rand();
// Display matrix before row swap
for (i = 0 ; i < ROW_COUNT ; i++ ){
for (j = 0 ; j < COLUMN_COUNT ; j++ ) printf("%d\t",a[i][j]);
printf("\n");
}
// Elements to be swapped
printf("\nSwap Row: "); scanf("%d", &swp1) ; // first row index
printf("With Row: "); scanf("%d", &swp2); // second row index
// Swapping right here
for (j = 0 ; j < COLUMN_COUNT ; j++){
swap( &a[swp1][j] , &a[swp2][j] );
}
// Display once again
printf("\n");
for (i = 0 ; i < ROW_COUNT ; i++ ){
for (j = 0 ; j < COLUMN_COUNT ; j++ ) printf("%d\t",a[i][j]);
printf("\n");
}
getch();
return 0;
}