我怀疑你代码的这段有问题:
else if(ch == ')')
{
optr = MathOptr(ch);
while(!Stack1Empty(&OptrStack) && Peek1(&OptrStack)stackprecedence >= optrinputprecedence) //问题可能在这儿
Evaluate(&OpndStack, Pop1(&OptrStack));
Pop1(&OptrStack);//将栈中的左括号d出
k++;
ch = str[k];
}
你的左括号的优先级最高,所以当遇到左括号的时候,你的循环并不能退出,Evaluate还会继续计算,然而Evaluate里面的Switch语句里面没有针对'('的分支,所以你看不到任何反馈。要确定是不是这个问题,你可以在Evaluate里面填一条default语句测试一下:
void Evaluate(Stack OpndStack, DataType1 optr)//执行从运算符栈d出的运算符optr所要求的运算
{
DataType opnd1,opnd2;
opnd1 = Pop(OpndStack);
opnd2 = Pop(OpndStack);
switch(optrop)
{
case'+': Push(OpndStack, opnd1+opnd2);
break;
case'-': Push(OpndStack, opnd2-opnd1);
break;
case'': Push(OpndStack, opnd2opnd1);
break;
case'/': Push(OpndStack, opnd2/opnd1);
break;
default:
printf("Invalid operator: %c\n", optrop);
}
}
如果是这儿的问题,我相信你也知道怎么改了。
--
aka day9981
先计算a-=++a;实际上等同于a++;a-=a; (不论a之前值是多少,a-=a执行后a的值都将是0)
再将该值赋给c(注意,逗号运算优先级比赋值运算还要低),因此c的值是0
再计算a+=b,b+=4; (由于b的值仍是0,a的值不变,后面b+=4之后b的值变为4)
所以最后输出将是:0,4,0
两者都有,逻辑电路是计算机的硬件部分,程序是计算机的软件部分,在计算机系统中硬件离不开软件,软件也离不开硬件。当然,在早期的计算机系统中也许只需要逻辑电路就能完成运算,但是这种计算机系统的更新周期较长,不利于性能的提升,也不利于兼容性。而当今的计算机系统完全是在标准的架构下采用一定的程序去完成相应的工作,这也就使得计算机能被用在很多领域或设备上。我们总在说计算机的CPU(中央处理器),而这个CPU就是大规模集成的逻辑电路。所以说单个说计算机是靠软件或是逻辑电路运算的这种说法是不妥的。
不知道你要的是什么语言,为了简单,我用的是BASIC
INPUT X,Y
FOR A=8 TO INT(log X) STEP -1
PRINT " ";
NEXT A rem 为了对齐,打出8-Y的位数+1的空格
PRINT X
PRINT "×";
FOR A=7 TO INT(log Y) STEP -1
PRINT " ";
NEXT A rem 为了对齐,打出7-X的位数+1的空格。因为×占了一格
PRINT Y
PRINT "---------"
FOR A=1 TO INT(log Y)
FOR B=8-A+1 TO INT(XINT(Y-10^AINT(Y/10^A))/10^(A-1)) STEP -1 rem 中间复杂的表达式是提取Y的每位
PRINT " "; rem 还是为了对位置
PRINT INT(XINT(Y-10^AINT(Y/10^A))/10^(A-1))
NEXT B,A rem 为了对齐
FOR A= 8-XY+1 TO 1 STEP -1
PRINT " ";
NEXY A
PRINT XY
以上就是关于C语言问题——“四则运算”程序全部的内容,包括:C语言问题——“四则运算”程序、C语言程序运算、计算机运算是靠程序还是逻辑电路等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)