以下程序的输出结果是 #define MIN(x, y) (x) < (y) ? (x) : (y) main() { int i , j, k; i = 10; j = 15;
答案给的是15啊怎么回事呢我是初学者吗,马上要考试了哪位大神给解释下啊以下程序的输出结果是#defineMIN(x,y)(x)<(y)?(x):(y)main(){int...
答案给的是15啊 怎么回事呢 我是初学者吗,马上要考试了 哪位大神给解释下啊
以下程序的输出结果是
#define MIN(x, y) (x) < (y) ? (x) : (y)
main()
{ int i , j, k;
i = 10; j = 15;
k = 10 * MIN(i, j);
printf(“%d\n”, k);
}
A、10
B、150
C、15
D、100 展开
以下程序的输出结果是
#define MIN(x, y) (x) < (y) ? (x) : (y)
main()
{ int i , j, k;
i = 10; j = 15;
k = 10 * MIN(i, j);
printf(“%d\n”, k);
}
A、10
B、150
C、15
D、100 展开
8个回答
展开全部
结果为15。
程序的第一行进行带参宏定义,用宏名MIN表示条件表达式(x) < (y) ? (x) : (y) ,形参x,y均出现在条件表达式中。程序中 MIN(i,j) 为宏调用,实参i,j,将代换形参x,y。
宏展开后该语句为: 10*(i) < (j) ? (i) : (j),运算结束的结果为15。
宏只是做了简单的替换操作。而函数的参数只在函数调用时求值一次,并将结果传递给函数即可。
define,无参宏定义的一般形式为:#define 标识符 字符串
define 函数定义一个常量。
常量类似变量,不同之处在于:
在设定以后,常量的值无法更改。
扩展资料:
对于宏定义还要说明以下几点:
1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。
2.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
3.宏定义其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。
参考资料:
推荐于2018-02-28
展开全部
宏定义最重要的就是要把握原样代入的原则,不要主观的加括号
#define MIN(x, y) (x) < (y) ? (x) : (y)
所以:
10 * MIN(i, j)
=10*i<j?i:j
注意现在10*i被结合了,将i = 10; j = 15代入,变成:
=10*10<15?10:15
=100<15?10:15
由于100<15为假,所以k=15
#define MIN(x, y) (x) < (y) ? (x) : (y)
所以:
10 * MIN(i, j)
=10*i<j?i:j
注意现在10*i被结合了,将i = 10; j = 15代入,变成:
=10*10<15?10:15
=100<15?10:15
由于100<15为假,所以k=15
更多追问追答
追问
大侠 能加你Q吗 我还有好多问题啊.....
追答
在加班了,不能Q~~
你直接起帖吧,现在回答的人多
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你要明白#define MIN(x,y) (x)<(y)?(x):(y).的意思,这是一个带参数的宏定义,起作用就是一个简单的替换。其次你要明白 ? :是一个三目运算符。问号前面的表达式为真的话表达式的值就是?后面的值,要是假的话就是:后面的值。所以有:
k=10*MIN(j,k)=10*MIN(10,15)=10*10<15?10:15=15
k=10*MIN(j,k)=10*MIN(10,15)=10*10<15?10:15=15
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我被绕进去了半个多小时,终于清醒了,答案是15.
关键在 (x) < (y) ? (x) : (y)
对MIN(x,y)进行宏定义的时候,保险起见,应该写成((x)<(y)?(x):(y))。为什么外面再加个大括号呢,我一开始算的时候就是按照10小于15成立,所以MIN(i,j)等于i等于10,所以k=100。但是这是外面加了个大括号才这么算的。没加的话,就是这道题,结果就是k=10*x<y?x:y;即k=10*i<j?i:j,先计算乘法,k=100<15?10:15,也就是说100<15不成立,所以k=j=15。
所以宏定义的时候最外面有没有大括号很关键。
关键在 (x) < (y) ? (x) : (y)
对MIN(x,y)进行宏定义的时候,保险起见,应该写成((x)<(y)?(x):(y))。为什么外面再加个大括号呢,我一开始算的时候就是按照10小于15成立,所以MIN(i,j)等于i等于10,所以k=100。但是这是外面加了个大括号才这么算的。没加的话,就是这道题,结果就是k=10*x<y?x:y;即k=10*i<j?i:j,先计算乘法,k=100<15?10:15,也就是说100<15不成立,所以k=j=15。
所以宏定义的时候最外面有没有大括号很关键。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
宏定义是按字符串完全展开。完全的字符串替换。
所以k = 10 * MIN(i, j);
展开是:k=10*(i) < (j) ? (i) : (j);
i是10,10*i 是100,
100<15,是假,所以k=j 所以是15.
所以k = 10 * MIN(i, j);
展开是:k=10*(i) < (j) ? (i) : (j);
i是10,10*i 是100,
100<15,是假,所以k=j 所以是15.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询