2 claysystem claysystem 于 2015.06.07 16:43 提问

C语言交换变量的问题?

测试环境:vs2013
代码如下

# include<stdio.h>
# include<stdlib.h>
int main()
{
    int a = 1;
    int b = 2;
    int t = 0;
    //法1
    t = a; 
    a = b; 
    b = t; 
    printf("a=%d b=%d t=%d\n", a, b, t);
    //输出结果 a=2 b=1 t=1
    a = 1; //重新给a b t赋为原来的值
    b = 2;
    t = 0;
//法2
    t = b;
    b = a;
    a = t;
    printf("a=%d b=%d t=%d\n", a, b, t);
    //输出结果 a=2 b=1 t=2
    system("pause");
}

关于两个变量之间交换值的问题,我用了一个t变量来做交换变量的临时中转站,
发现无论是先把a 或b 放在中转站里面都不会影响最后的结果,影响的只是t的值,
法1和法2就只有这些差别吗?请问我说的对不对呢?
求吐槽!

12个回答

ChinaCore
ChinaCore   2015.06.07 23:01
已采纳

程序一定要写的易懂,易读,最直观的方法不一定有最高的效率,但一定有良好的可维护性,这个很重要。因此请不要拘泥于具体的方法,用大家最喜闻乐见的就行了。你可能是初学者,我要告诉你的是,写程序就是写出自己的思想。

claysystem
claysystem 初学程序就是老钻牛角尖对把,我知道不能钻牛角尖和钻语法细节,可是如何怎么判断什么是牛角尖呢?一个程序我想完全弄懂,然后就会提出很多问题,这样是算钻牛角尖吗,要是的话,我就不钻了,这样不就是遇到了问题不仔细去想吗?不是说要多问为什么吗....晕
2 年多之前 回复
claysystem
claysystem 说得好|!
2 年多之前 回复
u012953816
u012953816   2015.06.07 17:24

没有区别,不能说是两种方法,只能说是1种方法的2种路径

91program
91program   Ds   Rxr 2015.06.07 18:49

两个过程是同一个方法,还有一种方法是不用中间变量t的,你在网上查找一下就要结果。

qq_28828215
qq_28828215   2015.06.07 20:40

两人方法 不算是两算是一个,你可以这样

include

include

int main()
{
int a = 1,b = 2;
a=a+b;
b=a-b;
a=b-b;
printf("a=%d b=%d\n", a, b);
这样就省略t了

a1193561652
a1193561652   Rxr 2015.06.07 16:44

感觉就是一个方法,t只是个临时使用的变量,用完就丢的,它的值是什么并没有什么X用。

u012484988
u012484988   2015.06.07 17:05

方法1和2就一个方法。

JG_Dong
JG_Dong   2015.06.07 17:12

法1中t=a;表示把a的值赋值给t,这样就直接把t的值给抛弃了,,根据程序的步骤,到b=t,,就相当于把a的值赋值给b,同理a=b也是
法2只不过把a换成吧,把b换成a,原理都是一样的

qq_28828215
qq_28828215   2015.06.07 20:43

打错啦 才看到
int a=1,b=2;
a=a+b;
b=a-b;
a=a-b;

claysystem
claysystem 这种方法是过时的方法哦!现在不推荐使用了,当初用的时候好像就是因为内存很小,东西很贵才用这个的,好的方法就是再找一个变量做中转站
2 年多之前 回复
frank_20080215
frank_20080215   2015.06.08 06:30

就这么点差别,没有什么。t没什么可关心的

datou431
datou431   Rxr 2015.06.09 18:27

方法1和2就一个方法。

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片