喂!这是我关于堆栈溢出的第一篇文章,我知道它很长,希望我不会被禁止!
可能最优雅的方法之一是使用交换两个接收到的参数的函数 - 使用它来交换矩阵组件。让我们说像 swap(a,b) 这样的东西。
正如许多人已经说过的,我们应该考虑使用辅助变量
auxiliary = a ;
a = b ;
b = auxiliary ;
最近,我发现了一种令人印象深刻的新方法,使用按位异或运算 (http://en.wikipedia.org/wiki/Xor),因此不需要辅助
a ^= b ;
b ^= a ;
a ^= b ;
您可以轻松地使用此操作来交换两个元素( a 和 b ) - 我相信这是题外话,但我坚持这个想法,因为我发现它很有趣。
最后,回答您的问题,您可以使用 let's say
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;
}