看到这个题目我想到方法是用第三变量交换,代码如下:
#include<stdio.h>
int main()//这是用第三变量交换,这种效率是最高的
{
int a=3;
int b=5;
int tmp=0;
tmp=a;
a=b;
b=tmp;
printf("a=%d,b=%d\n",a,b);
return 0;
}
当老师说用函数的方式写出来的时候,我写出了以下代码:
#include<stdio.h>
void swap(int x,int y)
{
int tmp=x;
x=y;
y=tmp;
}
int main()
{
int a=3;
int b=5;
swap(a,b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
很自信我写的是对的,可惜事实证明那是错误的,这个运行结果是a=3,b=5 a和b的值并没有交换。分析一下,swap(a,b)只是将a,b的值传给x,y;在void swap(int x,int y)函数中,只是将x,y的值改变了,并没有将a,b的值改变。
在老师讲过之后,我总结了以下几种方法:
int main()//这里是用加法的方式进行交换,还可以用乘的方式进行交换,但有局限性,加法 乘法会越界,有0的时候也不可以用乘法
{
int a=3;
int b=5;
a=a+b;
b=a-b;
a=a-b;
printf("a=%d,b=%d\n",a,b);
return 0;</span>
}
int main()//用与或的方式将两个变量的值交换
{
int a=3;
int b=5;
a=a^b;
b=a^b;
a=a^b;
printf("a=%d,b=%d\n",a,b);
return 0;
}
</pre><pre code_snippet_id="1697565" snippet_file_name="blog_20160526_11_5547133" name="code" class="csharp">
当然也可以用指针的方式,代码基本上差不多:
int main()//用指针的方式进行交换(引入第三变量)
{
int a=3;
int b=5;
int *p;
int *q;
p=&a;
q=&b;
int tmp;
tmp=*p;
*p=*q;
*q=tmp;
printf("a=%d,b=%d\n",a,b);
return 0;
}
int main()//指针加法
{
int a=3;
int b=5;
int *p;
p=&a;
int *q;
q=&b;
*p=*p+*q;
*q=*p-*q;
*p=*p-*q;
printf("a=%d,b=%d\n",a,b);
return 0;
}
int main()//指针与或
{
int a=3;
int b=5;
int *p;
int *q;
p=&a;
q=&b;
*p=*p^*q;
*q=*p^*q;
*p=*p^*q;
printf("a=%d,b=%d\n",a,b);
return 0;
}
int main()//指针乘法
{
int a=3;
int b=5;
int *p;
p=&a;
int *q;
q=&b;
*p=*p*(*q);
*q=*p/(*q);
*p=*p/(*q);
printf("a=%d,b=%d\n",a,b);
return 0;
}
下面是用函数的方式实现:</span>
void swap(int *x,int *y)//第三变量
{
int tmp;
tmp=*x;
*x=*y;
*y=tmp;
}
int main()
{
int a=3;
int b=5;
swap(&a,&b);//传参
printf("a=%d,b=%d\n",a,b);
return 0;
}
<span style="font-family: Arial, Helvetica, sans-serif;"> void swap(int *x,int *y)//加减法</span>
{
*x=*x+*y;
*y=*x-*y;
*x=*x-*y;
}
int main()
{
int a=3;
int b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap(int *x,int *y)//乘除
{
*x=*x**y;
*y=*x/(*y);
*x=*x/(*y);
}
int main()
{
int a=3;
int b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap(int *x,int *y)//与或
{
*x=*x^*y;
*y=*x^*y;
*x=*x^*y;
}
int main()
{
int a=3;
int b=5;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
初学者,有错误的地方请指出,谢谢!