当前位置:文档之家› 故障诊断课程设计-滚轴

故障诊断课程设计-滚轴

故障诊断课程设计-滚轴
故障诊断课程设计-滚轴

滚动机械轴承的故障诊断

1 引言

滚动轴承是机器的易损件之一,据不完全统计,旋转机械的故障约有30%是因为滚动轴承引起的,由此可见滚动轴承故障诊断工作的重要性。随着对滚动轴承的运动学、动力学的深入研究,对于轴承振动信号中的频率成分和轴承零件的几何尺寸及缺陷类型的关系有了比较清楚的了解,加之快速傅里叶变换技术的发展。开创了用频域分析方法来检测和诊断轴承故障的新领域。其中最具代表性的有对钢球共振频率的研究,对轴承圈自由共振频率的研究。本文主要着重于对滚动轴承滚动体磨损的故障研究,主要研究方法为傅里叶变换,功率谱分析,自相关分析,倒频谱分析,Hilbert 包络谱,小波理论等方法。

2 轴承内圈故障特征频率

对滚动轴承实施振动诊断的基本方法是频率分析。滚动轴承的振动频率成分非常丰富,每一个元件都有各自的故障特征频率。由于滚动轴承早期故障的诊断信号十分微弱,往往淹没在其它强烈的振动信号之中。因此,若检测信号的振动幅值往往难以发现故障的存在,容易造成漏检。通过对振动信号作频率分析可以部分避免这种情况。为了顺利地进行频率分析,需要计算出滚动轴承的主要特征频率。

滚动体故障的特征频率:

i b f D

d

d D f ))cos (1(2α-=

上式中D 节径,d 滚动体直径,α为接触角,i f 为内圈的转频。 代入具体的数据,

i i b f f f 08.5)5.395.71(5.75.392

=??

? ??-=

当i f =5HZ 时,可得b f =25.38HZ ,当i f =10HZ 时,可得b f =50.77HZ ,当i f =15HZ 时,可得b f =76.15HZ ,当i f =20HZ 时,可得b f =101.54HZ 。

3 FFT 运算

FFT 是离散傅里叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT 的原因。另外,FFT 可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。

3.1 时域波形

时域波形图如下:

0.5

1

1.5

2

2.5

3x 10

4

-1-0.500.5

1故障时时域波形

0.5

1

1.5

2

2.5

3x 10

4-1-0.500.5

1正常时时域波形

由上述图1和图2观察比较可以发现,正常时的振动信号要平稳很多,振幅较小,而故障信号则振动剧烈,振幅较大,具有明显的冲击信号,呈现出周期性的特点,但得不到具体的频率方面的信息。

3.2 FFT 运算波形

500

100015002000250030003500400045005000

01

23

4x 10

-3

频率/Hz

振幅

故障信号FFT 变换

500

1000

1500

2000

25003000

3500

4000

4500

5000

01

23

4x 10

-3

频率/Hz

振幅

正常信号FFT 变换

从上述图4中可以看出,正常状态下,轴承的低频段谱峰突出。图3与图4比较发现,在发生故障的情形下,轴承的振动信号,不仅在低频段表现突出,而且在高频段谱峰突出比较明显,而且有多个谱峰,这主要是因为滚动体有损伤时,在转动一周内,有时损伤点位于载荷区内,有时位于损伤区外;当损伤点位于载荷区内时,它与滚动体接触时产生脉冲力;当损伤点位于载荷区外时,如果不考虑运动时惯性力的作用,则不产生脉冲力;由此分析可以看出,滚动体损伤引起的脉冲力的大小和方向受损点位置的影响,当产生的脉冲力较大时,能够引起高频共振,当产生的脉冲力较小时,引起中低频共振。

从故障信号的频谱图形,很难得出轴承发生故障的特征频率。

4 功率谱

功率谱估计是数字信号处理的主要内容之一,主要研究信号在频域中的各种特征,目的是根据有限数据在频域内提取被淹没在噪声中的有用信号。功率谱是从能量的观点对信号进行研究。

1

2

3

4

5

6x 10

4

00.5

1

1.5

x 10

-5

故障信号功率谱

1

2

3

4

5

6x 10

4

00.5

1

1.5

x 10

-5

正常信号功率谱

从上述两个图中,比较可以发现,正常信号的功率谱图形与故障信号的功率谱图形的差别是很明显的。正常信号的功率谱主要集中在0~500Hz 低频范围内,振幅也较小;而故障信号的功率谱主要集中在高频带,振幅也较大。这主要是因为,滚动体有损伤时,在转动过程中,会产生冲击信号,叠加在正常信号上,使得幅度增加,而且产生了高频共振。

5 自相关分析

-8

-6-4-20246

8

x 10

4

00.20.40.6

0.8正常信号自相关

-8

-6-4-20246

8

x 10

4

-500

500

1000

故障信号自相关

从上述两个图中比较可以看出,故障信号的自相关运算和正常信号的自相关运算的差别是很明显,主要表现在:(1)幅值大小不一样,正常信号的幅值范围比故障信号的幅值范围小;(2)故障信号的自相关程度呈现出一种由弱到强,再到弱的特点,没有周期性;而正常信号的则呈现出一种随着时间的变化,自相关程度逐渐减小的特点;(3)故障信号有一些很明显的冲击信号,幅值很高,而正常信号则没有。

6数据分析

该数据是在转速为300转/分钟,采样频率20K 情况下的正常数据与故障数据的分析比较。

从表中可以看出,故障情况下,均值、有效值、方差、歪度和峭度的值均远高于正常时的数据。

7 倒频谱

200

3004005006007008009001000

00.01

0.02

0.03

0.04

故障信号的倒频谱

200

3004005006007008009001000

00.01

0.02

0.03

0.04

正常信号的倒频谱

300转/分钟时的信号倒频谱

200

3004005006007008009001000

00.01

0.02

0.03

0.04

故障信号的倒频谱

200

3004005006007008009001000

00.01

0.02

0.03

0.04

正常信号的倒频谱

450转/分钟时的信号倒频谱

200

3004005006007008009001000

00.01

0.02

0.03

0.04

故障信号的倒频谱

200

3004005006007008009001000

00.01

0.02

0.03

0.04

正常信号的倒频谱

600转/分钟时的信号倒频谱

200

3004005006007008009001000

00.01

0.02

0.03

0.04

故障信号的倒频谱

200

3004005006007008009001000

00.01

0.02

0.03

0.04

正常信号的倒频谱

750转/分钟时的信号倒频谱

从图中可知,正常信号的倒频谱没有明显的冲击信号,故障信号的倒频谱可以观察到明

显的冲击信号,由此可以判断设备是否存在故障。另外,在300转/分钟时,故障信号的冲击信号不明显,随着转速的增加,冲击信号越来越明显,也越来越多。

8 Hilbert 包络谱

50100150200250300350400450500

02

4

6

x 10

-3

滚动体故障信号Hilbert 包络谱分析

50

100

150

200

250

300

350

400

450

500

00.5

1

1.5

2x 10

-3

滚动体正常信号Hilbert 包络谱分析

上图是故障信号和正常信号的包络谱曲线分析图。从图中可以看出,故障信号的从低频到高频的过程中,有明显的冲击信号,在某些频率上有着较大的幅值,随着频率的增加,幅值降低。正常信号的幅值较小,没有很明显的冲击信号。

6 小波运算

信号的时域描述、傅里叶变换及小波分析具有不同的特点:时域描述是最直观、最容易

理解的信号表达形式。在一些对幅值感兴趣的工程问题中,这种描述最为有用。但是它没有任何频率信息,看不到信号的成分,不利于分析振源、振动的传递与频率的关系等问题。傅里叶变换是完全从频域的角度描述信号,较2时域描述更为深刻,在需要了解振源、振动的传递及动力学有关的问题随频率的变化关系方面最为适用。但是傅里叶变换使用的函数完全频域化,没有任何时域信息,它反映信号的各频率分量的平均效果,因此对于一些非平稳信

号不太适合。在一些振动问题上需要将时域的完全时间局部化和傅里叶变换的完全频率局部化结合起来,找到一种折中的办法,及寻求时频分析。小波变换的兴起是人类在时频分析方面的突破,小波分析在处理非平稳信号和故障诊断方面得到广泛的应用。

本文中对转动频率为15HZ 的故障信号进行小波分解,主要采用haar 小波基。

1

2

3

4

5

6

7

x 10

4

-20

2

V 11

V11

0.5

1

1.5

2

2.5

3

3.5x 10

4

-50

5

V 10

V10

2000

4000

6000

8000

10000

12000

14000

16000

18000

-50

5

V 9

V9

1000

2000

3000

4000

5000

6000

7000

8000

9000

-20

2

V 8

V8

200

400

600800

1000

1200

-10

1

V 5

V5

50

100

150

200

250

300

-0.5

0.5

V 3

V3

0.5

1

1.5

2

2.5

3

3.5x 10

4

-20

2

W 10

2000

4000

6000

8000

10000

12000

14000

16000

18000

-50

5

W 9

W9

1000

2000

3000

4000

5000

6000

7000

8000

9000

-50

5

W 8

W8

500

1000

1500

2000

2500

3000

3500

4000

4500

-20

2

W 7

W7

500

1000

1500

2000

2500

-20

2

W 6

W6

200

400

600

800

1000

1200

-10

1

W 5

W5

100

200

300400

500

600

-10

1

W 4

50

100

150200

250

300

-0.5

0.5

W 3

W3

20

40

60

80

100

120

140

-0.5

0.5

W 2

W2

10

20

30

40

50

60

70

-0.4

-0.2

0.2

0.4W 1

W1

5

10

15

20

25

30

35

-0.2

0.2

0.4

0.6

W 0

W0

对故障信号做11层分解

上图中,V3、V5、V8、V9、V10、V11是故障信号小波分解的近似系数,代表信号中的

低频部分,也就是信号中代表故障的信号,表征了故障信号的本身特征,从这些信号中,可以辨别出故障的情况。W10~W0表示的是信号中的高频部分,表征信号的细微差别,也就是

信号中的噪声。

观察近似系数的波形图,可以发现近似系数的振幅大多是小于0的,表示故障信号的本

身特性中,振幅是小于0的。观察细节系数的波形图,可以发现信号的振幅是关于横轴对称的,也就是噪声信号。比较观察后,发现故障信号的本身特征是不关于横轴对称的,而信号中的高频成分是关于横轴对称的。

对小波分解后的细节信号进行重构,原始故障信号时域图、故障信号小波分解后重构信号时域图、故障信号小波分解后重构信号FFT 频谱图如上图所示。

1

2

3

4

5

6x 10

4

-20

2原始故障信号时域图

1

2

3

4

5

6x 10

4-20

2故障信号小波分解后重构信号时域图

50

100

150

200

250

300

350

400

450

500

00.05

故障信号小波分解后重构信号FFT 频谱图

由图可知原始故障信号时域图无法对故障频率进行判断,但从故障信号小波分解后重构的FFT 频谱图可得故障频率大致为75.68HZ 。根据滚动体故障特征频率公式可得,转动频率为15HZ 时故障特征频率为76.15HZ ,实验结果与理论值较为接近。

10 结论

本文主要是对轴承滚动体的故障信号进行处理,并与正常信号进行比较。主要用到的方法有:快速傅里叶变换(FFT)、功率谱、自相关运算、功率谱、倒频谱、Hilbert包络谱、小波分析等,无论是哪一种方法,通过作图发现,故障信号与正常信号的差别是很明显的。其中采用小波分析的方式,有着比较明显的优势。信号的小波分解由于其基函数的时频局部化特性,可以很好地表示信号的非线性和冲击特征,而对于存在的高频低幅噪声有极大的略化作用,能有效地区分信号中的突变部分和噪声,从而实现信号的降噪。同时结合小波降噪的优点,对信号进行降噪处理,成功实现了故障信号特征频率提取,体现了小波在轴承故障诊断中的工程实用价值。

c++面向对象课程设计报告

课程设计报告 课程名称面向对象程序设计 课题名称学生成绩管理系统 专业计算机科学与技术 班级计算机 1001 学号 01 姓名 指导教师李珍辉陈淑红李杰军 2011年 12 月 28 日

湖南工程学院 课程设计任务书 课程名称面向对象程序设计 课题学生成绩管理系统 专业班级计算机1001 学生姓名 学号 01 指导老师李珍辉陈淑红李杰军 审批 任务书下达日期 2011 年 11 月 15 日 任务完成日期 2011 年 12 月 28 日

一、设计内容与设计要求 1.课程设计目的: 面向对象程序设计课程设计是集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。要求学生达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。 2.课题题目 1)公司库存管理系统 2)高校学籍管理系统 3)高校工资管理系统 4)高校人事管理系统 5)通讯录程序设计 6)学生成绩管理系统 7) 图书管理系统 8)文本编辑器的设计与实现 9)学生考勤管理系统 10)公司人员管理系统 3.设计要求: ⑴设计课题题目:每位同学根据自己学号除以10所得的余数加1选择相 应题号的课题。随意换题者不记成绩。 ⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括 系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。②完 成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模 块图)。③完成系统详细设计:包括数据库需求分析;数据库概念结构设计(E -R图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。④系 统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修 改和调整。⑤使用说明书及编程体会:说明如何使用你编写的程序,详细列出 每一步的操作步骤。⑥关键源程序(带注释)

(编译原理)逆波兰式算法的源代码

一.实验目的 1.深入理解算符优先分析法 2.掌握FirstVt和LastVt集合的求法有算符优先关系表的求法 3.掌握利用算符优先分析法完成中缀表达式到逆波兰式的转化 二.实验内容及要求 将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。 程序输入/输出示例: 输出的格式如下: (1) (2)输入一以#结束的中缀表达式(包括+—*/()数字#) (3) (4)逆波兰式 备注:(1)在生成的逆波兰式中如果两个数相连则用&分隔,如28和68,中间用&分隔; 注意:1.表达式中允许使用运算符(+-*/)、分割符(括号)、数字,结束符#; 2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好); 3.对学有余力的同学,测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照; 三.实验过程 1、逆波兰式定义 将运算对象写在前面,而把运算符号写在后面。用这种表示法表示的表达式也称做后缀式。逆波兰式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用逆波兰式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。 2、产生逆波兰式的前提 中缀算术表达式 3、逆波兰式生成的实验设计思想及算法

(1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 (2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“#”。 (3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。 (4)如果不是数字,该字符则是运算符,此时需比较优先关系。 做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将此运算符栈顶的运算

逆波兰表达式求值(实验报告及C 源码)

逆波兰表达式求值 一、需求分析 1、从键盘中输入一个后缀表达式,该表示包括加减乘除等操作符,以及正整数作为操 作数等。 2、用堆栈来实现 3、测试数据 输入:2 3 * 1 – # 输出:2 3 * 1 -- =5 二、概要设计 抽象数据类型 需要一个浮点数栈来存储还没有计算的浮点数或者运算的结果。 ADT Stack 数据成员:int size; int top; //分别用于存储栈大小、栈顶位置 float *listArray;//存储浮点型数字的数组 成员函数: bool push(float it); bool pop(float& it); bool isEmpty(); //判断栈为空 bool isOne();//判断栈是否只有一个元素 算法的基本思想 1.逐一扫描字符串,用ascii码进行判断,如果该字符是数字,则利用x=x*10+str[i]-48 将数据由字符类型转换为浮点型数据; 2.如果字符是‘.’,则将‘.’转化为小数点,并将‘.’后的数据转化为小数部分; 3.遇到空格前是数据的,将x押入栈; 4.如果该字符是’+’,’-’,’*’或’/’,判断栈里的元素是否少于两个个,如果少于两个, 报错;如果大于等于两个,就弹出两个数据,并进行相应的计算; 程序的流程 输入字符串,程序对字符串依次扫描。扫描一位,处理一位。扫描完成后,判断栈里是不是只有一个数据,若是,得到正确结果;若不是,则表达式出错。 三、详细设计 物理数据类型 用浮点数类型的栈存储运算中要用的数据,需要入栈、出栈,故设计如下的浮点类型的栈: class Stack { private: int size; int top; float *listArray; public: Stack(int sz=20); ~Stack();

面向对象课程设计任务-可选题

面向对象课程设计任务书 一、设计基本要求 1、利用面向对象的方法和C++编程思想来完成系统的分析和设计; 在设计过程中,建立清晰的类层次;用UML画出类及类间的关系图; 程序中包含面向对象的基本知识:封装、继承、多态,基本的信息应该能长期保存(用文件存放) 2、系统启动运行时读取存储在文件中的记录解析成对象数据放入内存(以STL向量或链表存放) 3、基本的信息管理包括:读数据(从文件中读到内存)、增加、删除、查询、修改、存盘(将内存中数据写回文件)。可以自己根据题目要求增加新的功能。增、删、改、查操作在内存中进行(针对STL向量或链表的操作而不是针对文件的操作) 4、系统关闭前将内存数据存入文件(可以新建文件或覆盖原有文件) 5、类中属性以private或protected属性为主 6、层次分明,结构合理,加上简单界面的设计,如菜单,界面清新美观,维护容易 7、按照指导书的要求编写文档。 二、使用的主要技术 C++编程:基础编程,文件流,STL,必要的异常处理机制 环境:VC++6.0 三、设计的方法和步骤 设计步骤: 第一步:进行完整的需求分析,写出需求分析报告。 第二步:进行详细设计,写出详细的设计报告。 第三步:各模块编码实现。 第四步:合并调试并试运行,记录实现过程中出现的问题及解决方案。 第五步:提交完整可执行软件,准备答辩。 第六步:答辩,演示软件,评分。 第七步:整合各报告,修改并提交。 四、主要参考资料 1.课程教材 2. 面向对象程序设计实用教程张海藩清华大学出版社 3. C++语言程序设计(第1版)吕凤翥清华大学出版社 4. C++语言程序设计(第1版)郑莉清华大学出版社 5.C++及Windows可视化程序设计刘振安清华大学出版社 6.其他相关的书籍及网络资源 五、选题 以下为一组可选的选题,每个选题可以从中选择一部分来实现,但需要达到基本要求。 1. 班主任工作管理系统 班主任的日常工作非常繁琐,需要管理学生的信息、班级的日常活动等。结合班主任工作实际,开发一个管理系统,系统主要功能如下: (1)学生资料管理:提供学生基本档案、学生评语、家访记录的维护,并可以按照年

编译原理-逆波兰式的产生及计算

编译原理上机报告 名称:逆波兰式的产生及计算 学院:信息与控制工程学院 专业:计算机科学与技术 班级:计算机1401班 姓名:叶达成 2016年11月4日

一、上机目的 通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。 1、选择最有代表性的语法分析方法,如LL(1) 语法分析程序、算符优先分析程序和LR分析分析程序,并至少完成两个题目。 2、选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。 ⑴实验前的准备 按实验的目的和要求,编写语法分析程序,同时考虑相应的数据结构。 ⑵调试 调试例子应包括符合语法规则的算术表达式,以及分析程序能够判别的若干错例。 ⑶输出 对于所输入的算术表达式,不论对错,都应有明确的信息告诉外界。 ⑷扩充 有余力的同学,可适当扩大分析对象。譬如: ①算术表达式中变量名可以是一般标识符,还可含一般常数、数组元素、函数调用等等。 ②除算术表达式外,还可扩充分析布尔、字符、位等不同类型的各种表达式。③加强语法检查,尽量多和确切地指出各种错误。 二、基本原理和上机步骤 基本原理: 将运算对象写在前面,而把运算符号写在后面。用这种表示法表示的表达式也称做后缀式。逆波兰式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用逆波兰式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。 上机步骤: (1)构造一个栈,存放运算对象。 (2)读入一个用逆波兰式表示的简单算术表达式。 (3)自左至右扫描该简单算术表达式并判断该字符,如果该字符是运算对象,则将该字符入栈。若是运算符,如果此运算符是二目运算符,则将对栈顶部的两个运算对象进行该运算,将运算结果入栈,并且将执行该运算的两个运算对象从栈顶弹出。如果该字符是一目运算符,则对栈顶部的元素实施该运算,将该栈顶部的元素弹出,将运算结果入栈。 (4)重复上述操作直至扫描完整个简单算术表达式的逆波兰式,确定所有字符都得到正确处理,我们便可以求出该简单算术表达式的值。 三、上机结果 程序清单: #include #include #include #include #include #include using namespace std;

数据结构实验报告 逆波兰表达式

HUNAN UNIVERSITY 课程实习报告 题目逆波兰表达式求值 学生姓名XX 学生学号 专业班级 指导老师 完成日期

一、需求分析 1.本程序要求对用户输入一个后缀表达式,打印输出其结果。 2.后缀表达式有用户通过键盘输入,其中两相邻操作数之间利用空格隔开,以“#”表达结束。如果该后缀表达式正确,那么在字符界面上输出其结果,计算结果小数点后面保留两位有效数字,如果不正确,请在字符界面上输出表达式错误提示。 3.测试数据 输入 2 3*1-# 输出 5 二、概要设计 1.抽象数据类型 为实现上述程序的功能,应以一个字符数组存储用户的输入,运算中运用到整数及浮点数。 2.算法的基本思想 根据题目要求,计算后缀表达式,需要用到堆栈来实现。算法如下: 1)假设此表达式正确从字符串第一个开始扫描,遇到运算数就先转化成为数值然后压入堆栈中, 2)如遇到运算符则弹出堆栈上面的两个元素,并进行对应的运算,将得到的值压入栈中,循环计算,然后往堆栈中压入结果,直到最后一个字符为止。 3)若表达式错误:返回错误提示。 ADT: Stack{ 操作对象:字符,整数,浮点数 基本操作: Stack(int size);//构造大小为size的栈 ~Stack();//释放内存空间 void push(const float& n);//数据进栈 float pop();//数据出栈 int length();//计算栈内元素个数 } 3.程序的流程 程序由三个模块组成: 1)输入模块:输入一个表达式的字符串。 2)计算模块:设计一个计算后缀表达式的函数。 3)输出模块:输出显示计算的结果。 三、详细设计 1.算法的具体设计 算法流程图如下:

编译原理-实验报告4-逆波兰

计算机硬件实验室实验报告 姓名学号班级成绩 设备名称及软件环境逆波兰 一、实验目的: 将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。 二、实验要求: 输出的格式如下: (1)逆波兰式的生成及计算程序,编制人:姓名,学号,班级 (2)输入一以#结束的中缀表达式(包括+—*/()数字#):在此位置输入符 号串如(28+68)*2# (3)逆波兰式为:28&68+2* (4)逆波兰式28&68+2*计算结果为192 备注:(1)在生成的逆波兰式中如果两个数相连则用&分隔,如28和68,中间用&分隔; (2)在此位置输入符号串为用户自行输入的符号串。 注意: 1.表达式中允许使用运算符(+-*/)、分割符(括号)、数字,结束符#; 2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好); 三、实验过程: (一)准备: 1.阅读课本有关章节, 2.考虑好设计方案; 3.设计出模块结构、测试数据,初步编制好程序。 (1)定义部分:定义常量、变量、数据结构。 (2)初始化:设立算符优先分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等); (3)控制部分:从键盘输入一个表达式符号串; (4)利用算符优先分析算法进行表达式处理:根据算符优先分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。 (5)对生成的逆波兰式进行计算。 (二)上课上机: 将源代码拷贝到机上调试,发现错误,再修改完善。第二次上机调试通过。 四、实验结果 (1)写出程序流程图 (2)给出运行结果

程序: #include #include #include #define max 100 char ex[max]; /*存储后缀表达式*/ void trans(){ /*将算术表达式转化为后缀表达式*/ char str[max]; /*存储原算术表达式*/ char stack[max]; /*作为栈使用*/ char ch; int sum,i,j,t,top=0; // printf("*****************************************\n"); printf("逆波兰式的生成及计算程序,编制人:武普泉,20号,1020562班\n"); printf("输入一以#结束的中缀表达式(包括+ - * /()数字# ):"); // printf("******************************************\n"); // printf("算数表达式:"); i=0; /*获取用户输入的表达式*/ do{ i++; scanf("%c",&str[i]); }while(str[i]!='#' && i!=max); sum=i; t=1;i=1; ch=str[i];i++; while(ch!='#'){ switch(ch){ case '(': /*判定为左括号*/ top++;stack[top]=ch; break; case ')': /*判定为右括号*/ while(stack[top]!='('){ ex[t]=stack[top];top--;t++; } top--; break; case '+': /*判定为加减号*/ case '-': while(top!=0&&stack[top]!='('){ ex[t]=stack[top];top--;t++; } top++;stack[top]=ch; break; case '*': /*判定为乘除号*/ case '/':

面向对象程序设计课程设计报告同学通讯录管理程序

目录 1.设计题目 (1) 2.设计目的和内容 (1) 2.1设计目的 (1) 2.2设计内容 (1) 3.基本功能描述 (1) 4.设计思路 (1) 5.软件设计 (2) 5.1设计步骤 (2) 5.2界面设计 (3) 5.3关键功能的实现 (3) 5.3.1添加记录 (3) 5.3.2删除记录 (4) 5.3.3选中记录 (4) 5.3.4确认修改 (4) 5.3.5保存记录 (4) 5.3.6退出 (4) 6.结论与心得体会 (4) 7.参考文献 (4) 8.附录 (5) 8.1调试报告及测试结果 (5)

8.2关键源代码 (10) 8.2.1 Student类 (10) 8.2.2全局 (10) 8.2.3List Control初始化 (10) 8.2.4添加记录 (11) 8.2.5删除记录 (11) 8.2.6选中记录 (12) 8.2.7修改记录 (12) 8.2.8保存记录 (13) 8.2.9退出程序 (13)

1.设计题目 同学通讯录管理程序 2.设计目的和内容 2.1设计目的 1)学习Visual C++的MFC开发程序的步骤。. 2)综合运用所学的类、继承和多态的知识。 3)进一步掌握程序的调试方法。 2.2设计内容 1)利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件; 2)设计通讯录的数据结构(如:以数组或者动态链表)和相应的类; 3)完成对通讯录中记录的增加、修改、删除和显示; 4)将通讯录存入文本文件。 3.基本功能描述 可以实现学生信息(姓名、学号、系别、邮箱、电话)的添加、显示、选中修改、删除选中和保存并退出程序的功能。 4.设计思路 1)创建基于对话框的MFC应用程序,添加控件:5个Edit Control、6个Button、1 个List Control; 2)在5个Edit Control分别输入相应信息,点击“添加记录”Button可在List Control 中显示相应信息,同时清空五个Edit Control以便下一个学生信息的输入; 3)点中List Control选中已有一组学生信息,点击“删除记录”Button可删除该组 信息; 4)点中List Control选中已有一组学生信息,点击“选择该列”Button将该列信息 返回到5个Edit Control。修改完成后点击“确认修改”Button,对List Control 中选中列完成修改; 5)点击“确认保存”将信息保存到文本文档; 6)点击“退出”退出程序。 7)可在D盘查看保存的信息。

面向对象程序设计课设题目

2012计算机科学与技术专业 面向对象课程设计题目 一设计要求 每个题目可以1人或至多两人,按题目要求完成程序设计及课程设计报告。 (若两人一个题目,需各自独立完成,题目相同者的课程设计报告不能完全相同。)二题目列表 三题目内容及要求 题目1 矩阵运算 内容及要求: 定义矩阵类,实现矩阵加法、减法、乘法、矩阵转置、求矩阵的逆矩阵等。 用程序实现验证n*n矩阵的如下定理: A(BC)=(AB)C。

题目2 填XO游戏程序 内容及要求: 游戏规则和胜利条件: 棋盘共有5行5列: 选择难度(1):两个斜对角之一都为X或O,则玩家胜。一横行都为X或O则玩家胜。)一竖行都为X或O则玩家胜。 选择难度(2):两个斜对角之一都为X或O,则玩家胜。 选择难度(3):两个斜对角都为X或O,则玩家胜。 输入必须为一个两位整数,如11,代表棋盘的第一行第一列,输完后按回车键; 玩者下一步X或O,计算机也自动下一步X或O。 程序运行示例: 题目3 统计学生成绩 内容及要求: 要求编写一个“Student”类及用来存取文件的save()和load()函数,使用函数及运算符重载技术完成如下操作: (1)计算每个学生的平均成绩,将数据存入文件stud.dat中并验证是否正确地存入了文件。(2)要求对“<<”和“>>”运算符进行重载。 (3)把学生姓名和平均成绩抽取出来,建立一个简明文件stud_mean.dat,并验证是否正确地存入了。 (4)从文件stud.dat按如下格式输出大于等于平均成绩的学生信息: 学号姓名算术语文平均 (5)将两门功课成绩都不及格的学生信息从文件中删除并另外存入文件bad.dat中。 (6)编写能检索文件中某个学生信息的子程序。如无此学生,输出“未查到”信息。 (7)使用多文件编程和菜单操作。 题目4 会议记录管理系统 内容及要求: 定义会议信息类class Conference

编译原理波兰式和四元式

实验三波兰式和四元式及计算 课程编译原理实验名称波兰式和四元式第页班级11计本学号姓名 实验日期:2013年月日报告退发(订正、重做) 一、实验目的: 将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并计算用逆波兰式来表示的算术表达式的值。 二、实验说明 1、逆波兰式定义 将运算对象写在前面,而把运算符号写在后面。用这种表示法表示的表达式也称做后缀式。逆波兰式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用逆波兰式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。 2、产生逆波兰式的前提 中缀算术表达式 3、逆波兰式生成的实验设计思想及算法

(1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 (2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“#”。 (3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。 (4)如果不是数字,该字符则是运算符,此时需比较优先关系。 做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将此运算符栈顶的运算符从栈中弹出,将该字符入栈。 (5)重复上述操作(1)-(2)直至扫描完整个简单算术表达式,确定所有字符都得 到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。 3、逆波兰式计算的实验设计思想及算法 (1)构造一个栈,存放运算对象。 (2)读入一个用逆波兰式表示的简单算术表达式。 (3)自左至右扫描该简单算术表达式并判断该字符,如果该字符是运算对 象,则将该字符入栈。若是运算符,如果此运算符是二目运算符,则将对栈顶部的两个运算对象进行该运算,将运算结果入栈,并且将执行该运算的两个运算对象从栈顶弹出。如果该字符是一目运算符,则对栈顶部的元素实施该运算,将该栈顶部的元素弹出,将运算结果入栈。 (4)重复上述操作直至扫描完整个简单算术表达式的逆波兰式,确定所有 字符都得到正确处理,我们便可以求出该简单算术表达式的值。

C面向对象程序设计课程设计报告

《C++面向对象程序设计》课程设计报告题目:分数计算器设置 班级: K0312415 专业:计算机科学与技术 学号: 姓名:周林 指导教师: 小组成员:周林,张齐满 二O一三年 10 月 15 日

一、课程设计问题描述 分数计算器设计是高等学校教务管理的重要组成部分,其内容较多,为了简化计论, 要求设计的管理系统能够完成以下功能: (1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。 (2)输入/输出:对流提取和流插入运算符进行重载。 (3)计算功能:可进行分数的加、减、乘和除法运算。 (4)化简功能:将分数化简为最简分数。 (5)异常处理功能:分数中分母不能为零。 (6)菜单功能:每种功能的操作都是在菜单中进行相应选择。 二、课程设计目的和要求: 经过一个学期的《C++面向对象程序设计》课程的学习,已经有了一定地程序设计基础,但是要学好C++面向对象程序设计这门课程,不仅要认真阅读课本知识和从事课堂学习,更重要的是要进行上机实践,通过上机实践才能增强和巩固知识。 三、系统设计(算法分析) 1、系统由5功能,可分别执分数的.加法运算,减法运算,.乘法运算和除法运算,还可以将分数化简。 1.加法运算可计算两个分数相加。 2.减法运算可计算两个分数相减。 3.乘法运算可计算两个分数相乘。 4.除法运算可计算两个分数相除。 5.化简运算可计算一个分数化简。 2、流程图

3、分数计算器设置各函数的功能和实现的相关功能由对应的函数来实现。 (1)函数jia() (2)函数jian() (3)函数cheng()实现分数乘法运算。 (4)函数chu()实现分数除法运算。 (5)函数shuchu()实现分数的输出和化简。 四、程序源代码 pp : Defines the entry point for the console application.

中缀表达式转逆波兰式并求值

中缀表达式转逆波兰式并求值 // 标题: 栈的应用——中缀表达式转逆波兰式 // 时间: 2015年4月14日// 所有者: Vae #include #include #include #include #include #define STACK_INIT_SIZE 100 #define STACKCREATE 10 #define OK 1 #define ERROR 0 typedef struct double_stack { int *num; int *index; }DOUBLESTACK; typedef struct SqStack { DOUBLESTACK top; DOUBLESTACK base; int stacksize; }SqStack; // 函数名: InitStack // 形参类型: SqStack * // 函数功能构造一个栈void InitStack(SqStack *S) { S->base.index = (int *)malloc(sizeof(int)*STACK_INIT_SIZE);

S->base.num = (int *)malloc(sizeof(int)*STACK_INIT_SIZE); if (!(S->base.num && S->base.index)) { printf("构造栈失败!\n"); exit(-1); } S->top.num = S->base.num; S->top.index = S->base.index; S->stacksize = STACK_INIT_SIZE; return ; } // 函数名: Push // 形参类型: SqStack *, int, int // 函数功能插入e为新的栈顶元素int Push(SqStack *S, int m, int n) { if ((S->top.num - S->base.num) >= S->stacksize) { S->base.index = (int *)realloc(S- >base.index,sizeof(int)*(STACK_INIT_SIZE+STACKCREATE)); S->base.num = (int *)realloc(S- >base.num,sizeof(int)*(STACK_INIT_SIZE+STACKCREATE)); if (!(S->base.num || S->base.index))

《面向对象程序设计》课程设计选题

一、课程设计报告要求: 1、不少于5000字,使用A4打印。 2、主要内容及装订顺序:封面、目录、正文、参考文献 3、正文部分应该包括:需求分析、系统概述、系统运行环境、功能需求描述、总体设计、系统模块结构图、数据库设计(如需数据库,应包含概念设计、逻辑设计、物理设计)、程序模块设计(含功能描述、用户界面设计、程序代码设计与分析、运行结果,每个人可选择2-3个模块进行)、系统使用说明。 4、界面要求: 1). 尽量使用图形界面实现,要符合日常软件使用规范来设计菜单和界面。 2). 如果无法实现图形界面,则在命令行方式下也需要提供菜单,方便用户操作。 5、其他要求: 1). 标识符命名遵循Windows命名规范。 2). 能够注意各种异常处理,注重提高程序运行效率。 二、课程设计需要提交的内容: 1、装订完整的课程设计报告,每人上交一份课程设计报告。 2、程序和课程设计报告压缩后放到BB讨论板 1、一个简单的算法演示程序 1. 选择一个算法(提供选择见下),利用各种方法(图形、动画等)演示算法的演示 过程。 2. 可以进行手动演示,也可以自动步进式演示。 3. 允许用户设置算法的各个输入参数,以及自动步进式演示中的时间间隔。 4. 不同的算法输入要求见下。 2、一个简单的网络聊天程序 1. 实现类似QQ的功能,自动侦测局域网内部启动该软件的用户,并显示在用户列表中。 2. 可以进行两个人之间的私聊。 3. 可以群聊。 4. 可以发送文件。 3、一个简单的万年历 1. 能够显示实现1800-2100年的日期,包括公历、农历、星期、二十四节气。 2. 能够按照月份格式显示,或按照星期格式显示。 3. 能够显示系统时间。 4. 能够查询若干国际大城市(分布在不同时区)的时间。

编译原理-逆波兰式的产生及计算

学号07 成绩 编译原理上机报告 名称:逆波兰式的产生及计算 学院:信息与控制工程学院 专业:计算机科学与技术 班级:计算机1401班 姓名:叶达成 2016年11月4日

一、上机目的 通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。 1、选择最有代表性的语法分析方法,如LL(1) 语法分析程序、算符优先分析程序和LR分析分析程序,并至少完成两个题目。 2、选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。 ⑴实验前的准备 按实验的目的和要求,编写语法分析程序,同时考虑相应的数据结构。 ⑵调试 调试例子应包括符合语法规则的算术表达式,以及分析程序能够判别的若干错例。 ⑶输出 对于所输入的算术表达式,不论对错,都应有明确的信息告诉外界。 ⑷扩充 有余力的同学,可适当扩大分析对象。譬如: ①算术表达式中变量名可以是一般标识符,还可含一般常数、数组元素、函数调用等等。 ②除算术表达式外,还可扩充分析布尔、字符、位等不同类型的各种表达式。③加强语法检查,尽量多和确切地指出各种错误。 二、基本原理和上机步骤 基本原理: 将运算对象写在前面,而把运算符号写在后面。用这种表示法表示的表达式也称做后缀式。逆波兰式的特点在于运算对象顺序不变,运算符号位置反映运算顺序。采用逆波兰式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式。 上机步骤: (1)构造一个栈,存放运算对象。 (2)读入一个用逆波兰式表示的简单算术表达式。 (3)自左至右扫描该简单算术表达式并判断该字符,如果该字符是运算对象,则将该字符入栈。若是运算符,如果此运算符是二目运算符,则将对栈顶部的两个运算对象进行该运算,将运算结果入栈,并且将执行该运算的两个运算对象从栈顶弹出。如果该字符是一目运算符,则对栈顶部的元素实施该运算,将该栈顶部的元素弹出,将运算结果入栈。 (4)重复上述操作直至扫描完整个简单算术表达式的逆波兰式,确定所有字符都得到正确处理,我们便可以求出该简单算术表达式的值。 三、上机结果 程序清单: #include #include<> #include<> #include #include #include using namespace std;

逆波兰表达式实验报告

HUNAN UNIVERSITY 课程实习报告 题目长浮点型逆波兰表达式求值 学生姓名毛宇锋吴淑珍王小玉 学生学号16 20 22 专业班级信息安全一班 指导老师夏艳刘炜 完成日期2014.4.8

一、需求分析 读入一个后缀表达式,利用堆栈来计算该表达式的值,同时要效验后缀表达式是否正确。 二、概要设计 抽象数据类型 为实现上述程序的功能,应以数据元素为长浮点型的栈来存储用户的输入,以及计算出的结果。 算法的基本思想 由于读入屏幕的字符,所以第一步是区分字符代表数值还是运算符,此外,还应该对字符是否为小数点做一个特别的判断。当确定系统读入的是数值时,应以double型将数值压入栈中,当确定读入的是运算符时,首先判断当前栈中的数值是否够运算(即至少有两个元素在栈中),满足该条件后分别弹出栈顶的两个元素,然后对其进行系统要求的运算,重新压入栈中。 程序的流程 程序由三个模块组成: (1)输入模块:循环输入字符,当遇到#号时结束 (2)计算模块:将输入的字符转化为相应的长浮点型数字并输出 (3)输出模块:显示最终计算结果 三、详细设计 物理数据类型 设计的关键在于读取字符型并转化为长浮点型 算法的具体步骤 循环输入字符串 1.判断当前的输入是否为数字,当结果为真时,执行字符串转换为长浮点型数的函数; 2.判断是否为操作符,并给定每一个操作符返回相应的计算结果。 算法的时空分析 由于在循环内的操作都为时间复杂度为θ(1)的,故算法的时间复杂度取决于输入字符的多少,令输入的字符为n时,算法的时间复杂度应该为θ(n)。 空间复杂度:给定栈的大小为10,即允许最多压入十个元素而不进行任何运算,由于逆波兰表达式通常最多输入两个元素即进行一次运算,所以栈的大小至少为2,这里给定10在空间的开销也很小。 输入和输出的格式 输入:在字符界面上输入一个后缀表达式,其中两相邻操作数之间利用空格隔开。以“#”表示结束。 输出:如果该后缀表达式正确,那么在字符界面上输出其结果,计算结果小数点后面保留两位有效数字,如果不正确,请在字符界面上输出表达式错误提示。 五、测试结果 为了验证测试具有普遍性,分别用个位整数、个位小数、多位整数、多位小数进行运算,如输入:4 0.2 + 10 * 3.6 – 3 / 即计算((4+0.2)*10-3.6)/3 结果应该等于12.8 下图为程序运行结果:

《面向对象程序设计课程设计》题目

面向对象程序设计课程设计题目 设计说明 1. 每人一组,每组选择一个题目;如果列出多个版本,只需要完成其中一个版本即可。 2. 由学习委员负责统计各组员及其题目,以电子档模式提交题目列表名单。 3. 每组必须给出相应的UML类图,可用Visio或者其他类似的工具完成。 设计要求 1.编码规范要求 遵循Java编码规范,参见附录。 2.知识点要求 项目应至少覆盖以下知识点:封装、继承与多态等基本概念;方法和数组;输入输出流;使用抽象类、接口;对象组合;异常处理;包的使用。 3.文档打包及提交要求 文档打包:以“班级-学号-姓名-题目-设计报告.rar”形式将相关文档打包。 提交要求:统一交至教学平台。 压缩包的内容: 1)运行正确的源代码(包括文件夹结构)。 2)设计报告:描述软件功能、和设计方案的UML类图;设计中涉及的主要知识点;运行结果截图;使用帮助文档。 题目列表及说明: 1. 打字游戏 GUI本地版 可根据一片文章自动导入单词 整个单词下落或者淡入淡出 同时多个单词出现 对输入错误的单词分析记忆功能 积分 2. 文件加密和解密 要求:采用图形用户界面

1)给定任意一个文本文件,进行加密,生成另一个文件。 2)对加密后的文件还原。 3. 5子棋游戏 设计程序,完成下述功能: 在大于9条线的方形网格棋盘上,放置黑白两色棋子; 两人各执一色,通过网络对弈; 可以在任何两条线的交点上放置棋子; 同色棋子先同行、同列或者同队角线上5颗连成一条线者获胜。 4. 俄罗斯方块(网络版) 设计程序,完成下述功能:完成一个可以两个人通过网络对战的俄罗斯方块游戏,每一方都可以在自己的屏幕上看到对方的当前游戏状况,游戏先结束的一方为失败者。 5. 音乐播放器(JavaGUI本地版) 设计程序,完成下述功能: 选择各类声音文件进行播放。 完成前进、后退、暂停、回放等控制功能。 6. 电子相册(JavaGUI本地版) 设计程序,完成下述功能: 选择图形的显示。 完成图形的放大、缩小、剪切、旋转等控制功能。 图片的自动播放功能。 7. 多人聊天室((JavaGUI本地版/WEB版) 多人同时上网聊天。 8.扑克游戏(JavaGUI本地版/WEB版) 开发具有“升级”功能的4人对战游戏。“升级”又叫拖拉机。要求采用Java 网络编程技术。 9.编写一个记事本程序 要求: 用图形用户界面实现。 能实现编辑、保存、另存为、查找替换等功能。 提示:使用文件输入输出流。 10.模拟龟兔赛跑 要求: 用图形用户界面实现。 能设置比赛时间,马匹的数量等等。

逆波兰式

塔里木大学信息工程学院 论文 编译原理课程设计 课目:编译原理 学生姓名:\ 学号: 学生姓名 学号: 所属学院:信息工程学院 班级:

设计任务书 指导教师(签章): 年月日

摘要: 编译原理是计算机科学与技术专业最重要的一门专业基础课程,内容庞大,涉及面广,知识点多。编译原理旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。它是计算机科学与技术专业最重要的一门专业基础课程,内容庞大,涉及面广,知识点多。由于该课程教、学难度都非常大,往往费了大量时间而达不到预期教学效果俗语说:学习的最好方法是实践。本课程设计正是基于此,力求为学生提供一个理论联系实际的机会,通过布置一定难度的课题,要求学生独立完成。我们这次课程设计的主要任务是编程实现对输入合法的中缀表达式进行词法分析、语法分析,构造相应的逆波兰式,计算后缀表达式的值输出结果。比如中缀表达式:C*(E+F),其后缀表达式为:CEF+*。逆波兰式也叫后缀表达式,即将运算符写在操作数之后。通过实践,建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索前言知识的习惯,树立团队协作精神。同时,课程设计可以充分弥补课堂教学及普通实验中知识深度与广度有限的缺陷,更好地帮助学生从全局角度把握课程体系。 关键字:逆波兰式;语法分析;中缀表达式

1 课设综述 1.1 课设来源 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。对中缀表达式的计值,并非按运算符出现的自然顺序来执行其中的各个运算,而是根据算符间的优先关系来确定运算的次序,此外,还应顾及括号规则。因此,要从中缀表达式直接产生目标代码一般比较麻烦。相对的,逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序。 1.2 设计意义 对于实现逆波兰式算法,难度并不大,但为什么要将看似简单的中缀表达式转换为逆波兰式,原因就在于这个简单是相对人类的思维结构来说的,对计算机而言中缀表达式是非常复杂的结构。相对的,逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序。在逆波兰式中,不存在运算符的优先级问题,也不存在任何括号,计算的顺序完全按照运算符出现的先后次序进行。比中缀表达式的求值要简单得多。1.3 设计目标 编写程序,实现逆波兰式的生成和计算。首先对输入的表达式进行词法分析,然后进行语法分析,最后进行逆波兰式的输出和计算。过实践,建立系统设计的整体思想,锻炼编写程序、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索知识的习惯。 1.4 遇到的问题 如何通过递归下降方法分析表达式,并且输出词法分析、语法分析过程及结果。如何实现把中缀表达式转换成后缀表达式,并计算表达式的结果。 1.5 需解决的关键技术 本次课程设计中的关键是:通过递归下降方法分析表达式,主要有词法分析和语法分析,输出分析结果,判断表达式是否合法。如何确定操作符的优先顺序,确定数据的进栈及出栈顺序,根据后缀表达式计算表达式的结果。以及如何编写、调试、修改代码。还要了解一个题目有许多种解决方法。锻炼我们的思维能力。

逆波兰式求值

一、需求分析 1.从键盘中输入一个后缀表达式,该表达式包括加减乘除等操作符,以及正整数做诶操作数等。 2.需要利用堆栈来实现。 3.在Visual C++6.0界面操作。 问题描述: 读入一个后缀表达式,利用堆栈来计算该表达式的值,同时要校验后缀表达式是否正确。 测试数据用例 (1)输入:2 3 * 1 - # 输出:5 (2)输入:2 3 * 1 - * # 输出:表达式有误 (3)输入: 2 0 / 4 * # 输出:表达式有误 二、概要设计 抽象数据类型 为实现上述程序的功能,则以字符型数据存储用户的输入。若为数值,则用自定义函数将其转化为整形数据;若为操作符,则仍为字符型数据,以便计算出的结果。 算法的基本思想 根据题目要求,采用堆栈来实现。该算法的基本思想是运用自定义函数求解逆波兰表达式求值问题问题。 程序的流程 程序由三个模块组成: (1)输入模块:完成表达式的输入,存入栈S中。 (2)计算模块:利用自定义函数,计算逆波兰表达式的值。 (3)输出模块:屏幕上显示出最终计算结果。 三、详细设计

物理数据类型 程序中要求输入的表达式为任意的,但必须以#标志表达式输入的结束,只有正确的逆波兰表达式才能显示出最终计算结果。 算法的具体步骤 算法的具体步骤为: 建立一个名为s的栈。 将表达式的值一个个压入栈S中。在循环中,需要分类讨论:如果表达式中的值为“#”,则将#前的元素弹出栈中;如果表达式中的值为空格,那么继续压入,如果表达式中的值为0至9的字符,则要通过一个自定义的转换函数将其转换为int型数值;如果连续几个0至9的字符中间无空格隔开,则在计算中应将其还原为多位数;若表达式中的值为运算符,则要将栈S中所压入数值弹出栈,进行相应的计算后,再将结果压入栈中(值得注意的是,运算符是不入栈的);除此之外的情况都归类为输入的表达式错误。 相应的入栈出栈及数值计算部分都由自定义函数来完成。 输入和输出的格式 输入 在字符界面上输入一个后缀表达式,其中两相邻操作数之间利用空格隔开。以“#”表示结束。 输出 如果该后缀表达式正确,那么在字符界面上输出其结果,计算结果小数点后面保留两位有效数字,如果不正确,请在字符界面上输出表达式错误提示。 四、调试分析 略。(已在老师面前调试) 五、测试结果

面向对象课程设计题目汇总及要求

面向对象程序设计课程设计题目汇总 选题说明及要求说明: 1、由于各选题的难度不同,将选题分为A、B、C三个等级,每个等级对应的最高分依次为:100分、85分和75分。达到基本要求且有一定程度和创新和见解的同学可获得较高分数。学生可根据自己的情况,自行选择。 2、每个题目最多只能有两组,若超过两组,则该题目自动作废! 3、规定2-4人的题目,若实际人数比分组人数每少一人,则题目等级自动上调一级。 4、若实际小组人数比规定人数多一人,则题目等级自动下调一级。实际人数比规定人数多两个的分组无效!

题目列表 题目一、单链表(1人)(C级) (3) 题目二:一元多项式求和(1人)(B级) (3) 题目三:快餐店点餐系统(3人)(B级) (3) 题目四、简单车辆管理系统(3人)(B级) (4) 题目五、滚动发车系统设计(3人)(B级) (4) 题目六、简单银行账户系统(3人)(A级) (5) 题目七、银行叫号系统设计(3人)(B级) (5) 题目八、学生学籍管理系统(3人)(B级) (6) 题目九、教师工资信息管理系统(3人)(A级) (6) 题目十、书刊租借信息管理系统(3人)(A级) (7) 题目十一、仓库管理信息系统(3人)(B级) (7) 题目十二、研究生管理信息系统(3人)(B级) (8) 题目十三、图书馆管理信息系统(3人)(B级) (8) 题目十四、学生宿舍管理信息系统(3人)(B级) (9) 题目十五、理财管理信息系统(3人)(B级) (9) 题目十六、IT设备资产管理系统(3人)(B级) (10) 题目十七、员工管理信息系统(3人)(B级) (10) 题目十八某软件公司客户关系(CRM)管理系统(4人)(A级).. 11 题目十九:足球联赛排名(3人)(A级) (11) 题目二十:小学生四则运算测验(3人)(B级) (12) 题目二十一:学生电子投票平台设计(3人)(B级) (12) 题目二十二:物品库存管理系统(3人)(B级) (12) 题目二十三:个人财政支出管理系统(2人)(C级) (13) 题目二十四:电话簿管理系统(2人)(C级) (13) 题目二十五:股票交易系统(4人)(A级) (13) 题目二十六:学生信息管理系统(2人)(C级) (13) 题目二十七:学生成绩管理系统(2人)(C级) (13) 题目二十八:小型字符串类(2人)(B级) (14) 题目二十九:分数计算器(2人)(B级) (14) 题目二十九:复数计算器(1人)(C级) (14) 题目三十:无符号大整数计算器(2人)(B级) (15) 题目三十一:超市密码存储箱系统(2人)(A级) (15)

相关主题
文本预览
相关文档 最新文档