汽院数据结构课设(计算器)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
数据结构
课程设计报告
课设题目:计算器
专业:软件工程
班级: T1323-4
姓名:费昱
成绩:
完成日期: 2015年7月1日-2015年7月10日指导教师: 袁科马春江
目录
一、设计题目 (2)
二、设计目的 (4)
三、总体设计 (5)
四、详细设计
五、设计结果与分析
六、总结(收获和不足)
一、设计题目
计算器的基本使用:计算器使用的基本函数与计算表达式求值问题、集合函数与三角函数、指数函数与对数函数的使用。
详细功能如下:
(1)基本的运算:加,减,乘,除,求余;
(2)基本的优先级预算:小括号,中括号;
(3)基本的三角函数:正弦sin、余弦cos、正切tan 函数;
(4)基本的反三角函数:反正切arcsin、反余切arccos、反正切arctan函数;
(5)基本的函数:sinh、cosh、tanh;
(6)基本的指数函数:2的n次方2^n、10的n次方10^n、自然对数的n次方e^n、任意数的n次方x^n; (7)基本的对数函数:以10为底的x对数log(10,x)、以e为底x的对数ln(x)、以a为底b的对数
log(a,b);
(8)基本的开方函数:算数平方根sqrt(x)、立方算数跟cuberoot(x)、任一数开n次方yroot(x,n); (9)基本的使用函数:阶乘函数fact(x),求余函数mod(x);
(10)基本的集合函数:集合统计sum()、集合的估计
方差var()、集合的总体方差varp()、集合的估
计标准差stdevp()、集合的总体标准偏差stdev
()。
二、设计目的
1、巩固并加深学生对C#语言程序设计知识的理解;
2、培养学生面程序设计思想,使学生认识数据结构在程序设计与构思上的应用于实战;
3、进一步掌握和应用VS2013集成开发环境;
4、提高运用C#语言解决实际问题的能力;
5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的程序实现功能;
6、掌握课本与课外知识的结合、掌握理论与实践的结合、掌握数据与结构的存储关系;
7.掌握基本的编程思想与知识,学会独立思考与动手能力;
8.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
9.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
10.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
11.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
12.锻炼动手操作能力,培养我们的创新思维能力。
三、总体设计
(1)基本思路与流程图:以9*(6+3)为例
①获取intputbox中的字符9*(6+3)内容存入
intput[i]的数组中;
②进行解析intput[i]中的内容,依次解析intput[0]
是否为数字在解析下一个intput[1]中的是否为数
字不是跳出循环,将起始位置为0到1的字符转化
成数值9存入数字栈中;
③检测到intput[1]为操作,“*”进入操作栈,记录
“*”的优先级为level = 3;
④检测下一个intput[2]位字符,进行if (ch == '(')
leftBracket++;
⑤检测下一个intput[3] 是否为数字在解析下一个
intput[1]中的是否为数字不是跳出循环,将起始
位置为2到3的字符转化成数值6存入数字栈中;
⑥检测到intput[4]为操作,“+”进入操作栈,记录
“+”的优先级为level = 1;
⑦检测下一个intput[4] 是否为数字在解析下一个
intput[4]中的是否为数字不是跳出循环,将起始
位置为4到5的字符转化成数值3存入数字栈中;
⑧检测下一个intput[2]位字符,进行if (ch == ')')
rightBracket++; 判断左右括号个数是否相等
(leftBracket == rightBracket),相等无误,可以进行
计算,记录小括号的优先级为:level = 8;
⑨根据优先级进行计算,首先进行小括号的运算,此
时进行的是双目运算,从数字栈取出的数字为“3”
与“6”,进行“+”的运算,运算结果为“9”,数
字“9”进入数字栈中;
⑩此时在进行优先级的运算,只有一个“*”,进行双目运算,取出“9”与“*”进行“*”的计算,登
出最后的计算结果“81”,显示,计算完成。
(2)数据与符号进栈,用栈去存储数据与符号。
class CStack {
private int top;
private ArrayList list;
public CStack() {
list = new ArrayList();
top = -1;
}
(3)判断符号的优先级问题。
①加减同一级别,“+”、“-”,等级为level = 1
②乘除取余同一级别,“*”,“/”,“%”,等级为level
= 3;
③所有的集合函数同一级别:“sum()”、“var()”、“varp
()”、“stdevp()”、“stdev()”、等级为level = 4;
④所有的三角函数同一级别:“sin”、“cos”、“tan”,
“arcsin”、“arcos”、“arctan”,“sinh”、“cosh”、“tanh”,“log(10,x)”、“ln(x)”、“log(a,b)”、
“sqrt(x)”、“cuberoot(x)”、“yroot(x,n)”、“fact
(x)”、“mod(x)”等级为level =5;
⑤所有的指数函数同一级别:“2^n”、“10^n”、“e^n”、
“x^n”、,等级为level =5;
⑥所有的符号操作优先级为:“(”、“)”等级为:level =
8;“^”等级为:level = 6;“[”、“]”等级为level = 9;“,”等级为:level = 0;
(4)区分inputbox中的数据为数值和操作符与字母。
public int DealNum(string input, int i, ArrayList
alist) {
int num = -1;
while (input[i] >= '0' && input[i] <= '9'