Chỉ thị #if BIEUTHUC của C yêu cầu BIEUTHUC là một biểu thức hằng nguyên được định giá tại thời điểm tiền xử lý. Cho một tập m macro đã được định nghĩa, mỗi macro gắn với một giá trị nguyên (có thể âm), hãy định giá q biểu thức dạng này.
Biểu thức chỉ gồm các thành phần sau (các token trong biểu thức luôn được phân tách bởi đúng một khoảng trắng — kể cả dấu ngoặc):
- phía trước, coi như một token riêng biệt hoặc là toán tử một ngôi);defined ( NAME ) hoặc defined NAME: cho giá trị 1 nếu NAME có trong tập macro đã cho (bất kể giá trị của nó là gì, kể cả 0), ngược lại 0;! (phủ định logic), -, +;||, &&, == !=, < > <= >=, + -, * / %;( ) để nhóm.Phép chia / và phép chia lấy dư % thực hiện theo kiểu C với số nguyên: thương làm tròn về 0 (ví dụ −7/2=−3), và a%b thoả a=(a/b)⋅b+(a%b) với phần dư luôn cùng dấu với a (hoặc bằng 0). Đề bảo đảm không có phép chia cho 0.
Một biểu thức được coi là đúng (TRUE) nếu giá trị của nó khác 0, và sai (FALSE) nếu bằng 0.
Dòng đầu tiên chứa số nguyên m (0≤m≤50) — số macro đã định nghĩa.
m dòng tiếp theo, mỗi dòng gồm NAME VALUE (NAME là tên macro, VALUE là số nguyên, cách nhau một khoảng trắng).
Dòng tiếp theo chứa số nguyên q (1≤q≤50) — số biểu thức cần định giá.
q dòng tiếp theo, mỗi dòng là một biểu thức mà mọi token (số, tên macro, defined, (, ), toán tử) đều cách nhau bởi đúng một khoảng trắng.
In ra q dòng, mỗi dòng là TRUE nếu biểu thức tương ứng khác 0, hoặc FALSE nếu bằng 0.
Ví dụ:
Đầu vào:
3
A 1
B 0
C -3
4
A && B
A || B
A + C
( A + C ) * 2
Đầu ra:
FALSE
TRUE
TRUE
TRUE
Đầu vào:
2
A 5
B 0
3
defined ( A )
defined ( C )
! defined ( B )
Đầu ra:
TRUE
FALSE
FALSE
Đang tải editor...