资源简介
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;
} //将中缀表达式转换成后缀表达式并且存入到一个字符
相关资源
- hook,捕获所有案件,查找所有窗口,
- C语言 学生兴趣管理系统
- (学习)VS2010之MFC入门到精通教程
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c++ 简易贪吃蛇源码
- c语言实现竞技比赛打分系统
- 高精度加法(c++代码)
- fluent UDF求解圆柱涡致振动问题(VIV
- KMP算法C语言程序
- C++调用百度地图案例
- LabwindowsCVI 串口编程及事例.docx
- 博巨兴mcu例程(BJ8M601A)
- 北京化工大学计算方法(C/C++)讲义
- GCC与汇编保护模式编程三
- 基于VC++的SolidWorks二次开发SolidWorks
- 2015西北大学计算机复试回忆(附机试
- 西北大学2015年计算机网络复试真题回
- 密码学 重合指数计算(IC.cpp)
- c++ 模拟鼠标按键
- VC6 USB开发源码
- OFD编辑器
- Linux c语言 学生成绩管理系统
- opencv图片扫描以及校正
- 弹跳的小球(test.c)
- 人工蜂群算法.docx
- Beginning C++17 From Novice to Professional
- C++ STL实现
- 成绩管理系统.doc
- opc ua客户端
评论
共有 条评论