数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx

上传人:b****5 文档编号:17025873 上传时间:2022-11-27 格式:DOCX 页数:14 大小:68.94KB
下载 相关 举报
数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx_第1页
第1页 / 共14页
数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx_第2页
第2页 / 共14页
数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx_第3页
第3页 / 共14页
数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx_第4页
第4页 / 共14页
数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx

《数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构算术表达式的求解本科学位论文Word文档下载推荐.docx

6.2错误113

6.3错误213

6.4错误313

7.收获及体会:

15

参考文献:

1.前言

1.1课题内容及要求

题目39:

算术表达式的求解

问题描述:

给定一个算术表达式,通过程序求出最后的结果。

基本要求:

从键盘输入要求解的算术表达式;

采用栈结构进行算术表达式的求解过程;

能够判断算术表达式正确与否;

对于错误表达式给出提示;

对于正确的表达式给出最后的结果;

1.2选题目的及意义

⑴进一步熟悉和使用栈的基本操作,如栈的初始化,进栈,出栈的特性。

⑵学习在实际生活中使用栈来解决问题。

2.系统分析

2.1问题描述

要正确计算表达式的值,必须要正确的解释表达式。

首先解释算术表达式的运算规则,分为以下三点:

⑴先乘除后加减;

⑵从左往右进行计算;

⑶有括号的,先算括号内的;

任何一个表达式都是由运算符,操作数和界限符组成的。

这里把运算符,界限符统称为算符。

设两个操作符分别为op1和op2。

为实现运算符的优先法则,优先关系会出现三种情况,op1的优先级高于op2的优先级,op1的优先级等于op2的优先级,op1的优先级小于op2的优先级。

对于输入错误的,比如出现了表达式以外的非法字符,没有按照正确格式进行输入。

系统会给出提示。

3.系统概要设计

3.1系统总体架构设计

3.2系统模块的设计

为了更好的服务,结合用户的需求,有如下的模块设计:

程序主要包括三个模块:

⑴主函数设计模块

intmain(){

函数体

}

⑵栈模块:

一些本程序需要的操作,如初始化栈,定义栈,出栈,入栈,取栈顶元素。

⑶运算模块:

对一些优先级的定义,以及基本的算术运算。

4.系统详细设计

为实现运算符的优先算法,可以用两个栈:

运算符栈OPTR,操作数栈OPND。

四则运算表达式算法的基本思想是:

⑴首先置操作数栈OPND为空栈,表达式起始符“#”为OPTR栈的栈底元素。

⑵依次读入表达式中的每个字符,是操作数则进栈OPND,是运算符就和OPTR栈的栈顶元素比较后,依据相应的优先权进行操作,直至整个表达式求值完毕(标志是两个运算符都为“#”)。

Op2

Op1

+

-

*

/

#

>

<

=

栈的设计:

typedefstruct{

ElemTypedata[StackSize];

inttop;

}SeqStack;

voidInit(SeqStack*s);

//初始化栈

intIsFull(SeqStack*s);

//判断栈是否已满

intIsEmpty(SeqStack*s);

//判断栈是否是空

voidPush(SeqStack*s,ElemTypex);

//进行入栈操栈

ElemTypePop(SeqStack*s);

//进行出栈操作

ElemTypegetTop(SeqStack*s);

//提取栈顶元素

函数运算:

intAdvan(intt1,intt2);

//判断符号的优先级

intIn(intc);

//判断c是否为运算符

intOprea(inta,inttheta,intb);

//进行四则运算

intEvaluteExpression();

//进行算术表达式求值

5.程序实现

//stack.h中

#ifndef_STACK_H

#define_STACK_H

#defineStackSize100

#defineMaxLength100

typedefintElemType;

//提取栈顶元素

#endif

//stack.c中

#include"

stack.h"

#include<

stdio.h>

stdlib.h>

voidInit(SeqStack*s)//初始化?

{

s->

top=-1;

intIsFull(SeqStack*s)//判断栈是否已满

returns->

top==StackSize-1;

intIsEmpty(SeqStack*s)//判断栈是否是空

top==-1;

voidPush(SeqStack*s,ElemTypex)//进行入栈操栈

if(IsFull(s)){

printf("

栈已经溢出。

"

);

exit

(1);

}

top++;

//栈顶指针加1

data[s->

top]=x;

//栈顶为新插入的值,data是数组,s->

top数字

ElemTypePop(SeqStack*s)//进行出栈操作

if(IsEmpty(s)){

栈是空的"

}

data[s->

top--];

//先删除栈顶的元素,然后指针减一

}

ElemTypegetTop(SeqStack*s)//提取栈顶元素

top];

//operstack.h中

#ifndef_OPERSTACK_H

#define_OPERSTACK-H

//进行算术表达式求值

//operstack.c中

operstack.h"

intAdvan(intt1,intt2)//判断符号的优先级

intf;

switch(t2)

{

case'

+'

:

//若t2符号是“+”“-”

-'

if(t1=='

('

||t1=='

#'

f='

'

;

else

break;

*'

//若t2符号是*,/时

/'

)'

//若t2符号是(,此时应该优先级小继续输入,而不进行运算

){

printf("

ERROR括号不匹配\n"

exit(0);

}

break;

//若t2符号是),此时一个括号已经完整,应该进行运算

switch(t1)

{

case'

f='

='

break;

printf("

ERROR缺少左括号\n"

exit(0);

default:

//若t2取出时是#,表示已经要计算最后一个表达式了

ERROR缺少右括号\n"

}

}

returnf;

intIn(intc)//判断c是否为运算符

{

switch(c)

return1;

default:

return0;

intOprea(inta,inttheta,intb)//进行四则运算

intc;

switch(theta)

c=a+b;

c=a-b;

c=a*b;

c=a/b;

returnc;

intEvaluteExpression()//进行算术表达式求值

SeqStackOPTR,OPND;

//构建两个栈,一个是放操作符,一个是放数据

inta,b,d,x,theta;

charc;

//存放键盘接收的字符

charz[6];

//存放整数串

inti;

Init(&

OPTR);

//初始化运算符栈

Push(&

OPTR,'

//#入栈,#是表达式结束的标志

OPND);

//初始化数据栈

c=getchar();

//从键盘读入下一个字符到c

x=getTop(&

//x赋值为运算符栈顶元素

while(c!

||x!

){//当读入两个字符都为#时,则停止,返回最后的//结果X的值,否则继续进行运算

if(In(c)){//是运算符

switch(Advan(x,c))

Push(&

OPTR,c);

//优先级低,继续进行输入

c=getchar();

x=Pop(&

//脱括号并计算下一个值

theta=Pop(&

//优先级高,此时进行运算,从操//作栈中取出一个运算符

b=Pop(&

//从数据栈中取出两个数

a=Pop(&

Push(&

OPND,Oprea(a,theta,b));

//然后通过这两个数进行运算}

}elseif(c>

0'

&

c<

9'

){//是数字

i=0;

do{

z[i]=c;

i++;

}while(c>

z[i]=0;

//整数串结束

d=atoi(z);

//将字符串转化为整数放入d中

Push(&

OPND,d);

//一个整数入到数据栈中

}else{//两者以外显然不可能,出错

printf("

ERROR出现了非法的字符,表达式不符合格式\n"

exit(0);

}

x=getTop(&

returnx;

6.程序测试

6.1正确的结果

6.2错误1

6.3错误2

6.4错误3

该程序经过调试已经能够运行,并且能够正确的输出答案以及错误的提示。

通过本次数据结构课程设计,能够更加深刻的体会栈的特点,更熟悉栈的相关操作,以及如何运用栈的相关知识解决生活中的实际问题。

[1]李文书.数据结构与算法应用实践教程.北京大学出版社.2012.02

[2]戴文华赵君喆.数据结构项目实训.人民邮电出版社.2012.09

[3]李业丽程晓锦齐亚莉.数据结构实验教程(基于c语言).清华大学出版社.2014.04

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1