(数据结构)表达式求值(1)

这篇博客介绍了一个C++实现的表达式求值算法,支持加、减、乘、除、取余、乘方及括号运算。文章通过多个测试用例展示了算法的正确性和处理除数为0、负数等特殊情况的能力。错误输入和非法表达式也会返回相应的错误信息。
摘要由CSDN通过智能技术生成

(数据结构)表达式求值(1)

背景:
我们的教材中已经介绍了表达式求值的算法,现在我们将该算法的功能进行扩展,要求可以处理的运算符包括:+、-、*、/、%(整数取余)、^(乘方)、(、)。
要求:
采用算符优先算法,计算的中间结果只保留整数。
输入:
第一行为整数N。表示下面有N个表达式
从第二行起的后面N行为N个由整数构成的表达式
输出:
共N行,每行为相应表达式的计算结果。
如果判断出表达式有错误,则输出:error.
如果在计算过程中出现除数为0的情况,则输出:Divide 0.
特殊情况说明:
在表达式中,如果操作数出现负数(例如-8),则要特别注意。例如:
10加-8表示为:10±8。
10减-8表示为:10–8。

测试用例1:

测试输入:

4↵
2^3↵
2^0↵
2^ 3 ^2↵
2 ^ (3-1)^(10-8)↵

期待输出:

8↵
1↵
512↵
16↵

测试用例2:

测试输入:

11↵
(2+8↵
2+8)↵
8/0↵
8/(8+5-13)↵
2^(2-5)↵
10-(80-30(/33+4↵
10-80-30)/3
3+4↵
(2+8)(3+2)↵
(2)3(8)↵
30(/3+3)+4↵
10(20-8)+2↵

期待输出:

error.↵
error.↵
Divide 0.↵
Divide 0.↵
error.↵
error.↵
error.↵
error.↵
error.↵
error.↵
error.↵

测试用例3:

测试输入:

2↵
10(10)↵
14*10-(10)2↵

期待输出:

error.↵
error.↵

测试用例4:

测试输入:

14↵
18-32↵
18/4↵
18%3↵
10+204↵
10-20/4↵
(18-3)3↵
10
(10)↵
(10+2)/(8-10)↵
(2
3)/(52)↵
10-(80-30)/3
3+4↵
(((2+8)*2-(2+4)/2)2-8)2↵
(((8+2)
(4/2)))↵
10/0↵
(10-80
2↵

期待输出:

-14↵
4↵
0↵
90↵
5↵
45↵
100↵
-6↵
0↵
-34↵
52↵
20↵
Divide 0.↵
error.↵

代码如下:

#include<stdio.h>    
#include<string.h>    
#include<math.h>    
#define MAX 10000000    
  
int fig[100];  
char sym[100];  
int temp1 = -1, temp2 = -1;  
char op[9] = {
   '+','-','*','/','(',')','#','^','%'};  
char checklist[9][9] =   
{
     
    {
   '>','>','<','<','<','>','>','<','<'},  
    {
   '>','>','<','<','<','>','>','<','<'},  
    {
   '>','>','>','>','<','>','>','<','>'},  
    {
   '>&#
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值