用C语言实现:交换两值的内容。

可能很多人都认为这道编程问题非常的简单,只需要设置一个中间变量,再通过赋值即可完成交换两值的内容。

那我们今天就进一步深究一下这道简单的问题:

最基础的代码如下:

#include<stdio.h>
int main()
{
 int a = 1, b = 2, t;
 printf("a=%d,b=%d\n", a, b);
 t = a;
 a = b;
 b = t;
 printf("a=%d,b=%d\n", a, b);
 system("pause");
 return 0;
}

但是如果题目要求不使用中间变量完成上述要求呢?

那么我们就需要好好考虑如何只使用给定的变量a、b进行交换操作。

我们可以令 a=a+b ,这时a已经是原来a的值加上b的值了。

再令 b=a-b ,则可完成b值的交换。

这时 a=a-b ,则完成了a值的交换。

代码如下:

#include <stdio.h>  
int main()
{
    int a = 1,b = 2;
    printf("before:a=%d  b=%d\n", a, b);
    a = a + b;
    b = a - b;
    a = a - b;
    printf("after:a=%d  b=%d\n", a, b);
    system("pause");
    return 0;
}

但是经过反复考虑后,我们会发现这个算法其实存在一定的问题。
即当a、b数字很大时,则会发生溢出现象,超过int的整型范围。

这时我们就可以选择第三种算法进行编程,利用异或运算符进行编程。

代码如下:

#include <stdio.h>  
int main()
{
    int a = 1;
    int b = 2;
    printf("before:a=%d  b=%d\n", a, b);
    a = a^b;
    b = a^b;
    a = a^b;
    printf("after:a=%d  b=%d\n", a, b);
    system("pause");
    return 0;
}

最后我们附上程序实验的结果:

posted @ 2017-09-27 22:51  coldcold  阅读(1219)  评论(0编辑  收藏  举报