作业帮 > 综合 > 作业

#define SQR(X) X*X main() { int a=16,k=2,m=1; a/=SQR(k+m)/SQ

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/27 16:18:06
#define SQR(X) X*X main() { int a=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf("%d",a) ; } 结果2
#define SQR(X) X*X main() { int a=16,k=2,m=1; a/=SQR(k+m)/SQ
#define SQR(X) X*X 这样定义有问题
改成这样:
#define SQR(X) (X)*(X)
不然编译时会把SQR(k+m) 转成 k+m*k+m.与你的想法不一致了
再问: 谢谢你,可是改成这样: #define SQR(X) (X)*(X) 那a/=SQR(k+m)/SQR(k+m); 又按什么顺序计算呢
再答: a/=SQR(k+m)/SQR(k+m); 这条语句在编译时,会转换成这样: a/=(k+m)*(k+m)/(k+m)*(k+m); 这里的运算情况就会产生歧义,有可能根据编译器的不同,结果会不一样。 因此,在写程序时,我们一定要避免这种情况出现,如果你想先算SQR(k+m),就这样定义宏: #define SQR(X) ((X)*(X)) 如果你想先运算SQR(k+m)/SQR(k+m),就这样写:a/=(SQR(k+m)/SQR(k+m)) 养成一个良好的写程序的习惯,不要把不确定的事交给计算机!!不然在应用中会吃尽苦头!