资源简介
[问题描述]
一个算术表达式是由操作数(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语言写的理发馆排队问题模拟仿
- C语言经典编程100题+答案
- 单片机与上位机收发程序c语言实现
- UTF8转GBK C语言 单片机
- 专家PID与模糊PID的C语言实现
- c语言单纯形法c语言单纯形法
- C语言模拟实现操作系统内存的分配与
- 用C语言实现卷积计算并绘制出卷积计
- C语言实现控制台扫雷小游戏
- c语言连接sql server
- c语言写的音乐程序源代码
- C语言课程设计——宿舍管理系统
- c语言控制pc扬声器代码
- C语言编写的腐蚀膨胀开闭运算算法
- 西工大C语言大作业模板
- 黑白棋c语言代码
- 导线网间接平差
- C语言实现的倒排索引算法(含全部源
- 作业调度先来先服务短作业高响应比
- C语言——建立一个链表表示学生的信
- 基于C语言的linux远程终端管理系统
- C语言课程设计报告——通讯录管理
- 自相关c语言代码简单实用
- c语言实现双线性内插
- 单链表的并集与交集C语言
- DAC8411程序C语言版用KEIL调试通过
- c语言实现读者写者问题
- C语言课程设计:图书管理系统代码+报
- 地铁自动售票机C语言
评论
共有 条评论