(数据结构)表达式求值(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)/33+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)↵
(23)/(52)↵
10-(80-30)/33+4↵
(((2+8)*2-(2+4)/2)2-8)2↵
(((8+2)(4/2)))↵
10/0↵
(10-802↵
期待输出:
-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] =
{
{
'>','>','<','<','<','>','>','<','<'},
{
'>','>','<','<','<','>','>','<','<'},
{
'>','>','>','>','<','>','>','<','>'},
{
'>','>','>','>','<','>',