资源简介
[问题描述]
一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。
[基本要求]
(1) 从键盘读入一个合法的算术表达式,输出正确的结果。
(2) 显示输入序列和栈的变化过程。
[选作内容]
(1) 扩充运算符集合。
(2) 引入变量操作数。
(3) 操作数类型扩充到实数。

代码片段和文件信息
#include
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define Stack_Size 50
char ops[7]={‘+‘‘-‘‘*‘‘/‘‘(‘‘)‘‘#‘}; /*运算符数组*/
int cmp[7][7]={{2211122} /*用来进行比较运算符优先级的矩阵3代表‘=‘2代表‘>‘1代表‘<‘0代表不可比*/
{2211122}
{2222122}
{2222122}
{1111130}
{2222022}
{1111103}};
typedef struct
{
char elem[Stack_Size];
int top;
}SeqStack; /*运算符栈的定义*/
typedef struct
{
int elem[Stack_Size];
int top;
}nSeqStack; /* 运算数栈的定义*/
void InitStack(SeqStack *S) /*初始化运算符栈*/
{
S->top =-1;
}
void InitStackn(nSeqStack *S) /*初始化运算数栈*/
{
S->top =-1;
}
int IsEmpty(SeqStack *S) /*判断栈S为空栈时返回值为真,反之为假*/
{
return(S->top==-1?TRUE:FALSE);
}
int IsEmptyn(nSeqStack *S) /*判断栈S为空栈时返回值为真,反之为假*/
{
return(S->top==-1?TRUE:FALSE);
}
/*判栈满*/
int IsFull(SeqStack *S) /*判断栈S为满栈时返回值为真,反之为假*/
{
return(S->top==Stack_Size-1?TRUE:FALSE);
}
int IsFulln(nSeqStack *S) /*判断栈S为满栈时返回值为真,反之为假*/
{
return(S->top==Stack_Size-1?TRUE:FALSE);
}
int Push(SeqStack *S char x) /*运算符栈入栈函数*/
{
if (S->top==Stack_Size-1)
{
printf(“Stack is full!\n“);
return FALSE;
}
else
{
S->top++;
S->elem[S->top]=x;
return TRUE;
}
}
int Pushn(nSeqStack *S int x) /*运算数栈入栈函数*/
{
if (S->top==Stack_Size-1)
{
printf(“Stack is full!\n“);
return FALSE;
}
else
{
S->top++;
S->elem[S->top]=x;
return TRUE;
}
}
int Pop(SeqStack *S char *x) /*运算符栈出栈函数*/
{
if (S->top==-1)
{
printf(“运算符栈空!\n“);
return FALSE;
}
else
{
*x=S->elem[S->top];
S->top--;
return TRUE;
}
}
int Popn(nSeqStack *S int *x) /*运算数栈出栈函数*/
{
if (S->top==-1)
{
printf(“运算符栈空!\n“);
return FALSE;
}
else
{
*x=S->elem[S->top];
S->top--;
return TRUE;
}
}
char GetTop(SeqStack *S) /*运算符栈取栈顶元素函数*/
{
if (S->top ==-1)
{
printf(“运算符栈为空!\n“);
return FALSE;
}
else
{
return (S->elem[S->top]);
}
}
int GetTopn(nSeqStack *S) /*运算数栈取栈顶元素函数*/
{
if (S->top ==-1)
{
printf(“运算符栈为空!\n“);
return FALSE;
}
else
{
return (S->elem[S->top]);
}
}
int Isoperator(char ch) /*判断输入字符是否为运算符函数是返回TRUE不是返回FALSE*/
{
int i;
for (i=0;i<7;i++)
{
if(ch==ops[i])
return TRUE;
}
return FALSE;
}
/*
int isvariable(char ch)
{ if (ch>=‘a‘&&ch<=‘z‘)
return true;
else
return false;
}*/
char Compare(char ch1 char ch2) /*比较运算符优先级函数*/
{
int imn;
char pri;
int priority;
for(i=0;i<7;i++) /*找到相比较的两个运算符在比较矩阵里的相对位置*/
{
if(ch1==ops[i])
m=i;
if (ch2==ops[i])
n=i;
}
priority = cmp[m][n];
switch(priority)
{
case 1:
pri=‘<‘;
break;
case 2:
pri=‘>‘;
break;
case 3:
pri=‘=‘;
break;
case
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 159799 2005-06-06 17:21 表达式求值_课程设计\Debug\ex
文件 167416 2005-06-06 17:21 表达式求值_课程设计\Debug\ex
文件 14684 2005-06-06 17:21 表达式求值_课程设计\Debug\ex
文件 210892 2005-06-06 17:21 表达式求值_课程设计\Debug\ex
文件 328704 2005-06-06 17:21 表达式求值_课程设计\Debug\ex
文件 41984 2005-06-06 17:21 表达式求值_课程设计\Debug\vc60.idb
文件 53248 2005-06-06 17:21 表达式求值_课程设计\Debug\vc60.pdb
文件 159799 2005-06-06 17:18 表达式求值_课程设计\Debug\表达式求值.exe
文件 183292 2005-06-06 17:18 表达式求值_课程设计\Debug\表达式求值.ilk
文件 14630 2005-06-06 17:18 表达式求值_课程设计\Debug\表达式求值.obj
文件 181644 2005-06-06 15:02 表达式求值_课程设计\Debug\表达式求值.pch
文件 451584 2005-06-06 17:18 表达式求值_课程设计\Debug\表达式求值.pdb
文件 4904 2005-06-06 17:19 表达式求值_课程设计\ex
文件 3447 2005-06-06 17:21 表达式求值_课程设计\ex
文件 545 2005-06-06 17:21 表达式求值_课程设计\ex
文件 33792 2005-06-06 17:21 表达式求值_课程设计\ex
文件 48640 2005-06-06 17:21 表达式求值_课程设计\ex
文件 768 2005-06-06 17:21 表达式求值_课程设计\ex
目录 0 2005-06-09 21:30 表达式求值_课程设计\Debug
目录 0 2005-06-09 21:30 表达式求值_课程设计
----------- --------- ---------- ----- ----
2059772 20
- 上一篇:计算机图形学实验报告
- 下一篇:计算机图形学消隐实验转
相关资源
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
- 算符优先语法分析器(C语言编写)
- 基于C语言的密码锁程序
评论
共有 条评论