算式计算器C语言版讲解Word格式文档下载.docx
- 文档编号:13641403
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:21
- 大小:65.06KB
算式计算器C语言版讲解Word格式文档下载.docx
《算式计算器C语言版讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《算式计算器C语言版讲解Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
构建栈和运算符优先级表,程序能够计算加,减,乘,除和逻辑运算,并且能够运行成功。
参考文献阅读:
[1]严蔚敏,吴伟民编著.数据结构(c语言版).北京,清华大学出版社,2012
[2]严蔚敏,吴伟民编著.数据结构题集(C语言版).北京,清华大学出版社,2007
[3]SartajSahni编著.DataStructures,Algorithms,andApplicationsinC++.McGraw-Hill
工作计划:
1、第一周的第一天:
小组布置设计题目;
说明进度安排。
2、第一周的第二天:
小组审题,查阅资料,进行设计前的必要资料准备。
3、第一周的第三天、第四天、第五天:
程序编写、上机调试
4、第二周的第一天至第三天:
上机调试程序、结果分析。
5、第二周的第四天:
撰写设计报告。
6、第二周的第五天:
设计答辩及成绩评定。
任务下达日期:
2014年6月8日
任务完成日期:
2014年6月17日
学生(签名):
表达式计算程序设计
摘要:
按照要求构造运算符优先级表,编写优先级比较算法。
利用栈结构和优先级编写表达式计算方法。
首先构建了一个数据栈,此栈用来储存浮点型数字;
一个符号栈用来存储运算符号。
然后借助于两个栈和一个结构体运算。
关键词:
优先级表优先级比较算法栈
1.设计背景⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯1
1.1数据结构算法设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯1
1.2知识运用⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯1
2.设计方案⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯1
2.2程序设计方案⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯1
2.2模块设计方案⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯1
3.方案实施⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2
3.1模块代码⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2
3.1流程图⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯6
4.测试⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯8
5.总结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯10
3.1总结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯10
3.1谢词⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯10
6.参考文献⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯10
7.附件⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯11
1.设计背景
1.1数据结构算法设计
1、王亚洲完成了对符号栈的编写
2、王秀文完成了对数字栈的编写
3、李渊完成了对符号结构题的编写和对符号结构体数组的初始化
4、童世超完成了对字符数字转化为浮点型数字
5、曾冰寒完成对主函数的编写
1.2知识运用
学完数据结构,充分利用所学栈的知识,完成表达式程序设计
2.设计方案
2.1程序设计方案
先定义一个结构体,用来存放符号和优先级和定义两个栈,一个数字栈、一个符号栈。
然后借助于符号结构体和两个栈通过逻辑算法设计一个表达式计算程序
2.2模块设计方案
该模块是表达式计算的核心模块即计算模块。
先判断接收的是不是左括号,左括号的优先级最低,如果是左括号无条件入栈;
如果不是左括号则判断是不是右括号,右括号的优先级最高,遇到右括号无条件出栈运算,然后循环知道遇见左括号把括号的全部运算完毕然后继续接收字符;
如果既不是左括号也不是右括号则判断是不是运算符,如果是运算符则判断和运算符栈的栈顶元素的优先级,如果栈顶元素的优先级等于或高于接收元素则出栈运算否则入栈;
最后判断是不是等号,如果是等好则出栈运算,一直到数字栈中就剩下最后一个元素结果这输出结果,运算结束。
3.方案实施
3.1模块代码
if('
('
==c)//左括号时入栈
{
Push(S,c);
//左括号入符号栈
c=getchar();
//接着读下一个字符
}
elseif('
)'
==c)
//当是右括号时计算括号内的内容
Pop(S,a);
//符号栈出栈
==a)
//判断刚出栈的符号是不是左括号
//如果是左括号说明括号内运算完了,接收
下个字符
}else
//不是左括号说明没运算玩,接着运算
SPop(Z,q);
//数字栈出栈,用于运算
SPop(Z,p);
SPush(Z,Operate(p,a,q));
//调用Operate计算,然后把
计算结果入数字栈
+'
==c||'
-'
*'
/'
==c)//当是运算符的时候判断前一个运算符,前一个运算符高的时候运算
{//否则入栈if(0==StackLength(S))//判断符号栈是否为空{
//符号入符号栈
//接着接收下个字符
elseif(fuhao(GetTop(S),c)>
=0)//调用fuhao函数判断栈顶元素和刚接收的符号的优先级
{//如果栈顶元素优先级高活相等就
运算
//符号出栈
//数字出栈
//调用Operate计算,然后把计算结果入数字栈
else//如果刚接收的符号的优先级高则入栈
='
==c)//当是等号的时候
//当输入等号时符号栈中应该至少有一个符号,数字栈中
应该有两个数字
//符号栈出栈
//数字栈出栈
//调用Operate计算,然后把计算结果入数字栈
if(1==SStackLength(Z))//判断数字栈是否就剩一个数字
{//如果就剩一个数字则说明运算结束
if(0!
=StackLength(S))//判断符号栈是否为空
{//运算结束符号栈应该为空,不为空则说明输入错误
printf("
输入有错!
\n"
);
//错误提示return;
//结束该函数}
return;
//结束该函数
else//如果接受的既不是数字又不是运算符还不是等号则说明输入非法字符
\t\t出错!
\n\n\t输入非法字符!
或未输入等号!
\n\n"
//错误提示
3.2流程图
模块流程图如图1-2
左括号入栈,接着输入
是
输入是否左括号
输入是否运算符输入是否运算符
栈顶出栈
输入是否右括号
判断符号栈是否空
两个数字出
栈,运算入栈
是输入
否
与栈顶比较优先级
输入是否等号
入栈,输入
低或等
两个数字出栈,一
个字符出栈,运算
两个数字出栈一个
运算符出栈,运算
入栈
数字栈为1
字符栈为空
字符栈为是空
数字出栈,输出
输出错误提示
结束
图1-2模块流程图
主界面如图2-1
4.测试
图2-1主页面
传统计算结果如图2-2
图2-2传统计算结果
自定义优先运算输入如图2-3
图2-3自定义优先级
自定义优先级运算如图2-4
图2-4自定义优先级运算
错误提示
(一)如图2-5
图2-5错误提示
(一)
错误提示
(二)如图
2-6
图2-6错误提示
(二)
5结论
5.1总结
通过数据结构课程设计真正把知识点运用到实际问题中去更熟悉了栈的使用,最重要的是学会了很多知识,考虑问题方面也变得更加周到一些,在调试过程中遇到错误时,特别感谢老师一步一步帮助我们查找错误并讲解,让很多模糊的地方瞬间清楚了很多。
5.2谢词在此次课题设计中感谢老师在百忙之中抽出时间对我们的亲切指导,感谢组员们的热心配合,感谢所参考的书本的作者。
6.参考文献
[1]严蔚敏,吴伟民编著.数据结构(c语言版).北京,清华大学出版社,2012
[2]严蔚敏,吴伟民编著.数据结构题集(C语言版).北京,清华大学出版社,2007
[3]SartajSahni编著.DataStructures,Algorithms,andApplicationsinC++.McGraw-Hill
7.附件
源代码:
//******表达式计算程序设计#include<
stdio.h>
#include<
stdlib.h>
string.h>
#define
OK
1
TRUE
FALSE
BAI
100
SHI
10
typedef
char
SElemType;
float
ElemType;
//存放符号的栈typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
//存放数字的栈typedefstruct
ElemType*base;
ElemType*top;
intstacksize;
}Stack;
//运算符结构体
struct
charm;
intn;
}Fu[5];
//构造一个符号栈
voidInitStack(SqStack&
S)
S.base=(SElemType*)malloc(BAI*sizeof(SElemType));
if(!
S.base)
exit(FALSE);
S.top=S.base;
//栈初始化的时候头和尾指向相同
S.stacksize=BAI;
//*****符号入栈intPush(SqStack&
S,SElemTypee){
if(S.top-S.base>
=S.stacksize)//检查是否满,如果满了再添加内存{
S.base=(SElemType*)realloc(S.base,(S.stacksize+SHI)*sizeof(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算式 计算器 语言版 讲解