洞洞幺# 2024-03-27 23:35 采纳率: 66.7%
浏览 6
已结题

有没有人知道这个printf里面的max为什么等于13

img

img


这个是题目,大写MAX和小写max的宏定义都表示比较两个数的大小

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2024-03-28 10:31
    关注

    max(x++, y++) 宏替换为:((x++) > (y++) ? (x++) : (y++)) ,printf("max=%d\n", max(x++, y++)); 就替换为:printf("max=%d\n", ((x++) > (y++) ? (x++) : (y++))); 因为 ++ 后置,所以这里先比较 x > y,然后再x++,y++ 一次如:(12 > 10 ,x++, y++) ? (x++) : (y++),此时 x++后为13,y++后为11,x > y 条件成立,所以返回 (x++),先返回 x = 13 ,然后再 x++ 等于 14,而最后(y++) 这里未被执行到,所以y 仍为 11。所以下句里x = 14, y = 11。供参考:

    #include <stdio.h>
    #define MAX(A, B)  A > B ? A : B
    #define max(a, b) ((a) > (b) ? (a) : (b))
    int main()
    {
        int x = 12, y = 10, z = 15;
    
        printf("MAX2=%d\n", x > y ? x : y > y > z ? y : z > z > x ? z : x ? y > z ? y : z : z > x ? z : x ? x > y ? x : y : y > z ? y : z > z > x ? z : x ? y > z ? y : z : z > x ? z : x);
        printf("MAX=%d\n", MAX(MAX(x, y), MAX(MAX(y, z), MAX(z, x))));
        printf("max=%d\n", max(max(x, y), max(max(y, z), max(z, x))));
    
        printf("max=%d\n", max(x++, y++)); // ==>  printf("max=%d\n", ((x++) > (y++) ? (x++) : (y++)));
        printf("x=%d,y=%d", x, y);
    
        return 0;
    }
    
    

    以上代码输出:
    MAX2=12
    MAX=12
    max=15
    max=13
    x=14,y=11

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月28日
  • 已采纳回答 3月28日
  • 创建了问题 3月27日

悬赏问题

  • ¥60 db2move nlzxams import 导出db2备份数据报错
  • ¥15 关于#python#的问题:全文总结功能咨询
  • ¥15 俄罗斯方块中无法同时消除多个满行
  • ¥15 c#转安卓 java html
  • ¥15 使用gojs3.0,如何在nodeDataArray设置好text的位置,再go.TextBlock alignment中进行相应的改变
  • ¥15 psfusion图像融合指标很低
  • ¥15 银河麒麟linux系统如何修改/etc/hosts权限为777
  • ¥50 医院HIS系统代码、逻辑学习
  • ¥30 docker离线安装mysql报错,如何解决?
  • ¥15 构建工单的总账影响在哪里查询或修改