资源简介
可以计算包含加减乘除的算术表达式,还可以用来计算带小数的表达式,表达式输入错误时会提示!
代码片段和文件信息
#include
#include
#include
#define Max 30
typedef struct node1 /*定义符号栈*/
{
char data[Max];
int top;
}SignSeqStack*SignPSeqStack;
typedef struct node2 /*定义数字栈*/
{
double data[Max];
int top;
}NoSeqStack*NoPSeqStack;
SignPSeqStack SInit() /*符号栈的初始化*/
{
SignPSeqStack s;
s=(SignPSeqStack)malloc(sizeof(SignSeqStack));
if(s)
s->top=-1;
return s;
}
NoPSeqStack NInit() /*数字栈的初始化*/
{
NoPSeqStack s;
s=(NoPSeqStack)malloc(sizeof(NoSeqStack));
if(s)
s->top=-1;
return s;
}
void SPush(SignPSeqStack schar x) /*符号入栈函数*/
{
if(s->top==Max-1)
{
printf(“表达式过长,不能计算!“);
return;
}
else
{
s->top++;
s->data[s->top]=x;
}
}
void NPush(NoPSeqStack sdouble x) /*数字入栈函数*/
{
if(s->top==Max-1)
{
printf(“表达式过长,不能计算!“);
return;
}
else
{
s->top++;
s->data[s->top]=x;
}
}
void SPop(SignPSeqStack Schar *x) /*符号出栈函数*/
{
if(S->top==-1)
return;
else
{
*x=S->data[S->top];
S->top--;
}
}
void NPop(NoPSeqStack Sdouble *x) /*数字出栈函数*/
{
if(S->top==-1)
return;
else
{
*x=S->data[S->top];
S->top--;
}
}
char Priority(char s1char s2) /*判断运算符优先级*/
{
int irowcol;
static char CH[7]={‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘#‘} /*运算符*/
R[7][7]={{‘>‘‘>‘‘<‘‘<‘‘<‘‘>‘‘>‘} /*运算符优先关系*/
{‘>‘‘>‘‘<‘‘<‘‘<‘‘>‘‘>‘}
{‘>‘‘>‘‘>‘‘>‘‘<‘‘>‘‘>‘}
{‘>‘‘>‘‘>‘‘>‘‘<‘‘>‘‘>‘}
{‘<‘‘<‘‘<‘‘<‘‘<‘‘=‘‘/‘}
{‘>‘‘>‘‘>‘‘>‘‘/‘‘>‘‘>‘}
{‘<‘‘<‘‘<‘‘<‘‘<‘‘<‘‘<‘}};
for(i=0;i<7;i++)
if(CH[i]==s1)
{
row=i;
break;
}
for(i=0;i<7;i++)
if(CH[i]==s2)
{
col=i;
break;
}
if(col<7&&row<7)
return (R[row][col]);
else
return ‘/‘;
}
void Symbol(char *chint *mSignPSeqStack SNoPSeqStack N);
void Digital(char *chint *mNoPSeqStack NSignPSeqStack S) /*数字处理函数*/
{
int flag=0;
int a=0; /*a用于存放数字的整数部分*/
double b=0.0e=0.1; /*b用于存放数字的小数部分*/
if(ch[*m]==‘-‘)
{
if(!(*m==0||ch[*m-1]==‘(‘)) /*判断“-”是负号还是减号*/
{
Symbol(chmSN); /*是减号,处理*/
return;
}
else
{
flag=1; /*flag=1表示有负号*/
(*m)++;
}
}
for(;ch[*m]>=‘0‘&&ch[*m]<=‘9‘;(*m)++) /*处理整数部分*/
{
a*=10;
a+=ch[*m]-‘0‘;
}
if(ch[*m]==‘.‘) /*判断有没有小数*/
for(++(*m);ch[*m]>=‘0‘&&ch[*m]<=‘9‘;(*m)++) /*处理小数部分*/
{
double d;
d=double(ch[*m]-‘0‘);
d*=e;
e*=0.1;
b+=d;
}
(*m)--;
if(flag==1) /*是负数,将负数入栈*/
NPush(N0.0-(a+b));
else
NPush(Na+b);
}
void Symbol(char *chint *mSignPSeqStack SNoPSeqStack N) /*符号处理函数*/
{
double abc;
int i=*m;
char xy;
y=Priority(S->data[S->top]ch[i]);
if(y==‘/‘) /*处理符号*/
{
printf(“你输入的表达式不合法!将导致计算错误!“);
return ;
}
else if(y==‘<‘)
{
SPush(Sch[i]);
return;
}
else if(y==‘=‘)
{
SPop(S&x);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 50176 2008-03-25 23:21 表达式求值\表达式求值.ncb
文件 53248 2008-03-25 23:20 表达式求值\Debug\vc60.pdb
文件 208986 2008-03-25 23:21 表达式求值\Debug\表达式求值.exe
文件 467968 2008-03-25 23:21 表达式求值\Debug\表达式求值.pdb
文件 12794 2008-03-25 23:20 表达式求值\Debug\表达式求值.obj
文件 254 2008-03-25 23:21 表达式求值\表达式求值.plg
文件 4334 2008-01-11 14:48 表达式求值\表达式求值.cpp
文件 3451 2008-03-25 23:20 表达式求值\表达式求值.dsp
文件 48640 2008-03-25 23:21 表达式求值\表达式求值.opt
文件 528 2008-03-25 23:21 表达式求值\表达式求值.dsw
目录 0 2008-01-10 19:42 表达式求值\Debug
目录 0 2008-01-10 19:42 表达式求值
----------- --------- ---------- ----- ----
850379 12
- 上一篇:ASCII码表ASCII码表
- 下一篇:期末数电课程设计__四路智力竞赛抢答器设计
相关资源
- 数据结构 栈 表达式求值
- b3dm格式数据结构说明
- 数据结构课程设计二叉树的非递归遍
- 约瑟夫环实习报告:编号为1,2……,
- 严蔚敏《数据结构》教材各章完整源
- 数据结构严慰民配套纯C代码数据结构
- 火车车厢重排列问题 堆栈解决
- 山东大学数据结构课设箱子装箱问题
- 数据结构课设——教学计划编制问题
- 北邮数据结构实验代码及报告
- 数据结构课程设计报告电表计费系统
- 南昌航空大学数据结构试验代码
- 2014燕山大学数据结构平时实验报告
- 二叉树三种遍历动画演示
- 数据结构课程设计建立词索引表
- 数据结构做的员工管理系统
- 校园网布线方案数据结构课程设计
- 数据结构 简单的目录管理系统
- 数据结构长整数课程设计
- 学生管理系统 根据数据结构的链表知
- 哈工大_数据结构与算法视频教程48集
- 数据结构 教学编制计划
- 数据结构张琨版课后习题答案
- C数据结构最小生成树的构造
- 全国交通咨询模拟数据结构课程设计
- 数据结构 停车场问题
- 数据结构二叉树家谱管理系统
- 数据结构关于二叉树的各种算法
- 数据结构课程设计——压缩软件Huff
- 数据结构-B树的完整实现
评论
共有 条评论