在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...