微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用条件编译指令编写一个程序,将数字 56 舍入到最接近的 50

使用条件编译指令编写一个程序,将数字 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 是一个变量,因此不能在预处理指令中求值,因为预处理发生在编译源代码之前。

由于预处理器不理解变量,因此在算术表达式中使用它时,它会给 令牌 Div 一个任意值 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。