题目: 在有了基本框架后,对计算器程序进行扩展就比较容易了。在该程序中加入取模(%)运算符,并注意考虑负数的情况。
自我解答:
本题的关键在于:
1. 怎么区分“-”是操作数还是符号。在逆波兰表达式中,如果-后面紧跟一个数字,则“-”代表负号;如果“-”之后没有紧跟一个数字,则“-”代表减号。例如:1 -1 + 中的“-”代表负号,1 1 -中的“-”代表减号。
2. 怎么对浮点数求%,%运算符只能用于int型数据,不能用于浮点数。参考答案中是使用了标准库math.h中的fmod函数进行的。
主要修改之处在于main和getop两个函数中:
对main函数的处理在于增加一个%运算过程
case '%':
op2 = pop();
if(op2 != 0)
push(fmod(pop(), op2));
else
printf("error: zero remainder\n");
break;
对getop函数的处理在于增加对“-”的辨别
int getop(char s[])
{
int i, c;
while((s[0] = c = getch()) == ' ' || c == '\t');
s[1] = '\0';
if(!isdigit(c) && c != '.' &&