📄 main.cpp
字号:
#include<stdio.h>
#include<malloc.h>
#include"stack.h"
int IsOptr(char ch);
char Precede(char ch1,char ch2);
int Operate(int x,char ch,int y);//函数声明
int main()
{
LinkOptr T;
LinkOpnd N;
InitStack(&T);
PushOptr(T,'#');
InitStack(&N);
char ch;
int num2=0,op1,op2;
printf("请输入算术表达式(运算数为整数,输入#号结束输入):\n");
ch=getchar();
while(ch!='#'||GetTop1(T)!='#')
{
if(!IsOptr(ch))
{
num2=num2*10+(int(ch)-48);
PushOpnd(N,num2) ;
ch=getchar();}
else
{ num2=0; //实现分开不同的操作数
switch(Precede(GetTop1(T),ch))
{
case '<':
PushOptr(T,ch);
ch=getchar();
break;
case '=':
PopOptr(T);
ch=getchar();
break;
case '>':
op1=PopOpnd(N);
op2=PopOpnd(N);
PushOpnd(N,Operate(op2,PopOptr(T),op1));
break;
}
}
}
printf("表达式的最终结果为:\n");
printf("%5d\n",GetTop2(N));
return 0;
}
int IsOptr(char ch)
{
char ptr[10]={'+','-','*','/','(',')','#'};
for(int i=0;i<7;i++)
{
if(ch==ptr[i])
return true;
}
return false;
}//判断运算符的函数
char Precede(char ch1,char ch2)
{
if((ch1=='+'||ch1=='-'||ch1=='*'||ch1=='/'||ch1==')')&&(ch2=='+'||ch2=='-'||ch2==')'||ch2=='#'))
return '>';
else if((ch1=='('||ch1=='#')&&(ch2=='+'||ch2=='-'||ch2=='*'||ch2=='/'||ch2=='('))
return '<';
else if((ch1=='+'||ch1=='-'||ch1=='*'||ch1=='/')&&ch2=='(')
return '<';
else if((ch1=='+'||ch1=='-')&&(ch2=='*'||ch2=='/'))
return '<';
else if((ch1=='*'||ch1=='/'||ch1==')')&&(ch2=='*'||ch2=='/'))
return '>';
else if(ch1=='('&&ch2==')')
return '=';
else if(ch1=='#'&&ch2=='#')
return '=';
else
return false;
}//判断运算符的优先级
int Operate(int x,char ch,int y)
{
if(ch=='+')
return x+y;
else if(ch=='-')
return x-y;
else if(ch=='*')
return x*y;
else if(ch=='/')
return x/y;
else
return false;
}//表达式计算的的函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -