我实现了一个平方定义指令:
#include <stdio.h>
#define SQR(y) ((y)*(y))
int main() {
int a;
printf("Enter : ");
scanf("%d",&a);
a = SQR(a);
printf("The square is: %d\n",SQR(a));
return 0;
}
但是当我执行它时,我没有得到任何错误,但它每次都给出了错误的答案。
为什么它提供4次幂而不是第二次输入功率?
答案 0 :(得分:2)
你正在对它进行两次。
在您的代码中:
a = SQR(a);
printf("The square is: %d\n",SQR(a));
首先制作a = a*a
现在您打印SQR((a*a)*(a*a))
或a*a*a*a
您可以使用或替换SQR(a)
中的printf
删除a = SQR(a)
试试这个:
#include <stdio.h>
#define SQR(y) ((y)*(y))
int main() {
int a;
printf("Enter : ");
scanf("%d",&a);
printf("The square is: %d\n",SQR(a));
return 0;
}
答案 1 :(得分:0)
因为您在代码中写了两次((a)*(a))
。
a = SQR(a); //<-- Here a = a*a
printf("The square is: %d\n",SQR(a)); //<-- and here print a*a
答案 2 :(得分:0)
你计算两次方形。你首先在这里找a
:
a = SQR(a);
然后,在printf
:
printf("The square is: %d\n",SQR(a));
通过将上述printf
替换为:
printf("The square is: %d\n", a);
答案 3 :(得分:0)
您误解了 c macro 的用法。
您的宏定义没有问题。问题在于使用方法。
a = SQR(a);
在上面一行中,您计算a
的平方并再次将结果分配给a
。因此,在上面的行执行之后,a
的值是输入值的平方。
然后在下面的行中再次调用a
上的宏。
printf("The square is: %d\n",SQR(a));
然后打印当前值a
的平方。这个价值不是你需要得到的。
例如,如果您输入2,您将获得16,但您需要4作为答案。