《数据结构课程设计报告--表达式求值》由会员分享,可在线阅读,更多相关《数据结构课程设计报告--表达式求值(23页珍藏版)》请在金锄头文库上搜索。
1、 - 1 -课程设计(论文)任务书软件软件 学院 软件工程软件工程 专业 3 班 一、课程设计(论文)题目 表达式求值,可供小学生作业,并能给出分数表达式求值,可供小学生作业,并能给出分数 二、课程设计(论文)工作自 2014 年 12 月 22 日至 2014 年 12 月 26 日。三、课程设计(论文) 地点: 创新大楼实训中心 4 楼 四、课程设计(论文)内容要求: 1本课程设计的目的本课程设计的目的1) 使学生增进对数据结构各理论知识的熟练程度, 2) 加强算法设计的能力,为以后的数据库原理等课程的学习打下良好基础。 , 2课程设计的任务及要求课程设计的任务及要求25.25.表达式求值
2、,可供小学生作业,并能给出分数表达式求值,可供小学生作业,并能给出分数问题描述:问题描述: 利用所学知识,建立一个试题库,供小学生选题。利用所学知识,建立一个试题库,供小学生选题。 基本要求:基本要求: (1)建立试题库文件,随机产生 n 个题目; (2)题目涉及加减乘除,带括号的混合运算; (3)随时可以退出; (4)保留历史分数,能回顾历史,给出与历史分数比较后的评价。 3)课程设计论文编写要求)课程设计论文编写要求1)详细清晰地描述个人的课程设计工作;2)要按照本模板的规格打印誊写课程报告;3)课设报告包括目录、内容提要、正文、课程设计体会、参考文献、附录等;4)课程报告装订按学校的统一
3、要求完成4)评分标准:)评分标准: 1)完成原理分析:20 分; 2)完成设计过程:40 分; - 2 -3)完成代码分析:20 分。4)个人创新工作:20 分。学生签名: 2014 年 12 月 26 日课程设计课程设计( (论文论文) )评审意见评审意见(1)原理分析 (20 分):优( ) 、良( ) 、中( ) 、一般( ) 、差 ( ) ; (2)设计分析 (20 分):优( ) 、良( ) 、中( ) 、一般( ) 、差 ( ) ; (3)程序流程 (20 分):优( ) 、良( ) 、中( ) 、一般( ) 、差 ( ) ;(4)代码分析 (20 分):优( ) 、良( ) 、中
4、( ) 、一般( ) 、差 ( ) ;(5)个人创新 (20 分):优( ) 、良( ) 、中( ) 、一般( ) 、差 ( ) ;(6)格式规范性及考勤是否降等级:是( ) 、否( )评阅人: 职称: 讲师 2010 年 12 月 28 日- 1 -目 录目 录.- 1 -正 文.- 2 -一、需求分析.- 2 -二、个人工作.- 3 -三、概要设计.- 4 -四、源程序.- 5 -五、程序结果.- 17 -课程设计体会.- 21 - 2 -正 文一、需求分析一、需求分析该题目的核心是利用栈这种数据结构来实现一个加减乘除以及 带括弧的混合数学表达式的计算。其次是利用文件来保存和读写试 题库、
5、每次做题的成绩和以往成绩的平均值。 对于数学表达式的计算,可以设置一个运算符栈和一个数字栈, 分别来保存运算符、数字或者中间计算得到的结果。将整个表达式 看做一个字符串,从开头依次判断每个字符是运算符还是数字,若 是运算符,则根据运算符优先级来确定是将其压栈还是弹栈进行计 算;若是数字,则先将其转化并计入一个临时 int 型变量中,看下一 个字符是否为运算符栈,若是,则将临时变量压进数字栈,否则读 取下一个数字字符并进行相关处理后累加到临时变量中,直到下一 个字符为运算符,将临时变量压进数字栈。最后,当字符为“=“时, 结束计算,得到计算结果。 对于试题库,第一次运行程序时需要用户输入若干试题
6、来建立 试题库文件,再次运行时磁盘上已经存在试题库文件,故不需再次 建立试题库,直接读取文件即可。然后从试题库中通过随机数函数 随机抽取若干个试题供用户来做测试。 测试过程中可即时跟踪判断用户所给答案是否正确,并给出相 关提示。测试完毕后给出本次测试得分,对得分进行评价并将得分 存到磁盘文件上。 用户可随时查看成绩的历史记录以及其平均成绩,可随时选择 退出程序。- 3 -2、个人工作个人工作本次的课程数据我是用栈来实现表达式求解,利用栈求表达式 的值,可供小学生作业,并能给出分数。 要求:建立试题库文件,随机产生 n 个题目;题目涉及加减乘除, 带括弧的混合运算;随时可以退出;保留历史分数,能
7、回顾历史, 给出与历史分数比较后的评价。我利用文件来保存和读写试题库, 且要运用磁盘文件。数学表达式的计算,我设置了一个运算符栈与一个数字栈,分别 来保存运算符、数字或者中间计算得到的结果。将表达式看成一个 字符串,从而分种计算。- 4 -3、概要设计概要设计MainPushOp#processSwitchkey 0pushNum 4.#include 5.#include 6.int N; /定义全局变量,表示试题库试题数量 7.typedef struct 8. 9. char a100; 10. int result; 11. Shiti; /试题数据类型 12. typedef str
8、uct 13. 14. int *base,*top; 15. int size; 16. Num; /数字栈 17. typedef struct 18. 19. char *base,*top; 20. int size; 21. Oper; /运算符栈22. int NumInitStack(Num *S1) /构造数字栈 23. 24. S1-base=(int *)malloc(100*sizeof(int); 25. if(!S1-base) 26. 27. printf(“申请内存失败!n“); 28. return 0; 29. 30. S1-top=S1-base; 31.
9、S1-size=100; 32. return 1; 33. - 6 -34. int OperInitStack(Oper *S2) /构造运算符栈 35. 36. S2-base=(char *)malloc(100*sizeof(char); 37. if(!S2-base) 38. 39. printf(“申请内存失败!n“); 40. return 0; 41. 42. S2-top=S2-base; 43. S2-size=100; 44. return 1; 45. 46. int NumGetTop(Num *S1) /得到数字栈栈顶元素 47. 48. int e1; 49.
10、 if(*S1).top=(*S1).base) 50. return 0; 51. e1=*(*S1).top-1); 52. return e1; 53. 54. char OperGetTop(Oper *S2) /得到运算符栈栈顶元素 55. 56. char e2; 57. if(*S2).top=(*S2).base) 58. return 0; 59. e2=*(*S2).top-1); 60. return e2; 61. 62. void NumPush(Num *S1,int e1) /数字栈压栈 63. 64. *(*S1).top+=e1; 65. 66. void OperPush(Oper *S2,char e2) /运算符栈压栈 67. 68. *(*S2).top+=e2;- 7 -69. 70. int NumPop(Num *S1) /数字栈弹栈 71. 72. int e1; 73. if(*S1).top=(*S1).base) 74. return 0; 75. e1=*-(*S1).top; 76. return e1; 77. 78. char OperPop(Oper *S2) /运算符栈弹栈 79. 80. char