你说的对调是这个意思吗?如果有用麻烦点个采纳谢谢
void change(int p[][N], int N)
{
int temp;
for (int i = 0; i < N; i++) {
for (int j = i; j < N; j++) {
temp = p[i][j];
p[i][j] = p[j][i];
p[j][i] = temp;
}
}
}
使用一个中间变量将两个变量的值交换即可实现数据对调,可以通过使用多种方法来实现:
1.使用第三个变量
int a = 1, b = 2, temp;
printf("交换前 a=%d, b=%d\n",a,b);
temp = a;
a = b;
b = temp;
printf("交换后 a=%d, b=%d\n",a,b);
输出:
交换前 a=1, b=2
交换后 a=2, b=1
2.使用加减法
int a = 1, b = 2;
printf("交换前 a=%d, b=%d\n",a,b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后a=%d, b=%d\n",a,b);
输出:
交换前 a=1, b=2
交换后 a=2, b=1
3.使用异或法
int a = 1, b = 2;
printf("交换前 a=%d, b=%d\n",a,b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后 a=%d, b=%d\n",a,b);
输出:
交换前 a=1, b=2
交换后 a=2, b=1
以上3种方法均能实现数值交换。其中使用异或法的方式在单片机编程中被广泛使用,因为异或运算速度较快,且不会出现溢出现象。
若想扩展到数据对调的问题上,只需要套入上述例子即可实现数据对调。例如:
int a = 1, b = 2;
printf("交换前 a=%d, b=%d\n",a,b);
int temp;
temp = a;
a = b;
b = temp;
printf("交换后 a=%d, b=%d\n",a,b);
输出:
交换前 a=1, b=2
交换后 a=2, b=1