资源简介
利用栈求表达式的值,可供小学生作业,并能给出分数。
要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后
的评价。
代码片段和文件信息
#include
#include
#include
int N; //定义全局变量,表示试题库试题数量
typedef struct
{
char a[100];
int result;
}Shiti; //试题数据类型
typedef struct
{
int *base*top;
int size;
}Num; //数字栈
typedef struct
{
char *base*top;
int size;
}Oper; //运算符栈
int NumInitStack(Num *S1) //构造数字栈
{
S1->base=(int *)malloc(100*sizeof(int));
if(!S1->base)
{
printf(“申请内存失败!\n“);
return 0;
}
S1->top=S1->base;
S1->size=100;
return 1;
}
int OperInitStack(Oper *S2) //构造运算符栈
{
S2->base=(char *)malloc(100*sizeof(char));
if(!S2->base)
{
printf(“申请内存失败!\n“);
return 0;
}
S2->top=S2->base;
S2->size=100;
return 1;
}
int NumGetTop(Num *S1) //得到数字栈栈顶元素
{
int e1;
if((*S1).top==(*S1).base)
return 0;
e1=*((*S1).top-1);
return e1;
}
char OperGetTop(Oper *S2) //得到运算符栈栈顶元素
{
char e2;
if((*S2).top==(*S2).base)
return 0;
e2=*((*S2).top-1);
return e2;
}
void NumPush(Num *S1int e1) //数字栈压栈
{
*(*S1).top++=e1;
}
void OperPush(Oper *S2char e2) //运算符栈压栈
{
*(*S2).top++=e2;
}
int NumPop(Num *S1) //数字栈弹栈
{
int e1;
if((*S1).top==(*S1).base)
return 0;
e1=*--(*S1).top;
return e1;
}
char OperPop(Oper *S2) //运算符栈弹栈
{
char e2;
if((*S2).top==(*S2).base)
return 0;
e2=*--(*S2).top;
return e2;
}
char Precede(char achar b) //判断运算符优先级
{
int ij;
char Table[8][8]={{‘ ‘‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘=‘}
{‘+‘‘>‘‘>‘‘<‘‘<‘‘<‘‘>‘‘>‘}
{‘-‘‘>‘‘>‘‘<‘‘<‘‘<‘‘>‘‘>‘}
{‘*‘‘>‘‘>‘‘>‘‘>‘‘<‘‘>‘‘>‘}
{‘/‘‘>‘‘>‘‘>‘‘>‘‘<‘‘>‘‘>‘}
{‘(‘‘<‘‘<‘‘<‘‘<‘‘<‘‘=‘‘ ‘}
{‘)‘‘>‘‘>‘‘>‘‘>‘‘ ‘‘>‘‘>‘}
{‘=‘‘<‘‘<‘‘<‘‘<‘‘<‘‘ ‘‘=‘}}; //优先级表格
for(i=0;i<8;i++)
if(Table[0][i]==a) //纵坐标寻找
break;
for(j=0;j<8;j++) //横坐标寻找
if(Table[j][0]==b)
break;
return Table[j][i];
}
int Operate(int achar thetaint b) //计算二元表达式的值
{
int c;
if(theta==‘+‘)
c=a+b;
else if(theta==‘-‘)
c=a-b;
else if(theta==‘*‘)
c=a*b;
else
c=a/b;
return c;
}
int IsOper(char ch) //判断字符ch是否为运算符
{
char ptr[10]={‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘=‘};
int i;
for(i=0;i<7;i++)
{
if(ch==ptr[i])
return 1;
}
return 0;
}
int Result(char a[]Num *numOper *oper) //计算表达式的结果
{
char theta;
int bdk=0i=0j=0num2=0;
NumInitStack(num); //构造数字栈
OperInitStack(oper); //构造运算符栈
OperPush(oper‘=‘); //将“=“压到栈底
while(a[i]!=‘=‘||OperGetTop(oper)!=‘=‘)
{
//对表达式a进行计算
if(a[i]>=‘0‘&&a[i]<=‘9‘)
{
//字符是数字
- 上一篇:篮球赛个人技术统计系统
- 下一篇:Linux下的简单聊天工具
相关资源
- 自建迷宫寻路
- 非常简单的C++迷宫程序,是数据结构
- 汉诺塔非递归算法 用栈 C语言
- 停车场管理系 C语言实现停车场管理
- 后缀表达式求值
- c++ 栈应用 使用标准库函数 源代码 原
- 数据结构的顺序栈的逆置和合并
- 递归和非递归解决迷宫问题
- C语言栈和队列代码实现
- 用C++栈写的中缀表达式求解
- 数据结构栈、队列、二叉树、顺序查
- 算法题《武士巡逻》的C++代码
- 基于顺序表的学生信息管理系统.cpp
- 走迷宫算法
- 二叉树遍历
- 用栈实现十进制转换成二进制(c语言
- c++用栈实现四则运算
- c++实现四则运算器源码 支持括号
- 栈实现中缀表达式到后缀表达式的转
- 表达式求值(C语言栈实现)
- c++栈操作实现,堆栈,出栈,取栈顶
- c语言实现中缀表达式转后缀并求值
- C语言:中缀算术表达式求值栈 附答案
- 栈实现迷宫
- 数据结构 C语言 迷宫问题求解 栈
- 整数小数四则运算计算器(C语言版用
- 数据结构中用栈实现迷宫问题的c++代
- 数据结构 迷宫问题 C++ 栈方法
- c语言 利用学生信息栈实现学生信息单
- 利用C++栈和队列实现回文判断
评论
共有 条评论