利用栈求表达式的值,可供小学生作业,并能给出分数数据结构课程设计说明书格.pdf
《利用栈求表达式的值,可供小学生作业,并能给出分数数据结构课程设计说明书格.pdf》由会员分享,可在线阅读,更多相关《利用栈求表达式的值,可供小学生作业,并能给出分数数据结构课程设计说明书格.pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中北大学数据结构课程设计说明书学 生 姓名:刘敏杰学号:1021011545 学 院:软件学院专业:软件开发与测试题 目:利用栈求表达式的值,可供小学生作业,并能给出分数指导教师何志英2011年 12 月 20日1.设计任务概述(包括系统总体框图及功能描述)此课题是研究表达式求值的问题,以帮助小学生完成测试.为了达到这个功能,实际我们要做的就是出题,和计算分数给出评价的工作。整体设计都是以这个要求为轴心进行的.为了直观和方便,现画出软件整体设计模块图。利用栈求表达式的值1 整体设计模块图可以清晰的看出软件的几大模块。整个系统的操作流程图可以看出操作的整体流程,如下图2。本设计所采用的数据结构(
2、如:链表、栈、树、图等)根据以上功能说明,设计运算信息,堆栈的存储结构,设计程序完成功能;3。功能模块详细设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义).3.1 详细设计思想学生要进行测试,首先要有试题.那么我们就要先建立试题库.这个试题库的试题是我们在程序运行过程中手动输入,存放在一个shujuku。txt 的文件中。首先在主函数中调用创建试题库函数,将试题存入到试题库文件shitiku。txt 中,然后将该调用从主函数中删除.创建试题库函数:创建指向xuanti 类型的指针,利用循环将输入的测试题该指
3、针的xuanti单元中,最后将该指针中的测试题写入试题库文件shitiku。txt 中。3。2 核心代码(正文宋体小四号字,1。5 倍行距)#include stdio。h#include stdlib。h#include time.h#include#include 数学习题库base)exit(ERROR);S1top=S1base;S1-stacksize=STACK_INIT_SIZE;/IntInitStack void CharInitStack(SqStack2*S2)S2-base=(char*)malloc(STACK_INIT_SIZE sizeof(char));if(!
4、S2base)exit(ERROR);S2top=S2base;S2-stacksize=STACK_INIT_SIZE;/CharInitStack long IntGetTop(SqStack1*S1)/取栈顶元素 long e1;if((S1)。top=(*S1)。base)return 0;e1=((S1)。top 1);return e1;/IntGetTop char CharGetTop(SqStack2*S2)/取栈顶元素 char e2;4 if(S2)。top=(S2)。base)return 0;e2=(S2).top 1);return e2;/IntGetTop in
5、t IntPush(SqStack1 S1,int e1)/入栈(S1).top+=e1;return OK;/IntPush int CharPush(SqStack2 S2,char e2)/入栈(S2)。top+=e2;return OK;/CharPush int IntPop(SqStack1*S1)/出栈 int e1;if(*S1).top=(*S1)。base)return 0;e1=(S1)。top;return e1;/IntPop int CharPop(SqStack2 S2)/出栈 char e2;if(S2).top=(*S2).base)return 0;e2=*
6、-(S2)。top;return e2;/CharPop 5 char Precede(char a,char b)int i,j;char Table8 8=,+,-,/,(,),+,,,,,,-,,,,,,/,,(,,,,,=,;/优先级表格 for(i=0;i 8;i+)if(Table0 i=a)/纵坐标寻找 break;for(j=0;j8;j+)/横坐标寻找 if(Tablej 0=b)break;return Tableji;/Precede int Operate(int a,char theta,int b)/计算表达式值:主要是将大的表达式转化成小的表达式进行逐步求值 in
7、t c;if(theta=+)c=a+b;else if(theta=)c=a b;else if(theta=)c=a*b;else c=a/b;return c;6/Operate int IsOptr(char ch)char ptr10=+,-,*,/,(,),#;for(int i=0;i 7;i+)if(ch=ptr i)return true;return false;long result(char a,SqStack1 OPND,SqStack2 OPTR)/求值 char theta;int b,d,k=0,i=0,j=0,num2=0;IntInitStack(OPND)
8、;CharInitStack(OPTR);CharPush(OPTR,);while(ai!=)if(!IsOptr(ai)k+;if(kj)7 num2=num2*10+(int(ai)-48);k=j=0;i+;if(!IsOptr(ai )k+;if(k=j)IntPush(OPND,num2);else if(IsOptr(ai)switch(Precede(ai,CharGetTop(OPTR)))case:CharPush(OPTR,ai+);if(ai!=(&a i!=)j+;break;case=:CharPop(OPTR);i+;break;case :theta=CharP
9、op(OPTR);d=IntPop(OPND);b=IntPop(OPND);IntPush(OPND,Operate(b,theta,d);break;/switch /else if /while printf(”表达式的正确结果为:”);printf(n”,IntGetTop(OPND));8 return(IntGetTop(OPND));/reslut void Built_shitiKu()int i,num;xuanti*pstu;printf(”输入试题数目:n);scanf(d,num);fflush(stdin);pstu=(xuanti)malloc(num sizeof
10、(xuanti);/动态分配内存 if(pstu=NULL)printf(”没有足够的内存空间!n);return;for(i=0;inum;i+)/输入试题 printf(”第 d 道试题:”,i+1);gets(pstu i.a);fflush(stdin);printf(”n);WriteToFile(pstu,num);/将 pstu 所指向的学生信息写入文件中 memset(pstu,0,num*sizeof(xuanti);/将 pstu 所指向的内存块清0 ReadFromFile(pstu,num);/从文件中读取学生信息到pstu 所指向的内存块中 printf(试题列表:n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 表达式 小学生 作业 给出 分数 数据结构 课程设计 说明书
限制150内