鱼C论坛

 找回密码
 立即注册
查看: 1289|回复: 2

[已解决]宏定义

[复制链接]
发表于 2023-4-12 21:16:08 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
#define swat(t,a,b) t=a;a=b;b=t;
      void main()
       {
           int x=6,y=4,z=3,s=0;
           if(x<y) swat(s,x,y);
           if(x<z) swat(s,x,z);
           if(y<z) swat(s,y,z);
           printf("%d,%d,%d\n",x,y,z);
       }
这个输出结果怎么得到的3 0 0 我只能得出来6 4 3 三个if均不成立应该不执行才对呀
最佳答案
2023-4-12 21:16:50
本帖最后由 isdkz 于 2023-4-12 21:18 编辑

这个代码中的输出结果应该是6, 4, 3,而不是3, 0, 0。让我们逐步分析这段代码:

  • 定义了一个宏swat,它接收三个参数t、a、b,然后交换a和b的值,将a的值存入t。
  • 主函数开始,定义了四个整数变量x、y、z、s,分别赋值为6、4、3、0。
  • 第一个if语句判断x是否小于y,即6是否小于4,条件不成立,所以不执行交换操作。
  • 第二个if语句判断x是否小于z,即6是否小于3,条件不成立,所以不执行交换操作。
  • 第三个if语句判断y是否小于z,即4是否小于3,条件不成立,所以不执行交换操作。


由于三个if语句都没有执行,x、y和z的值分别保持在6、4和3。因此,输出结果应该是6, 4, 3。这个代码的目的是对三个数进行排序,但实际上它没有正确实现排序功能,所以结果不会有变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-12 21:16:50 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-4-12 21:18 编辑

这个代码中的输出结果应该是6, 4, 3,而不是3, 0, 0。让我们逐步分析这段代码:

  • 定义了一个宏swat,它接收三个参数t、a、b,然后交换a和b的值,将a的值存入t。
  • 主函数开始,定义了四个整数变量x、y、z、s,分别赋值为6、4、3、0。
  • 第一个if语句判断x是否小于y,即6是否小于4,条件不成立,所以不执行交换操作。
  • 第二个if语句判断x是否小于z,即6是否小于3,条件不成立,所以不执行交换操作。
  • 第三个if语句判断y是否小于z,即4是否小于3,条件不成立,所以不执行交换操作。


由于三个if语句都没有执行,x、y和z的值分别保持在6、4和3。因此,输出结果应该是6, 4, 3。这个代码的目的是对三个数进行排序,但实际上它没有正确实现排序功能,所以结果不会有变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-12 21:22:10 | 显示全部楼层
根据代码,假设swat是宏定义,那么在这个代码中会被替换成以下内容:
s=x;x=y;y=s;

因此,根据条件语句中的比较运算符,在执行第一个if语句后,x和y之间的值将被交换。最终输出结果为3 0 0 的原因是变量s的初始值为0,并没有打印出来。

具体地说,代码的执行顺序如下:

1. 变量x被初始化为6,变量y被初始化为4,变量z被初始化为3,变量s被初始化为0。
2. 第一个if语句检查x是否小于y,结果为假,所以不执行swat操作。
3. 第二个if语句检查x是否小于z,结果为假,所以不执行swat操作。
4. 第三个if语句检查y是否小于z,结果为假,所以不执行swat操作。
5. 最终输出变量x、y和z的值,即6、4和3。变量s的值未被打印出来。

因此,输出结果应该是6 4 3,而不是3 0 0。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 10:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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