Poll: Kiểm tra kiến thức C - 2.8

Các bạn thảo luận đáp án nhé, bài test lấy từ http://www.indiabix.com/online-test/c-programming-test/12
8.What will be the output of the program?

#include<stdio.h>
#define SQR(x)(x*x)

int main()
{
    int a, b=3;
    a = SQR(b+2);
    printf("%d\n", a);
    return 0;
}
  • A. 25
  • B. 11
  • C. Error
  • D. Garbage value
1 Like

Có ai giải thích cho mình sao ra được đáp án như vậy không?

1 Like

Cái này là một lỗi nhiều bạn mới sử dụng macro hay bị.
#define SQR(x) (x*x) cho nên SQR(b+2) sẽ được phân tích ra như sau

b+2*b+2

mà trong đó b=3 nên sẽ thành

3+2*3+2

Đáp án là 11.

Cách để tránh xảy ra lỗi này ta thêm dấu ngoặc nữa. Sửa #define SQR(x) (x*x) thành

 #define SQR(x) (x)*(x)

Khi đó ta sẽ có

(3+2)*(3+2)
2 Likes

ra vậy, e tính ra 25 -_-

1 Like

Cũng có bạn tính ra 25 mà, câu này là một câu cơ bản mà đi phỏng vấn người ta hay hỏi lắm.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?