编写程序实验两个数的加减结果的判断_①用两种分支语句编写实现任意两个数加减乘除的程序 要求在主函数中编写  ②编写一函数 查找以后各班某学生的姓名和学号 要求主函数输入相关数据,然后调用该函数,并在主...

满意答案

jdawg316

2014.07.10

采纳率:55%    等级:9

已帮助:1515人

#include

using namespace std;

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

//-----------------------------------------------------------------------------------------------

class Stack1{//定义字符栈

public:

char * base;

char * top;

int stacksize;

Stack1();

int GetTop(char &e);//取栈顶元素

int Push(char e);//压栈

int Pop(char &e);//跳栈

};

Stack1::Stack1(){

base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));

top=base;

stacksize=STACK_INIT_SIZE;

}

int Stack1::GetTop(char &e){

if (top==base) return -1;

else {e=*(top-1);return 0;}

}

int Stack1::Push(char e){

char *new_base=0;

if(top-base>=stacksize)

{

new_base=(char *)realloc(base,(stacksize+STACKINCREMENT)*sizeof(char));

if(!new_base) return -2;

else{

base=new_base;

top=base+stacksize;

stacksize+=STACKINCREMENT;}

}

*top++=e;

return 0;

}

int Stack1::Pop(char &e){

if(top==base) return -1;

e=*--top;

return 0;

}

//----------------------------------------------------------------------------------------------

class Stack2{//定义数字栈

public:

double * base;

double * top;

int stacksize;

Stack2();

int GetTop(double &e);//取栈顶元素

int Push(double e);//压栈

int Pop(double &e);//跳栈

};

Stack2::Stack2(){

base=(double *)malloc(STACK_INIT_SIZE*sizeof(double));

top=base;

stacksize=STACK_INIT_SIZE;

}

int Stack2::GetTop(double &e){

if (top==base) return -1;

e=*(top-1);return 0;

}

int Stack2::Push(double e){

double *new_base=0;

if(top-base>=stacksize)

{

new_base=(double *)realloc(base,(stacksize+STACKINCREMENT)*sizeof(double));

if(!new_base) return -2;

else{

new_base=base;

top=base+stacksize;

stacksize+=STACKINCREMENT;}

}

*top++=e;

return 0;

}

int Stack2::Pop(double &e){

if(top==base) return -1;

e=*--top;

return 0;

}

//------------------------------------------------------------------------------------------------

class Calculator{

private:

bool IsOperand(char ch);//判断ch是否是操作数

bool IsOperator(char ch);//判断ch是否是操作符

char Precede(char op1,char op2);//判断两个操作符优先级的高低

double Operate(double left,char op,double right);//执行运算left op right

int Translate(char op);//将操作符映射到行、列游标

public:

void Run();//执行表达式求值运算

};

bool Calculator::IsOperand(char ch){

if(ch>47&&ch<58) return true;

else return false;

}

bool Calculator::IsOperator(char ch){

if(ch>39&&ch<44||ch==45||ch==47||ch==61) return true;

else return false;

}

char Calculator::Precede(char op1,char op2){

int op10,op20;

op10=op20=0;

op10=Translate(op1);

op20=Translate(op2);

char OP[7][7]={'>','>','','>','>','>','','>','>','>','>','>','','>','>','>','>','>','','>','','>','>','>','e','>','>','

return OP[op10][op20];//将操作符优先级表映射到二维数组

}

double Calculator::Operate(double left,char op,double right){

switch(op)

{

case '+':return (left+right);break;

case '-':return (left-right);break;

case '*':return (left*right);break;

case '/':return (left/right);break;

}

}

int Calculator::Translate(char op){

switch(op)

{

case '+':return 0;break;

case '-':return 1;break;

case '*':return 2;break;

case '/':return 3;break;

case '(':return 4;break;

case ')':return 5;break;

case '=':return 6;break;

}

}

谢谢采纳……

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值