使用条件编译指令编写一个程序,将数字 56 四舍五入到最接近的 50 位

Write a program using conditional compilation directives to round off the number 56 to nearest fifties

使用条件编译指令编写一个程序,将数字 56 四舍五入到最接近的 50。

预期输出:50

哪里错了?

#include <iostream>
using namespace std;
#define R 50
int main()
{
       int Div;
       Div = R % 50;
       cout<<"Div:: "<<Div;
       printf("\n");

#if(Div<=24)
{
       int Q;
       printf("Rounding down\n");
       Q =(int(R /50))*50;
       printf("%d",Q);
}
#else
{
       int Q;
       printf("Rounding UP\n");
       Q =(int(R/50)+1)*50;
       printf("%d",Q);
}
#endif
}

Div 是一个变量,因此不能在预处理指令中求值,因为预处理发生在编译源代码之前。

由于预处理器不理解变量,因此在算术表达式中使用它时,它会为 tokenDiv 提供一个任意值 0。这意味着您的程序似乎可以正常工作。但是,如果您将 R 的值更改为 99,您会发现代码在这种情况下不起作用。

没有 Div 的版本适用于所有情况。

#define R 50

#if R % 50 <= 24
   int Q;
   printf("Rounding down\n");
   Q =(int(R /50))*50;
   printf("%d",Q);
#else
   int Q;
   printf("Rounding UP\n");
   Q =(int(R/50)+1)*50;
   printf("%d",Q);
#endif

这是一项非常非常毫无意义的任务。连尝试回答都觉得尴尬。

解释家庭作业任务的唯一有意义的方法是以 56 为例,并要求任何给定整数的编译时常量结果。 使用条件编译指令唯一有意义的方法是也考虑负数。

#ifndef NUMBER
#define NUMBER  56
#endif
#if NUMBER < 0
#define ROUNDED (NUMBER-25)/50*50
#else
#define ROUNDED (NUMBER+25)/50*50
#endif