码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-09-27 23:54:25      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:进一步   简单   算法   turn   实验   运算符   完成   变量   image   

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

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

最基础的代码如下:

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

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

技术分享

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

标签:进一步   简单   算法   turn   实验   运算符   完成   变量   image   

原文地址:http://www.cnblogs.com/xiefei777/p/7604411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!