这个是题目,大写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本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥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 构建工单的总账影响在哪里查询或修改