回 帖 发 新 帖 刷新版面

主题:这两个有什么区别?

NO 1 :#include<stdio.h>
void main()
{
    int a,b,c,t;
    scanf("%d,%d,%d",&a,&b,&c);
    if(a<b)
    {t=a;a=b;b=t;}
    if(a<c)
    {t=a;a=c;c=t;}
    if(b<c)
    {t=b;b=c;c=t;}
    printf("big to small :%d %d %d\n",a,b,c);
}
NO 2 :#include<stdio.h>
void main()
{
    int a,b,c,t;
    scanf("%d,%d,%d",&a,&b,&c);
    if(a<b)
    {t=a;b=t;a=b;}
    if(a<c)
    {t=a;c=t;a=c;}
    if(b<c)
    {t=b;c=t;b=c;}
    printf("big to small :%d %d %d\n",a,b,c);

}

第一个可以正常输出 但第二个不行 我觉得这两个代码是一样的意思啊  第二个哪里错了?

回复列表 (共5个回复)

沙发

第一个
if(a<b)
    {t=a;a=b;b=t;}
初始时a=1 b=2 t未定义
t=a;--a=1 b=2 t=1
a=b;--a=2 b=2 t=1
b=t;--a=2 b=1 t=1 交换成功!

自己试一下第二个。

板凳

令a0=a b0=b
下面有:
t=a;  -> t=a0
b=t;  -> b=t=a0
a=b;  ->a=b=a0

3 楼

t=a;b=t;a=b
注意这里
第一步保存下了a
第二步直接用t里保存的值(a)覆盖了b
原来b里的值就没有了
这种问题不理解的时候拿张纸把变量都列出来,然后写写变量怎么变化就都明白了
注意程序里可没有什么交换率一说,每句是严格依次执行的

4 楼

NO 2 :#include<stdio.h>
void main()
{
    int a,b,c,t;
    scanf("%d,%d,%d",&a,&b,&c);
    if(a<b)
    {t=a;b=t;a=b;}
    if(a<c)
    {t=a;c=t;a=c;}
    if(b<c)
    {t=b;c=t;b=c;}
    printf("big to small :%d %d %d\n",a,b,c);

}

这样以前的b值就没有保存了啊

5 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

我来回复

您尚未登录,请登录后再回复。点此登录或注册