资源简介
可以计算包含加减乘除的算术表达式,还可以用来计算带小数的表达式,表达式输入错误时会提示!

代码片段和文件信息
#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码表
- 下一篇:期末数电课程设计__四路智力竞赛抢答器设计
相关资源
- 数据结构年终考题范围和答案 耿国华
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
- 数据结构实验-魔王语言-源码加实验报
- 简单计算器的实现(数据结构)
- 简单计算器的实现(数据结构 修正版
- 表达式求值C 代码(附实验报告)
- Fundamentals of Data Structure in C
评论
共有 条评论