今天上了C语言课,老师讲了有关交换两个数的问题。课后,经过自己的思考和总结,我得出了以下几种方法。虽然这个问题的方法还有很多,但我目前只了解到了这五种方法,希望大家多提建议和意见。其他的方法待补充奥。。。

法一:

  大家最容易想的方法,首先设一个临时变量,利用临时变量将两个数交换。下面是实现它的代码:

#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;
}

法二:利用指针实现,这种方法效率比较高。

 

#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;
 }

法三:可以不用设置临时变量的方法,利用加减法实现,但是可能会出现溢出。

#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;
 }

法五:利用异或运算实现,但这个方法效率比较低。

 

#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;
 }

 今天就总结到这里吧。希望对大家有帮助。