• 大小: 7.72KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-04-18
  • 语言: C/C++
  • 标签: c  c++  计算器  课设  计算  

资源简介

c语言编译计算器,加减程序括号

资源截图

代码片段和文件信息

/*炒鸡计算器简明实现代码*/ 
#include 
#include 
#include 
#define MaxSize 50

typedef struct
{
char elem[MaxSize];
int top;
} SepStack;
typedef struct
{
double elem1[MaxSize];
int top1;
} SepStack1;      //一个数型栈一个字符型栈 


int prior(char a)//优先级判断 
{
if(a == ‘^‘)
return 4; 
    if(a == ‘+‘ || a == ‘-‘)
        return 2;
    if(a == ‘*‘ || a == ‘/‘)
        return 3;
    if(a == ‘=‘)
     return 1;
    if(a == ‘(‘)
     return 0;
}


void init1(SepStack1* s)
{
s->top1 = -1;
}
void init(SepStack* s)
{
s->top = -1;      //完成初始化栈工作 
}


void Push1(SepStack1* s double x)
{
s->top1++;
s->elem1[s->top1] = x;
}
void Push(SepStack* s char x)
{
s->top++;
s->elem[s->top] = x;
}                   //数据入栈操作函数 



double Pop1(SepStack1* s)
{
double n =s->elem1[s->top1--];
return n;
}
void Pop(SepStack* s)
{
s->top--;
}                 //完成弹出数据操作 


double GetTop1(SepStack1* s) 
{
double x;
x = s->elem1[s->top1];
return x;
}
char GetTop(SepStack* s) 
{
char x;
x = s->elem[s->top];
return x;
}               //读栈顶元素
void GetTop2(SepStack* s char* x)
{
*x = s->elem[s->top];
}


int IsEmpty(SepStack* s)
{
if(s->top == -1)
return 1;
else
return 0;
}              //判断字符型栈是否为空 


int Match(char a char b)
{
if(a == ‘(‘ && b == ‘)‘)
return 1;
else
return 0; 
}



int PanIS(char str[] SepStack s)
{
int i;
char  x;
for(i=0; str[i] != ‘=‘; i++)
{
if(str[i] == ‘(‘)
Push(&s str[i]);
else if(str[i] == ‘)‘)
{
if(IsEmpty(&s))
break;
else
{
GetTop2(&s &x);
if(Match(x str[i]))
Pop(&s);
else
continue;
}
}
else continue;
}
if(IsEmpty(&s))
return 1;
else
return 0;
}


void Exchange(SepStack* s char str[] char str2[])//str2专门用于存放表达式用于今后判断括号是否匹配 
{
int i k=0 m=0;
char a;
scanf(“%c“ &a);
str2[m++]=a;
while(a!=‘=‘)
{
if(a>=‘0‘&&a<=‘9‘||a==‘.‘)//浮点型数据特殊考虑 
{
str[k++]=a;
scanf(“%c“ &a);
str2[m++]=a;
if((a<‘0‘||a>‘9‘)&&a!=‘.‘)
str[k++]=‘ ‘;
}
else if(a==‘(‘)
{
Push(s a);
scanf(“%c“ &a);
str2[m++]=a;

else
{

if(a==‘)‘)
{
while(GetTop(s)!=‘(‘)

str[k++]=GetTop(s);
str[k++]=‘ ‘;
Pop(s);
}
Pop(s);
}
else if(GetTop(s)==‘=‘||GetTop(s)==‘(‘)
Push(s a);
else if(prior(a)>prior(GetTop(s)))  //如果读入运算符优先级大于栈顶运算符优先级, 
Push(s a);                     //直接入栈 
else 
{
while(prior(a)<=prior(GetTop(s))) 
{
     str[k++]=GetTop(s);
     str[k++]=‘ ‘;
Pop(s);
}
Push(s a);
}
scanf(“%c“ &a);
str2[m++]=a;
}
}
while(GetTop(s)!=‘=‘)

str[k++]=GetTop(s);
str[k++]=‘ ‘;
Pop(s);
}
str[k]=0;
str2[m]=0; 
}              //将中缀表达式转换成后缀表达式并且存入到一个字符

评论

共有 条评论