鱼C论坛

 找回密码
 立即注册
查看: 1712|回复: 3

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

[复制链接]
发表于 2022-11-24 20:56:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;}
最佳答案
2022-11-24 21:07:41
本帖最后由 tommyyu 于 2022-11-24 21:14 编辑

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

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

使用道具 举报

发表于 2022-11-24 21:01:52 | 显示全部楼层
这是从小到大排序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-24 21:07:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 tommyyu 于 2022-11-24 21:14 编辑

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

  1. t=a;
  2. a=b;
  3. b=t;
复制代码
这个语句段的作用是交换 a 和 b 的值。用最直观的写法交换两个变量:
  1. a = b;
  2. b = a;
复制代码
是无法取得正确的效果的,若执行上面那段代码前 a = 1, b = 2,则在执行第一句代码时,a 也会变成 2,而执行第二句代码时,由于 a 的值已经变成了 2,此时 b 还是会被赋值成 2,这就无法达到预期的效果。
想要达到预期的效果,我们可以先把变量 a 的值保存在 t 里面,最后把 t 的值赋给 b,具体代码就是
  1. t = a;
  2. a = b;
  3. b = t;
复制代码
此时我们还以 a = 1, b = 2 举例,在执行第一句代码时,t 的值就变成了 1,执行第二句代码时,a 的值变成了 2,在执行最后一句代码时,由于 t 在第一句代码是已经被赋值成了 1,所以这句代码将 b 赋值为 1。这段代码运行后,从原来的 a = 1, b = 2 变成了 a = 2, b = 1,达到了交换两个变量的效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-24 21:18:24 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-24 21:20 编辑

         这是正常操作,C 语言两个变量交换数值必须借助于第三个变量做中介,并一定要交换三次才能完成。
  1.         t = a  ;  // 准备把 b 的值交给 a,所以,需要先把 a 的值保存在中间变量 t 中
  2.         a = b  ;  // a 的值被保护后,把 b 的数值交给 a
  3.         b = t  ;  // 再把 a 原来的值交给 b,这样,就实现了变量 a、b 之间的数值互换
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 07:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表