cccc678 发表于 2022-11-24 20:56:47

这里赋值不是很懂?这个赋值到底是怎么搞的?为什么可以连续赋值三次?

#include <stdio.h>

int main(int agrc,const char*agrv[])
{
        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 ("%d %d %d\n",a,b,c);
return 0;}

jhq999 发表于 2022-11-24 21:01:52

这是从小到大排序

tommyyu 发表于 2022-11-24 21:07:41

本帖最后由 tommyyu 于 2022-11-24 21:14 编辑

当然可以连续赋值三次啊,为什么不可以连续赋值三次?

t=a;
a=b;
b=t;这个语句段的作用是交换 a 和 b 的值。用最直观的写法交换两个变量:a = b;
b = a;是无法取得正确的效果的,若执行上面那段代码前 a = 1, b = 2,则在执行第一句代码时,a 也会变成 2,而执行第二句代码时,由于 a 的值已经变成了 2,此时 b 还是会被赋值成 2,这就无法达到预期的效果。
想要达到预期的效果,我们可以先把变量 a 的值保存在 t 里面,最后把 t 的值赋给 b,具体代码就是t = a;
a = b;
b = t;此时我们还以 a = 1, b = 2 举例,在执行第一句代码时,t 的值就变成了 1,执行第二句代码时,a 的值变成了 2,在执行最后一句代码时,由于 t 在第一句代码是已经被赋值成了 1,所以这句代码将 b 赋值为 1。这段代码运行后,从原来的 a = 1, b = 2 变成了 a = 2, b = 1,达到了交换两个变量的效果。

jackz007 发表于 2022-11-24 21:18:24

本帖最后由 jackz007 于 2022-11-24 21:20 编辑

         这是正常操作,C 语言两个变量交换数值必须借助于第三个变量做中介,并一定要交换三次才能完成。
      t = a;// 准备把 b 的值交给 a,所以,需要先把 a 的值保存在中间变量 t 中
      a = b;// a 的值被保护后,把 b 的数值交给 a
      b = t;// 再把 a 原来的值交给 b,这样,就实现了变量 a、b 之间的数值互换
页: [1]
查看完整版本: 这里赋值不是很懂?这个赋值到底是怎么搞的?为什么可以连续赋值三次?