如何實現兩個數交換的交換以及巨集定義的編寫

2021-08-21 20:26:24 字數 823 閱讀 6422

語句實現方法】

方法1:不使用中間變數

●利用位運算子

a = a^b; b = a^b; a = a^b;  →    a^= b^ = a^ = b;(不用考慮越界問題)

【解釋】: 對於a^a =0, a^0 =a

a = a^b

b = a^b =( a^b) ^b =a^(b ^b) = a^0 = a(交換律)

a = a^b = (a^b) ^a = a^a^b = b; (結合律,並且有a = a^b,a = b)

●不使用位運算子

a= a + b; b = a - b;a = a – b; (需要考慮越界問題)

方法2:使用中間變數

temp= a; a = b; b = temp;

【巨集定義方法】

方法1:

#define swap(a,b) \

a= a^b;\

b= a^b;\

a= a^b;

方法2:

#define swap(a,b) \

a= a + b ;\

b= a - b;\

a= a - b;

【函式實現方法】

方法1:利用指標

intswap(int *p,int*q)

int temp;

temp = *p;

*p = *q;

*q = temp;

方法2:利用引用

intswap(int &a,int&b)

int temp;

temp = a;

a = b;

b = temp;

交換兩個數

問題 如果要求不使用臨時變數,應該如何交換兩個變數的值?解決這個題的方式有好幾種,第一種當然就是使用系統自帶的swap 函式了。不過,這種抖機靈的做法一般人很難欣賞,而且說不定它內部實現使用了臨時變數也說不定 這是使用臨時變數的做法,也是我們在c語言中常用的做法 func swap1 a inout...

兩個數交換值得實現

include using namespace std void f int m,int n void fun int m,int n int main 第乙個交換函式是利用的指標的方式,用這種方式直接從位址層面講原本a的位址指向了b,b的位址指向了a,從而實現了兩個數的交換 第二種方式是利用引用的...

兩個數的交換

一般思路 建立乙個臨時變數,以這個臨時變數為中間變數,利用賦值來完成兩個數的內容的相互交換。如下 include int main 優化方案 1.上述方法中需要另外建立乙個變數,略微有些麻煩,若是要求不能建立臨時變數,則可以採用數學上的加法來進行一些變通。如下 include int main 2....