• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-05
  • 语言: C/C++
  • 标签:

资源简介

带有变量的中缀表达式是常见的数学表达式。如果规定变量由长度不超过 8 个小写字母组成;end为保留字,表示程序段结束;用?表示输出指定变量的值,则可以设计出比较复杂的表达式(即一个可顺序执行语句序列)。例如,如果有如下语句段: abc=10 def=8 c=abc+def abc=abc+5-c*2 ? c ? abc end 则输出为: c=18 abc=-21 注意:为了简化编程实现,运算符只有+,-,*,/ ,%和^(指数运算),可以处理圆括号(),并假定输入的算术表达式正确。 要求:使用栈结构实现。 输入:表达式序列 输出:全部指定变量的值 表达式中的全部计算结果均为整数。如果在计算过程中出现除数为0的情况,则输出:Divide 0. 特殊情况说明: 在表达式中,如果操作数出现负数(例如-8),则要特别注意。例如: 10加-8表示为:10+-8。 10减-8表示为:10--8。

资源截图

代码片段和文件信息

#include
#include
#include
typedef struct
{
    char c[20];
    int number;
}store; 
store data[500];
typedef struct
{
   int num[500];
   int top;
}opnd;
opnd s1;
typedef struct
{
    char operate[500];
    int top;
}oper;//运算 
oper s2;
char pri[9][10]=

    “>><<<<<>>“
    “>><<<<<>>“
    “>>>><><>>“
    “>>>><><>>“
    “>>>><><>>“
    “>>>><><>>“
    “<<<<<<<= “
    “>>>>>> >>“
    “<<<<<<< =“
};
int push1(opnd sint n)
{
    s1.num[s1.top]=n;
    s1.top++;
}
int push2(oper schar c)
{      
    s2.operate[s2.top]=c;
    s2.top++;
}
int pop1(opnd s)
{
    int n;
    s1.top--;
    n=s1.num[s1.top];
    return n;
}
char pop2(oper s)
{
    char c;
    s2.top--;
    c=s2.operate[s2.top];
    return c;
}

int signswitch (char a)
{   
    char signs[]={‘+‘‘-‘‘*‘‘/‘‘^‘‘%‘‘(‘ ‘)‘‘#‘‘\0‘};
    int k=0;
    while (signs[k]!=‘\0‘&&signs[k]!=a)
        k++;
    if (signs[k]==a) return k;
    else return -1;
}
char judge(char achar b)
{
    return pri[signswitch(a)][signswitch(b)];
}
int calculate(int xint ychar a)
{
    switch(a)
    {    
    case ‘+‘: return x+y;
        case ‘-‘: return x-y;
        case ‘*‘: return x*y;
        case ‘/‘: if(y)    return x/y;
            else {printf(“Divide 0.\n“);return (12345);}
        case ‘%‘: return (long int) fmod(xy);
        case ‘^‘: if (y>=0 ) return (long int) pow(xy);
                    else       return (0);
        default:  printf(“Error No. 3\n“);
                     return 0;
    }
}
int main()
{
    char str[500]temp0[20]temp1[20]temp2[20]count;
    int i=0j=0k=0l=0flag=0sign=1num1num2sum=0result;
    push2(s2‘#‘);//运算符最底下# 
    gets(str);
    strcat(str“#“);
    while(strcmp(str“end#“))//strcmp比较两个字符串  判断是否结束 
    {
        i=0;
        j=0;
        flag=0;
        sign=1;
        sum=0;
        int len=strlen(str);
        while(str[i]!=‘#‘||s2.operate[s2.top-1]!=‘#‘)
        {
            if(flag==0)
            {
                if(str[i]>=‘a‘&&str[i]<=‘z‘)
                {    temp0[j]=str[i];j++;i++;}//存储变量 
                else if(str[i]==‘=‘)   
                {    flag=1;temp0[j]=0;j=0;i++;}
                else if(str[i]==‘?‘)
                {
                    for(k=i+2;k                    {    temp2[j]=str[k];j++;}
                    temp2[j]=0;
                    j=0;
                    i=len-1;
                    for(k=0;k                        if(strcmp(temp2data[k].c)==0)
  

评论

共有 条评论