#define SQR(x) x*x 在执行a=++SQR(k+1)时输出结果怎么是9 (其中k=3) c语言中宏定义部分的内容

作者&投稿:貊砖 (若有异议请与网页底部的电邮联系)
执行下面的程序后,a的值是 #define SQR(X) X*X main() {int a=10,k=2,m=1; a/=SQR(k+m)/SQR(k+m);~

答案为1 经过上机得出
a=a/(K+m*k+m/k+m*k+m) //直接替换即可
即是a=a/7=10/7=1
希望能帮到你

#define 就是定义宏。
简单理解#define SQR(X) X*X ,就是告诉编译器在代码中只要遇到SQR(X)的格式就用X*X替换。比如SQR(k+m)就相当于 (k+m)*(k+m)。
定义宏的好处是,方便后期修改,多处引用,只要修改开头定义就行。

为避免出现歧义,C宏定义时必须把所有的变量及整个变量表达式都要分别用圆括号括起来,不然当变量是表达式时展开时就达不到你想要的结果。原因是你没有用括号,展开时把++SQR(k+1)扩展成了++k+1*k+1了。你看,它就等于4+1x4+1=9了……像你这里这样定义就没有问题了:
#define SQR(x) ((x)*(x))

a=++SQR(k+1) = ++k+1*k+1 = 4+4+1=9

还是宏展开的问题,改一下你的宏定义:
#define SQR(x) ((x)*(x))


长安区15193654102: c语言SQR(X) -
生朗绅丽: #define 就是定义宏.简单理解#define SQR(X) X*X ,就是告诉编译器在代码中只要遇到SQR(X)的格式就用X*X替换.比如SQR(k+m)就相当于 (k+m)*(k+m).定义宏的好处是,方便后期修改,多处引用,只要修改开头定义就行.

长安区15193654102: #define SQR(X) X*X #include void main(){ int a=16,k=2,b=4,m=1 ; a/=SQR(k+m)/SQR(k+m); pri#define SQR(X) X*X#include void main(){int a=16,k=2,b=4,m=1... -
生朗绅丽:[答案] 宏定义有替代的意思. SQR(k+m)/SQR(k+m)展开后,变成k+m*k+m/k+m*k+m,显然,这不是你想要的结果. 正确的宏定义是: #define SQR(x) (x)*(x)

长安区15193654102: 请问 #define sqr(x) x*x K=2,M=1 sqr(k+m)/sqr(k+m)为什么结果是7 -
生朗绅丽: 将宏sqr(k+m)/sqr(k+m)展开之后为k+m*k+m/k+m*k+m,即2+1*2+1/2+1*2+1,所以结果为7 通常宏#define sqr(x) x*x正确的写法是#define sqr(x) (x)*(x)

长安区15193654102: #define SQR(x) ((x)*(x)) void main(){int i=1;while(i<=5)printf("%d\n",sqr(i++));运算过程是怎样 -
生朗绅丽: 在代码中有SQR(x)的地方,都会替换为((X)*(X)),但是应该区分大小写哦.所以代码相当于:void main() { int i=1; while(i<=5) printf("%d\n",((i++)*(i++)); }

长安区15193654102: 执行下面的程序后,a的值是 #define SQR(X) X*X main() {int a=10,k=2,m=1; a/=SQR(k+m)/SQR(k+m); -
生朗绅丽: 答案为1 经过上机得出 a=a/(K+m*k+m/k+m*k+m) //直接替换即可 即是a=a/7=10/7=1 希望能帮到你

长安区15193654102: 写出下面程序执行后的运行结果. #include <stdio.h> #define SQR(X) ...
生朗绅丽: 宏定义只是单纯的替换,所以上式替换后就变成了2+1*2+1/2+1*2+1,1/2的int型结果是0,所以答案是7.宏定义是不会自己加括号的 ,所以要考虑好替换什么,在定义的时候就要加上括号,否则替换后会改变运算顺序的.

长安区15193654102: 执行下面的程序后,a的值是 -
生朗绅丽: 被骗了吧,这题很有陷阱的,答案是 B.严格地说,这是一个不规范的程序,因为:#define SQR(X) X*X 并不像我们想像的那样,因为它如果展到程序中:a /= SQR(k + m) / SQR(k + m); 其实是:a /= k + m * k + m / k + m * k + m; 注意到没有?并不是我们希望的结果,因为在 #define 中,我们没有给 X*X 加上括号!所以实际的情况,这就成了:a /= 2 + 1 * 2 + 1 / 2 + 1 * 2 + 1; 即 a /= 7; 显然结果 a 就是 1

长安区15193654102: #include<stdio.h> #define SQR(x)x*x main() { int a,k=3; a=++SQR(k+1); printf(”%d\n”,a);} -
生朗绅丽: 求满意 求赞同 宏做的事 仅仅是展开 所以看一下这句展开式怎样的 a = ++k+1*k+1; 现执行* 编程a = ++k+k+1; 然后从左至右执行 ++k k变为4 4+4+1 最后a=9 输出9

长安区15193654102: #define sqr(x) x*x main() {int s ,k=3; s=sqr(k+1); printf("%d",s); } 运行结果为什么是7 -
生朗绅丽: k+1*k+1=7 而不是(k+1)*(k+1)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网