C語言中不允許建立臨時變數,交換兩個數的內容

2021-07-13 08:49:35 字數 1266 閱讀 1965

在c語言中可以通過建立臨時變數來實現兩個變數的交換,當不允許建立臨時變數時,應該怎樣實現兩變數的交換呢?

假設有兩個變數num1和num2;下面通過兩種方法進行分析。

方法一:利用加減法。具體演算法分析如下:

由於                   num1+num2-num1=num2;

num1+num2-num2=num1;

則將num1+num2賦給num1;num1-num2賦給num2;num1-num2賦給num1,這樣就可以實現num1和num2兩個數內容的交換。通過相同的思想,我們也可以將加減運算改為乘除運算,但此法存在缺陷。對於不能整除的兩個數,設定的精度不同結果的誤差就不同。

**如下:

#includeint main()

方法二:利用按位異或法。c語言中異或運算子「^」也稱為「xor」運算子,對於二進位制資料它的運算規則是:0^0=0;0^1=1;1^0=1;1^1=1;若參加運算的兩個數同號,則結果為0(假);異號時結果為1(真)。

具體演算法分析如下:num1^num2^num1=num

2;num1^num2^num2=num1; 

則將num1^num2賦給num1;num1^num2賦給num2;num1^num2賦給num1,這樣就可以實現num1和num2兩個數內容的交換。

例如:兩個變數a=2和b=3.

a=2                    00000000 00000000 00000000 00000010

b=3                    00000000 00000000 00000000 00000011

a=a^b=2^3        00000000 00000000 00000000 00000001

b=a^b=2^3^3    00000000 00000000 00000000 00000010

a=a^b=2^3^2    00000000 00000000 00000000 00000011

此時兩個數a,b的內容交換了。

**如下:

#includeint main()

小知識:如何動態求取陣列大小?

例如:對於陣列不知道其大小,可通過sizeof求其長度。sizeof運算子可以動態計算型別大小,

對於陣列a,它的陣列大小可用sizeof(a)/sizeof(a[0]),求取對於整型陣列sizeof(a[0])=4。

本文出自 「scen」 部落格,請務必保留此出處

函式引數初始化,使用列表,C語言可以,C 不允許

同樣的列表初始化,c語言不會報錯 include intsum a,b,c int a int b int c intmain 正常執行 running cd d 程式 隨筆程式 2020年1月 gcc fun.c o fun d 程式 隨筆程式 2020年1月 fun 73 done exited...

C語言中交換兩個變數的值

在c語言中,要交換兩個變數的值,對於不同的人,可能會有不同的方法。對於初學者來說,可能是這樣。void swap int x,int y 但是,c語言中的函式呼叫採用的值傳遞,因此在主函式中呼叫該swap函式顯然無法交換兩個變數的值。當然,對於很多使用c語言的人來說,不會犯上面的錯誤,會這麼寫交換函...

C語言中返回區域性變數或臨時變數的位址的錯誤

先看如下 在編譯執行的時候會丟擲警告 warning c4172 返回區域性變數或臨時變數的位址,並且在main函式中的列印結果不符合我們的預期 如下 int visitarea int main 列印結果 10 2 2 請按任意鍵繼續.我們通過上面可以發現main函式呼叫visitarea 返回v...