今天上了C語言課,老師講了有關交換兩個數的問題。課後,通過本身的思考和總結,我得出瞭如下幾種方法。雖然這個問題的方法還有不少,但我目前只瞭解到了這五種方法,但願你們多提建議和意見。其餘的方法待補充奧。。。ide
法一:spa
你們最容易想的方法,首先設一個臨時變量,利用臨時變量將兩個數交換。下面是實現它的代碼:指針
#include<stdio.h> int main() { int num1=5,num2=10,tmp=0; printf("before:\n"); printf("num1=%d\num2=%d\n",num1,num2); tmp=num1; num1=num2; num2=tmp; printf("after:\n"); printf("num1=%d\num2=%d\n",num1,num2); return 0; }
法二:利用指針實現,這種方法效率比較高。it
#include <stdio.h> void swap(int* p1, int *p2) { int tmp = *p1; *p1 = *p2; *p2 = tmp; } int main() { int num1 = 5; int num2 = 10; int tmp = 0; printf("before:\n"); printf("num1=%d\num2=%d\n",num1,num2); swap(&num1,&num2); printf("after:\n"); printf("num1=%d\num2=%d\n",num1,num2); return 0; }
法三:能夠不用設置臨時變量的方法,利用加減法實現,可是可能會出現溢出。io
#include <stdio.h> int main() { int num1 = 5; int num2 = 10; printf("before:\n"); printf("num1=%d\num2=%d\n",num1,num2); num1 = num1+num2; num2 = num1-num2; num1 = num1-num2; printf("after:\n"); printf("num1=%d\num2=%d\n",num1,num2); return 0; }
法四:利用乘除實現。class
#include <stdio.h> int main() { int num1 = 5; int num2 = 10; printf("before:\n"); printf("num1=%d\num2=%d\n",num1,num2); num1 = num1*num2; num2 = num1/num2; num1 = num1/num2; printf("after:\n"); printf("num1=%d\num2=%d\n",num1,num2); return 0; }
法五:利用異或運算實現,但這個方法效率比較低。效率
#include <stdio.h> int main() { int num1 = 5; int num2 = 10; printf("before:\n"); printf("num1=%d\num2=%d\n",num1,num2); num1 = num1^num2; num2 = num1^num2; num1 = num1^num2; printf("after:\n"); printf("num1=%d\num2=%d\n",num1,num2); return 0; }
今天就總結到這裏吧。但願對你們有幫助。變量