Square使用define指令不起作用

时间:2015-05-10 07:33:07

标签: c perfect-square

我实现了一个平方定义指令:

#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次幂而不是第二次输入功率?

4 个答案:

答案 0 :(得分:2)

你正在对它进行两次。

在您的代码中:

a = SQR(a);
printf("The square is: %d\n",SQR(a));
  1. 首先制作a = a*a

  2. 现在您打印SQR((a*a)*(a*a))a*a*a*a

  3. 您可以使用替换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作为答案。