求解一道C语言题,程序如下
#include<stdio.h>#defineMAX(A,B)A>B?A:B#defineMIN(A,B)A<B?A:Bvoidmain(){inta,b,c,d,t;...
#include <stdio.h>
#define MAX(A,B) A>B?A:B
#define MIN(A,B) A<B?A:B
void main()
{ int a,b,c,d,t;
a=1;b=2;c=3;d=4;
t=MAX(a,b)+MIN(c,d);
printf("t=%d\n",t);
}
答案为什么是4,不是等于5吗,求会的帮我解答一下,谢谢。 展开
#define MAX(A,B) A>B?A:B
#define MIN(A,B) A<B?A:B
void main()
{ int a,b,c,d,t;
a=1;b=2;c=3;d=4;
t=MAX(a,b)+MIN(c,d);
printf("t=%d\n",t);
}
答案为什么是4,不是等于5吗,求会的帮我解答一下,谢谢。 展开
8个回答
展开全部
宏替换后:
t=1>2?1:2+3<核派尘羡碧4?3:4
是这改禅样组合的
t=(1>2?1:(2+3))<4?3:4
就是
t=5<4?3:4; 最后t就是4了
t=1>2?1:2+3<核派尘羡碧4?3:4
是这改禅样组合的
t=(1>2?1:(2+3))<4?3:4
就是
t=5<4?3:4; 最后t就是4了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
讲解如下:
请先看这个程序,你会发现,结果就蠢渣是5;
#include <stdio.h>
#define MAX(A,B) A>B?A:B
#define MIN(A,B) A<B?A:B
void main()
{ int a,b,c,d,t,w,q;
a=1,b=2,c=3,d=4;
t=MAX(a,b)+(MIN(c,d));//注意这儿的括号!!!//
printf("败档铅t=%d\n",t);
}但是察好,当你把,程序写成: t=MAX(a,b)+MIN(c,d);时,结果就是4,而不是5!。
请先看这个程序,你会发现,结果就蠢渣是5;
#include <stdio.h>
#define MAX(A,B) A>B?A:B
#define MIN(A,B) A<B?A:B
void main()
{ int a,b,c,d,t,w,q;
a=1,b=2,c=3,d=4;
t=MAX(a,b)+(MIN(c,d));//注意这儿的括号!!!//
printf("败档铅t=%d\n",t);
}但是察好,当你把,程序写成: t=MAX(a,b)+MIN(c,d);时,结果就是4,而不是5!。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*
宏是替换,而不是枝扰启返猛如回结果
t=MAX(a,b)+MIN(c,d);
t = (a>李码b ? a:b) + c<d ? c:d;
= ((a>b ? a:b)+c)<d ? c:d;
= ((1>2 ? 1:2)+c)<d ? c:d;
= (2+c)<d ? c:d;
= 5<4 ? 3:4
= 4
*/
宏是替换,而不是枝扰启返猛如回结果
t=MAX(a,b)+MIN(c,d);
t = (a>李码b ? a:b) + c<d ? c:d;
= ((a>b ? a:b)+c)<d ? c:d;
= ((1>2 ? 1:2)+c)<d ? c:d;
= (2+c)<d ? c:d;
= 5<4 ? 3:4
= 4
*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要迟掘明白宏定义的意思
他要做的就是简单的替换
所以
将 t=MAX(a,b)+MIN(c,d);
替换后就成了
t= a>b?a:b+c<d?c:d;
就码慧核成了
t= (a>b?a:b+c)<d?c:d;
所以就等于4了碧备
你将
#define MAX(A,B) A>B?A:B
#define MIN(A,B) A<B?A:B
改成
#define MAX(A,B) (A>B?A:B)
#define MIN(A,B) (A<B?A:B)
就等于5了
他要做的就是简单的替换
所以
将 t=MAX(a,b)+MIN(c,d);
替换后就成了
t= a>b?a:b+c<d?c:d;
就码慧核成了
t= (a>b?a:b+c)<d?c:d;
所以就等于4了碧备
你将
#define MAX(A,B) A>B?A:B
#define MIN(A,B) A<B?A:B
改成
#define MAX(A,B) (A>B?A:B)
#define MIN(A,B) (A<B?A:B)
就等于5了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
t=MAX(a,b)+MIN(c,d)被替换成:
a>b?a:b+c<d?c:d
+优先级最高,所以先运算b+c,b+c=5,
所以表达式变成笑烂巧:a>历桥b?a:5<d?c:d
a>b(1>2)为false ,所以a>b?a:5<d?c:d 返回5<d?c:d
5<d(5<4)为false; 所以5<碰键d?c:d返回d(d=4)
所以t=4;
a>b?a:b+c<d?c:d
+优先级最高,所以先运算b+c,b+c=5,
所以表达式变成笑烂巧:a>历桥b?a:5<d?c:d
a>b(1>2)为false ,所以a>b?a:5<d?c:d 返回5<d?c:d
5<d(5<4)为false; 所以5<碰键d?c:d返回d(d=4)
所以t=4;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询