这次是结对开发,这是我和同学写的代码,思路是讲字符串里的数字与符号逐渐取出,然后使用数字栈和符号栈逐渐进行调整,算出结果
代码:
// 按要求随机生成四则运算 王世强 2015/3/15 #include<iostream> #include<stdlib.h> #include<iomanip> #include<time.h> #include<stdio.h> #include"math.h" #define true 1 #define false 0 #define OPSETSIZE 7 #define random() (rand()%100000) #include"string.h" typedef int Status; using namespace std; unsigned char Prior[7][7] = { // 运算符优先级表 // '+' '-' '*' '/' '(' ')' '#' /*'+'*/'>','>','<','<','<','>','>', /*'-'*/'>','>','<','<','<','>','>', /*'*'*/'>','>','>','>','<','>','>', /*'/'*/'>','>','>','>','<','>','>', /*'('*/'<','<','<','<','<','=',' ', /*')'*/'>','>','>','>',' ','>','>', /*'#'*/'<','<','<','<','<',' ','=', }; typedef struct StackChar { char c; struct StackChar *next; }SC; //StackChar类型的结点SC typedef struct StackFloat { float f; struct StackFloat *next; }SF; //StackFloat类型的结点SF SC *Push(SC *s,char c) //SC类型的指针Push,返回p { SC *p=(SC*)malloc(sizeof(SC)); p->c=c; p->next=s; return p; } SF *Push(SF *s,float f) //SF类型的指针Push,返回p { SF *p=(SF*)malloc(sizeof(SF)); p->f=f; p->next=s; return p; } SC *Pop(SC *s) //SC类型的指针Pop { SC *q=s; s=s->next; free(q); return s; } SF *Pop(SF *s) //SF类型的指针Pop { SF *q=s; s=s->next; free(q); return s; } float Operate(float a,unsigned char theta, float b) //计算函数Operate { switch(theta) { case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': return a/b; default : return 0; } } char OPSET[OPSETSIZE]={'+','-','*','/','(',')','#'}; Status In(char Test,char *TestOp) { int Find=false; for (int i=0; i< OPSETSIZE; i++) { if(Test == TestOp[i]) Find= true; } return Find; } Status ReturnOpOrd(char op,char *TestOp) { for(int i=0; i< OPSETSIZE; i++) { if (op == TestOp[i]) return i; } } char precede(char Aop, char Bop) { return Prior[ReturnOpOrd(Aop,OPSET)][ReturnOpOrd(Bop,OPSET)]; } float EvaluateExpression(char* MyExpression) { // 算术表达式求值的算符优先算法 // 设OPTR和OPND分别为运算符栈和运算数栈,OP为运算符集合 SC *OPTR=NULL; // 运算符栈,字符元素 SF *OPND=NULL; // 运算数栈,实数元素 char TempData[20]; float Data,a,b; char theta,*c,Dr[]={'#','