- 20
- 0
- 约6.03千字
- 约 8页
- 2019-02-02 发布于广东
- 举报
用堆栈知识实现简单的多项式计算问题.doc
用堆栈知识实现简单的多项式计算问题:
一、 需求分析
1、功能:疏如一行表达式,若表达式有误,则输出“表达式有错”,否则计 算出表达式的值并输出。运算符包括加、减、乘、除、乘方、一目减。括号均 为小括号,但可以层层嵌套。操作数可以是浮点数,也包括有多个字母组成的变 量。
2>输入的形式为表达式,按冋车结束。输入值的范围不超过浮点数的范围。含 有变量,变量名由字母组成,大小写不限。
3、若计算结果为整数,则输出整数,若含冇小数,则输出浮点数。
二、 概要设计
1、 总体思路,先读入一行表达式,用一个字符数组存储。然后依次读每个字符, 进行判断。边读入边进行计算。程序中用到了两个栈,一个字符栈以及一个数字 栈,分别用来存储运算符和数字,根据运算符的优先顺序进行计算。最后输出结 果。
2、 程序包括几个模块,主函数和几个基木函数。
说明几个函数:
bool stackempty (savel s)用来判断操作数栈s是否为空。
void push(savel s, char e)若栈满则输出“栈已满”,否则将元素e入栈 void pop(savel s, char e)若栈为空则输出“栈为空”,否则将栈顶元素赋 给c
bool stackempty2(save2 s)用来判断运算符栈s是否为空。
void push2(save2 s, char e)若运算符栈满则输出“栈已满”,否则将元素e 入栈
void pop2(save2 s, char e)若栈为空则输出“栈为空”,否则将栈顶元素赋 给c
int in(char e)返回运算符e在栈内的优先级别
int out (char e)返冋运算符e在栈外的优先级别
void count (char a, char ope, char b)将a、b进行相应的运算,并将运算结果 入栈
3、 具体操作步骤:
1、 先读入一行表达式,用一个字符数组line[]存储
2、 依次读入每个字符并进行处理同是进行表达式判错:
遇数字,则继续判断下一个字符,直到下一个字符不是数字且不是小数点, 若该数含冇两个小以上数点,则表示输入错误。否则即可保证该操作数是完整的 浮点数,然后将该数入操作数栈。
若数字不是表达式的最后一位,且数字后面跟的不是“+、-、*、/、’、)”,则 为表达式错误
遇运算符,则分两种情况:
1、 若运算符为负号(该运算符为符号的情况冇两种:一为负号在最开头,一为 符号前面是“(”),则先将0入操作数栈,然后再将负号入运算符栈。
2、 该运算符不是负号则与运算符栈的栈顶元素比:
(1) 若栈顶元素优先级低,新输入的运算符入栈。
(2) 若栈顶元素优先级高,
1) 从符号栈弹岀一个运算符,
2) 从对象栈弹出一个/两个操作数,
3) 运算结果压入对象栈。
(3) 优先级相等,则栈顶元素出栈,与输入元素对消。
若“(、+、-、*、/、放在表达式最后面,则表达式错误
若“ +、-、*、/、5后面跟的不是数字或者变量,表达式错误
3、 遇字母变量,则继续判断卜?一个字符,直到卜?一个字符不是字母变量,即可 保证该变量是完整的,然后输出“请输入变量的值”,再将输入的变量值入操作 数栈。
若变量后面跟的不是“ +、-、*、/、八、)”,则表达式错误
4、 若所读的该字符不是上述情况中的一种,则表达式错误
3、当将所冇的字符都读一遍Z后,若表达式正确的话,则必然不含冇“(”或 者“)”。即若运算符栈中含有“(”或者“)”,贝U表达式必错误。再考虑 表达式正确的情况:运算符栈可能为空,则操作符栈屮必剩下一个操作数,即最 后的结果。若不为空,则留在运算符栈中的运算符的优先级别从栈顶至栈底依次 递减。故可从运算符栈顶开始弹出一个运算符,从操作数栈中弹出两个操作数进 行运算,再将运算结呆入操作数栈,一直循环至运算符栈为空。此时操作数栈剩 下的唯一一个操作数就是运算结果。
三程序源代码:
/*jisua nq i_head.h*/
/*2012年4刀15日
made by liuhui*/
#define MAX 1000
struct savel
{
float n[MAX];
int top;
Jstackl;
struct save2
{
char n[MAX];
int top;
}stack2;
//stackl存储数字,stack2存储运算符号.ss bool stackempty(savel s);〃判断是否为空
bool stackempty2(save2 s);〃判断是否为空 void push(savel s,float e);〃将 e 入栈
void push2(save2 s,char e);〃将 e 入栈
void pop(savel s,float e);〃将栈顶元素出栈,存到
您可能关注的文档
最近下载
- 2026开封市第三届职业技能大赛汽车技术(世赛选拔)项目技术工作文件.pdf VIP
- 站用交直流电源系统技术规范第3部分:直流电源系统.pdf VIP
- 2024年初级会计职称《经济法基础》精讲课件.pptx VIP
- 2025年湖南机电职业技术学院单招职业技能测试题库及参考答案.docx VIP
- 2025年浙江机电职业技术学院单招(语文)测试试卷.docx VIP
- 泰国和中国合同模板(3篇).docx VIP
- 2025年湖南机电职业技术学院单招职业技能测试题库参考答案.docx VIP
- (2026春新版)人教版二年级数学下册《第三单元 万以内数的认识》教案.docx VIP
- 四年级小学下书法设计教案.doc VIP
- 烟气余热利用的热管式换热器设计(毕业论文).docx VIP
原创力文档

文档评论(0)