方法一:创建一个临时变量,来进行中间代换。
举例:如生活中将两个瓶子的液体进行交换
从生活中转移到c语言:则需要创建一个临时变量,来作为中间媒介进行交换 ,创建两个变量a,b,利用scanf函数来接收两个数,在创建临时变量C作为中间媒介进行临时存储。
输入格式:输入两个数,将这两数进行交换
输出格式:
总代码:
#include<stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("a=%d,b=%d\n", a, b);
int c = 0;
c = a;
a = b;
b =c;
printf("a=%d,b=%d", a, b);
return 0;
}
方法二 :不创建临时变量,利用数学方法。
先利用两数相加,然后利用减法进行代换;
如:a=3,b=5;
a=a+b=8;
b=a-b;
a=a-b;
此时a,b的就进行了交换。
代码实现:
#include<stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("a=%d,b=%d\n", a, b);
a = a + b;//此时a为两数相加//
b = a - b;//此步实现了将a的值赋值给b//
a = a - b;//此步实现了将b的值赋值给a//
printf("a=%d,b=%d", a, b);
return 0;
}
注意:这种写法的缺陷是:a,b如果足够大,此方法就无法胜任。
方法三:利用操作符^(按位异或)进行(整数变量),不需要创建第三个变量。
^:按位异或操作符,利用计算机存储二进制原理,将两数二进制进行计算,相同取为零,相反为一。
例如a=1;
计算机存储为00000000 00000000 00000000 00000001(补码)
a=1;
计算机存储为00000000 00000000 00000000 00000001(补码)
则a^a
计算结果为:0
计算机存储为00000000 00000000 00000000 00000000(补码)
0的二进制存储:
计算机存储为00000000 00000000 00000000 00000000(补码)
a^0
计算结果为:a
计算机存储为00000000 00000000 00000000 00000001(补码)
//异或操作符特点:
//a^a=0;
//0^a=a;
//a^a^b=
代码实现:
#include<stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("a=%d,b=%d\n", a, b);
a = a ^ b;
b = a ^ b;//b=a^b^b;
a = a ^ b;//a=a^b^a;
printf("a=%d,b=%d", a, b);
return 0;
}