今天上了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; }
今天就总结到这里吧。但愿对你们有帮助。变量