這是個很common的例子,實現2個數據a,b的交換,a的值給b,b的值給a.
一般做法是借助中間變量緩存,實現交換。實現方法如下:
#include<stdio.h>
int main(void){
int a , b, t;
scanf("%d%d", &a, &b);
t = a;
a = b;
b = t;
printf("%d %d\n", a, b);
return 0;
}
第二種方法是不用任何變量,使用強制相加,然後逐一分離,如下:
#include<stdio.h>
int main(void){
int a , b;
scanf("%d%d", &a, &b);//a = a1,b = b1
a = a + b;//a = a1 + b1
b = a - b;//b = a1 + b1 - b1 => b = a1
a = a - b;//a = a1 + b1 - (a1 + b1 - b1) => a = b1
printf("%d %d\n", a, b);
return 0;
}
第三種方法,指針交換,例如:
#include<stdio.h>
int main(void){
int a , b;
scanf("%d%d", &a, &b);
printf("%d %d\n", b, a);
return 0;
}
還有一種是堆棧方式,改變出棧順序,嵌入匯編如下:
push a
push b
pop a
pop b
當然也可用c語言來實現堆棧函數,然後來完成a,b交換。
總結:實現方式多種,有自己的優劣勢。第一種常用,但多一個變量;第二種,少一個變量,但不常用;第三種簡潔好用。第四種用堆棧的特性先進後出,改變出棧順序實現交換。