www.zhnq.net > #inCluDE<stDio.h> #DEFinE M(x,y,z) x*y+z mAi...

#inCluDE<stDio.h> #DEFinE M(x,y,z) x*y+z mAi...

M(a+b,b+c,c+a) 等价于 a+b*b+c+c+a = 1+2*2+3+3+1 = 12 就是把a+b b+c c+a 替换进 x*y+z

M(x,y,z) x*y+zx:a+b=1+2y:b+c=2+3z:c+a=3+1代入 x*y+z=1+2*2+3+3+1=12.没问题.注意在预编译部分题目怎么写的,你就按照他写的格式直接把数代入就行了,不能给题目加括号.M(x,y,z)和M((x),(y),(z))是不一样的.

[图文] 有以下程序#include "stdio.h"#define M(x,y) (x)*(y) #define N(x,y) (x)/(y) main(){ int a=5,b=6,c=8,k; k=N(M(a,b),c); printf("%d\n",k);} 程序的运行结果是A.3 B.5C.6 D.8

兄弟,请注意排版呀,而且代码有错吧?不知道你想问的是什么问题.代码排版如下,我修改了下:1,最后的左大括号改成了右括号.2,main前面加了个void.3,for循环后面没有语句执行就得加分号.#include <stdio.h> #define M(x,y) (x*y) void main() { int m; for(m=1;m<10;m++) ;}

m=x+y+z=10;应该是int m;

答案是7和5a应该没问题,问题在z吧要注意的是#define z y*x/2并不是把y=6,x=5直接代入计算而是要把y=x+1整体代入也就是z=x+1*x/2(而且这里的x+1没有括号)然后把x=5代入,得到z=5+2=7

这是宏替换的特点!宏替换是在编译时,将源程序中与宏定义符合的代码进行“傻瓜”式替换.如:#define MAX(x,y,z) x*(y)+z printf("%d/n", MAX(a+b.b+c,c+a) ); 在编译时替换成printf("%d/n", a+b*(b+c)+c+a ); 而#define MAX(x,y,z) x*y+z printf("%d/n", MAX(a+b.b+c,c+a) ); 在编译时替换成printf("%d/n", a+b*b+c+c+a ); 可见两个表达式在编译后的结果是不同的,因而结果不同!

#define SUB(X,Y) (X+1)*Y先更正一下,这里应该是define而不是include,宏定义.a++和b++是后置加的单目运算,会在printf语句执行后再完成+1,也就是printf输出的是3和4,之后a、b编程4和5.因为SUB是宏,这里没有参与运行顺序的问题,因为宏是在编译前替换的,如果SUB是函数,那么顺序是SUB -> printf -> a++,b++

相关搜索:

网站地图

All rights reserved Powered by www.zhnq.net

copyright ©right 2010-2021。
www.zhnq.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com