C 流行音乐;推减除法
我正在读K&R的C编程。所以,我遇到了pop&push。将某物推到堆栈上,然后从堆栈中弹出某物。本书中的计算器程序通常将两个弹出值相加、相乘,但问题出现在后面的情况下,即减法和除法。我读了这本书的解释。然而,这在我的脑海中产生了一点模糊。将弹出的值存储到另一个变量中有什么用,该值仍然保持不变。不是吗 我还有一个与主题无关的疑问:如果一个“0”的ASCII值为48,如果我们键入“8”。这两个字符的值不相同。那么,除了“0”之外,第一种情况在“1”到“9”之间的任何数字中都是真的C 流行音乐;推减除法,c,stack,switch-statement,C,Stack,Switch Statement,我正在读K&R的C编程。所以,我遇到了pop&push。将某物推到堆栈上,然后从堆栈中弹出某物。本书中的计算器程序通常将两个弹出值相加、相乘,但问题出现在后面的情况下,即减法和除法。我读了这本书的解释。然而,这在我的脑海中产生了一点模糊。将弹出的值存储到另一个变量中有什么用,该值仍然保持不变。不是吗 我还有一个与主题无关的疑问:如果一个“0”的ASCII值为48,如果我们键入“8”。这两个字符的值不相同。那么,除了“0”之外,第一种情况在“1”到“9”之间的任何数字中都是真的 #include
#include <stdio.h>
#include <stdlib.h>
#define MAXOP 100 /* max size of the operand & operator */
#define NUMBER '0' /* signal that a number was found */
int getop(char []);
void push(double);
double pop(void);
/*reverse polish calculator*/
main()
{
int type;
double op2;
char s[MAXOP];
while((type= getop(s)) != EOF) {
switch (type) {
case NUMBER : <------- case 1 '0' how would this case run if other than '0' ?
push(atof(s));
break;
case '+':
push(pop() + pop());
break;
case'*':
push(pop() * pop());
break;
case '-':
op2= pop();
push(pop() - op2);
break;
case '/':
op2= pop();
push(pop() / op2);
break;
/* there are printf statements and default statements so not writing those */
}
}
return 0;
}
#包括
#包括
#定义MAXOP 100/*操作数和运算符的最大大小*/
#定义数字“0”/*表示找到数字*/
int-getop(char[]);
空推(双);
双重弹出(无效);
/*反向抛光计算器*/
main()
{
int型;
双op2;
chars[MAXOP];
而((type=getop(s))!=EOF){
开关(类型){
案例编号:C标准没有规定算术操作数的求值顺序。因此,赋值是为了保证对非交换运算符-
和\
执行POP的顺序。对于交换运算符+
和*
,POP的顺序无关紧要,因此更简洁的代码肯定会起作用
关于NUMBER
的问题,您必须学习getop()的代码
。毫无疑问,如果在输入中发现任何数字,无论该数字是什么,它都会返回'0'
。这意味着如果从堆栈中取出3和4。我们必须将其中一个操作数赋给某个变量。这样我们就可以确保符号是负的或正的,即3-4=-1或4-3=1。是的。我们必须确保在nt来计算3-4
这实际上是计算出来的,不是偶然的4-3
。我搜索了很多,但找不到getop()用法…每次我搜索getop()时,我都会在谷歌上得到getopt()结果。@Gene你能告诉我在哪里可以阅读关于getop()的内容吗?getop是您正在学习的程序中的一个函数。它不是一个标准函数。oihh我看到了,我得到了它