771编号利用栈求表达式的值,可供小学生作业,并能给出分数 数据结构课程设计说明书格式

上传人:玩*** 文档编号:145814853 上传时间:2020-09-23 格式:PDF 页数:22 大小:270.35KB
返回 下载 相关 举报
771编号利用栈求表达式的值,可供小学生作业,并能给出分数 数据结构课程设计说明书格式_第1页
第1页 / 共22页
771编号利用栈求表达式的值,可供小学生作业,并能给出分数 数据结构课程设计说明书格式_第2页
第2页 / 共22页
771编号利用栈求表达式的值,可供小学生作业,并能给出分数 数据结构课程设计说明书格式_第3页
第3页 / 共22页
771编号利用栈求表达式的值,可供小学生作业,并能给出分数 数据结构课程设计说明书格式_第4页
第4页 / 共22页
771编号利用栈求表达式的值,可供小学生作业,并能给出分数 数据结构课程设计说明书格式_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《771编号利用栈求表达式的值,可供小学生作业,并能给出分数 数据结构课程设计说明书格式》由会员分享,可在线阅读,更多相关《771编号利用栈求表达式的值,可供小学生作业,并能给出分数 数据结构课程设计说明书格式(22页珍藏版)》请在金锄头文库上搜索。

1、中北大学中北大学 数数 据据 结结 构构 课课 程程 设设 计计 说说 明明 书书 学学生生姓姓名名:刘敏杰学学 号号:1021011545 学学 院院:软件学院软件学院 专专 业业:软件开发与测试 题题 目目: 利用栈求表达式的值, 可供小学生作业, 并能给出分数 指指 导导 教教 师师何志英何志英 2011 年 12 月 20 日 1 1. 设计任务概述(包括系统总体框图及功能描述)设计任务概述(包括系统总体框图及功能描述) 此课题是研究表达式求值的问题,以帮助小学生完成测试。为了达到这个功 能,实际我们要做的就是出题,和计算分数给出评价的工作。整体设计都是以这 个要求为轴心进行的。为了直

2、观和方便,现画出软件整体设计模块图。 整体设计模块图可以清晰的看出软件的几大模块。 整个系统的操作流程图可以看 出操作的整体流程,如下图 利用栈求表达式的值 创 建 试 题 库 试 题 测 试 查 看 历 史 分 数 随 时 退 出 开始 结束 菜单选择 试 题 测 试 查 看 历 史 分 数 输入 1 输入 2 输入 0 2 2. 本设计所采用的数据结构(如:链表、栈、树、图等)本设计所采用的数据结构(如:链表、栈、树、图等) 根据以上功能说明,设计运算信息,堆栈的存储结构,设计程序 完成功能; 3. 功能模块详细设计功能模块详细设计 在此说明每个部分的算法设计说明(可以是描述算法的流程图)

3、 ,每 个程序中使用的存储结构设计说明 (如果指定存储结构请写出该存储 结构的定义) 。 3.1 详细设计思想 学生要进行测试,首先要有试题。那么我们就要先建立试题库。这个试题库的试题是我 们在程序运行过程中手动输入,存放在一个 shujuku.txt 的文件中。 首先在主函数中调用创建试题库函数,将试题存入到试题库文件 shitiku.txt 中,然后将 该调用从主函数中删除。 创建试题库函数 : 创建指向xuanti类型的指针, 利用循环将输入的测试题该指针的xuanti 单元中,最后将该指针中的测试题写入试题库文件 shitiku.txt 中。 3.2 核心代码 (正文宋体小四号字,1.

4、5 倍行距) #include #include #include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define ERROR 0 3 #define OK 1 /定义表达式 typedef struct shiti char a20; long result; xuanti; typedef struct SqStack1 /建立数字栈 int *base; int *top; int stacksize; SqStack1; typedef struct SqStack2 /建立

5、运算符栈 char *base; char *top; int stacksize; SqStack2; void WriteToFile(xuanti *pstu,int num); void ReadFromFile(xuanti *pstu,int num); void page_title(char *menu_item) /建立菜单 printf( 数学习题库 base=(int *)malloc(STACK_INIT_SIZE*sizeof(int); if(!S1-base) exit(ERROR); S1-top=S1-base; S1-stacksize=STACK_INIT

6、_SIZE; /IntInitStack void CharInitStack(SqStack2 *S2) S2-base=(char *)malloc(STACK_INIT_SIZE*sizeof(char); if(!S2-base) exit(ERROR); S2-top=S2-base; S2-stacksize=STACK_INIT_SIZE; /CharInitStack long IntGetTop(SqStack1 *S1) /取栈顶元素 long e1; if(*S1).top=(*S1).base) return 0; e1=*(*S1).top-1); 5 return

7、e1; /IntGetTop char CharGetTop(SqStack2 *S2) /取栈顶元素 char e2; if(*S2).top=(*S2).base) return 0; e2=*(*S2).top-1); return e2; /IntGetTop int 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(SqSta

8、ck1 *S1) /出栈 int e1; if(*S1).top=(*S1).base) return 0; e1=*-(*S1).top; 6 return e1; /IntPop int CharPop(SqStack2 *S2) /出栈 char e2; if(*S2).top=(*S2).base) return 0; e2=*-(*S2).top; return e2; /CharPop char Precede(char a,char b) int i,j; char Table88= ,+,-,*,/,(,),#, +, -, *, /, (, , #, ,=, ; /优先级表格

9、 for(i=0;i8;i+) if(Table0i=a) /纵坐标寻找 break; for(j=0;j8;j+) /横坐标寻找 if(Tablej0=b) 7 break; return Tableji; /Precede int Operate(int a,char theta,int b) /计算表达式值:主要是将大的表达式转化成小的表达式进行逐步求值 int c; if(theta=+) c=a+b; else if(theta=-) c=a-b; else if(theta=*) c=a*b; else c=a/b; return c; /Operate int IsOptr(ch

10、ar ch) char ptr10=+,-,*,/,(,),#; for(int i=0;i7;i+) if(ch=ptri) 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); CharInitStack(OPTR); 8 CharPush(OPTR,#); while(ai!=) if(!IsOptr(ai) k+; if(kj) num2=num2*10+(i

11、nt(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 :theta=CharPop(OPTR); d=IntPop(OPND); b=IntPop(OPND); IntPush(OPND,Operate(b,theta,d); break; /switch /else if /while printf(表达式的正确结果为:); printf(%dn,IntGetTop(OPND); retur

12、n (IntGetTop(OPND); /reslut void Built_shitiKu() int i,num; xuanti *pstu; printf(输入试题数目:n); scanf(%d, fflush(stdin); pstu=(xuanti *)malloc(num*sizeof(xuanti);/动态分配内存 if(pstu=NULL) printf(没有足够的内存空间!n); return; 10 for(i=0;inum;i+) /输入试题 printf(第%d 道试题:,i+1); gets(pstui.a); fflush(stdin); printf(n); Wr

13、iteToFile(pstu,num);/将 pstu 所指向的学生信息写入文件中 memset(pstu,0,num*sizeof(xuanti);/将 pstu 所指向的内存块清 0 ReadFromFile(pstu,num);/从文件中读取学生信息到 pstu 所指向的内存 块中 printf(试题列表:n); for(i=0;inum;i+) /输入试题 printf(第%d 道试题:,i+1); printf(%s,pstui.a); printf(n); free(pstu);/释放动态分配的内存 void WriteToFile(xuanti *pstu,int num) /将

14、 pstu 所指向的试题息写入文件 shitiku.txt 中 FILE *fp; fp=fopen(shitiku.txt,at); if(fp=NULL) printf(不能创建 shitiku.txtn); 11 free(pstu); exit(0); fwrite(pstu,sizeof(xuanti),num,fp); fclose(fp); void ReadFromFile(xuanti *pstu,int num) /从试题库中提取试题 FILE *fp; fp=fopen(shitiku.txt,rt); if(fp=NULL) printf(不能打开 shitiku.txtn); free(pstu); exit(0); fread(pstu,sizeof(xuanti),num,fp); fclose(fp); /*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号