使用条件编译指令编写一个程序,将数字 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
使用条件编译指令编写一个程序,将数字 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