以下为《课程某某报告》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
***计算机与信息***
课
程
设
计
报
告
课程名称
数据结构
项目名称
中缀表达式转化为后缀表达式并求值
班 级
2020级计算机类4班
学 号
***248
姓 名
杨某某
指导教师
耿某某
2021年6月29日
课程某某主要目的
通过综合训练,使学生能够运用数据结构的思想,针对不同数据对象的特性,选择适当的数据结构和存储结构以及相应的算法,解决实际的问题,培养学生实际分析问题、解决问题、编程和动手操作等多方面的能力,最终目的是帮助学生系统地掌握该门课程的基本内容,并运用所学的数据结构知识去解决实际问题。同时编写课程某某报告,锻炼软件开发文档撰写的基本方法。
课程某某任务要求
任务:
综合应用C语言的基本语句,调用函数,使用栈的思想把输入的中缀表达式转换为后缀表达式,再利用所得到的后缀表达式求值。
要求:
程序能够正确运行,实现中缀表达式到后缀表达式的转换及利用后缀表达式求值的基本功能;
用户操作界面大方、简洁;
程序的可读性要好,源程序采用锯齿型书写格式,关键代码要有注释部分语句;
写明存储结构,对关键功能画出程序流程图;
5.要有测试数据和结果、调试程序,对调试程序时出现的错误进行分析,思考导致错误的原因。
教师评语
成绩: 指导教师(签名)
目 录
一、需求分析 1
二、设计方案 1
2.1总体设计 1
2.2 详细设计 2
三、 测试与分析 8
3.1测试 8
3.2 分析 10
四、总结 10
一、需求分析
本次程序设计需要输入一串中缀表达式将其转化为后缀表达式,然后用后缀表达式求值并输出。本次设计需要利用栈的思想解决问题,判别运算符,并依据后缀表达式的规则进行排列。且本设计内仅仅支持“+”“-”“*”“/”“(”“)”的表达式的运算。
功能概述:
中缀表达式的录入
运算符优先级比较
中缀表达式转后缀表达式
利用后缀表达式求值
退出
二、设计方案
2.1总体设计
本次程序设计采用C语言。功能为:由中缀表达式转化为后缀表达式并求值。该程序是根据栈的思想进行编译的,通过中缀表达式数组,逐一将中缀表达式字符读取,并将其放到后缀表达式数组里。然后将后缀表达式数组字符逐一读取,并进行运算,最后得出所求值。
基本思路:
(1)输入中缀表达式:
通过按照常规算数表达式进行直观输入操作。
(2)运算符优先级:
各种运算符的优先级为:()、*、/、+、-。
(3)中缀表达式转换为后缀表达式:
通过中缀表达式字符串一一的进行扫描操作。遇到操作数,直接将其输出;遇到操作符,将其放入栈中;遇到右括号,将栈元素弹出,将弹出的操作符输出直到遇到左括号为止;如果遇到任何其它的操作符,从栈中弹出元素直到遇到发现更低优先级的元素为止,最后将栈中所有元素依次弹出。
(4)利用后缀表达式进行求值:
通过一一扫描后缀表达式字符串。当遇到数值字符时,直接将其压入到栈中进行保存,遇到运算符时,依次从栈顶弹出字符进行相应的计算操作。
流程图:
否
是
出栈
是
读表达式
2.2 详细设计
函数清单:
void InitStack(stack *s); //栈的初始化
int GetTop(stack s, char *e); //读栈顶元素
void Pop(stack *s, char *e); //出栈
void Push(stack *s, char e); //进栈
void TranslateExpress(char s1[], char s2[]);//中缀表达式转为后缀表达式
float ComputeExpress(char s[]);//计算,调用库函数来操作结果数(计算结果)
int StackEmpty(stack s); //检测栈是否为空
(1)定义求值运算数栈和符号栈
typedef struct//定义栈的结构体
{
float data[maxsize]; //定义栈元素的数据域
int top;//定义栈顶元素
}opstack;//求值运算数栈
typedef struct
{
char data[maxsize];
i 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 int i=0, j=0;
InitStack(&s);
ch=str[i++];
while(ch!='\0')
{
switch(ch)//对中缀表达式的字符逐一对比
{
case '(':
Push(&s,ch);
break;
case ')':
while (GetTop(s,&e)&&e!='(')
{
Pop(&s,&e);
exp[j++]=e;
}
Pop(&s,&e);
break;
case '+':
case '-':
while (!StackEmpty(s)&&GetTop(s,&e)&&e!='(')
{
Pop(&s,&e);
exp[j++]=e;
}
Push(&s,ch);
break;
case '*':
case '/':
while(!StackEmpty(s)&&GetTop(s,&e)&&e=='/'||e=='*')
{
Pop(&s,&e);
exp[j++]=e;
}
Push(&s,ch);
break;
case ' ':
break;//若是空格字符,直接跳过
default:
while(ch>='0'&&ch请点击下方选择您需要的文档下载。
以上为《课程某某报告》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。