ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:144.07KB ,
资源ID:26099633      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26099633.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用栈求表达式的值可供小学生作业并能给出分数 数据结构课程设计说明书格式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

2、程图可以看出操作的整体流程,如下图2. 本设计所采用的数据结构(如:链表、栈、树、图等)根据以上功能说明,设计运算信息,堆栈的存储结构,设计程序完成功能;3. 功能模块详细设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。3.1 详细设计思想学生要进行测试,首先要有试题。那么我们就要先建立试题库。这个试题库的试题是我们在程序运行过程中手动输入,存放在一个shujuku.txt的文件中。首先在主函数中调用创建试题库函数,将试题存入到试题库文件shitiku.txt中,然后将该调用从主函数中删除。创建试题库函数

3、:创建指向xuanti类型的指针,利用循环将输入的测试题该指针的xuanti单元中,最后将该指针中的测试题写入试题库文件shitiku.txt中。 3.2 核心代码(正文宋体小四号字,1.5倍行距)#include #include #include #include#include #define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define ERROR 0#define OK 1/定义表达式typedef struct shiti char a20; long result;xuanti;typedef struct SqStack

4、1 /建立数字栈int *base; int *top; int stacksize;SqStack1; typedef struct SqStack2/建立运算符栈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*size

5、of(int); if(!S1-base) exit(ERROR); S1-top=S1-base; S1-stacksize=STACK_INIT_SIZE;/IntInitStackvoid 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;/CharInitStacklong IntGetTop(SqStack1 *S1) /取栈顶元素

6、long e1; if(*S1).top=(*S1).base) return 0; e1=*(*S1).top-1); return e1;/IntGetTopchar CharGetTop(SqStack2 *S2) /取栈顶元素 char e2; if(*S2).top=(*S2).base) return 0; e2=*(*S2).top-1); return e2;/IntGetTopint IntPush(SqStack1 *S1,int e1)/入栈 *(*S1).top+=e1; return OK;/IntPushint CharPush(SqStack2 *S2,char

7、e2)/入栈 *(*S2).top+=e2; return OK;/CharPushint IntPop(SqStack1 *S1)/出栈 int e1; if(*S1).top=(*S1).base) return 0; e1=*-(*S1).top; return e1;/IntPopint 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

8、= ,+,-,*,/,(,),#, +, -, *, /, (, , #, ,=,; /优先级表格 for(i=0;i8;i+) if(Table0i=a) /纵坐标寻找 break; for(j=0;j8;j+) /横坐标寻找 if(Tablej0=b) break; return Tableji;/Precedeint 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;

9、else c=a/b; return c;/Operateint IsOptr(char 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); CharPush(OPTR,#); while(ai!=) if(!I

10、sOptr(ai) k+; if(kj) 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 :theta=CharPop(OPTR); d=IntPop(OPND); b=IntPop(OPND); IntPush(OPND,Operate(b,theta,d); break; /switch /else if /while printf(表达式的正确结果为:

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

12、ui.a); fflush(stdin); printf(n); WriteToFile(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(

13、xuanti *pstu,int num)/将pstu所指向的试题息写入文件shitiku.txt中FILE *fp; fp=fopen(shitiku.txt,at); if(fp=NULL) printf(不能创建shitiku.txtn); 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(不能打

14、开shitiku.txtn); free(pstu); exit(0); fread(pstu,sizeof(xuanti),num,fp); fclose(fp);/*void RecMark(int *m,int num)/把得分记录到markrec.txt中 FILE *mp; mp=fopen(markrec.txt,at); if(mp=NULL) printf(不能创建markrec.txtn); free(m); exit(0); fwrite(m,sizeof(int),num,mp); fclose(mp);/Recmarkvoid LookMark(int *m,int n

15、um)/查看得分记录 FILE *mp; mp=fopen(markrec.txt,rt); if(mp=NULL) printf(不能打开markrec.txtn); free(m); exit(0); fread(m,sizeof(int),num,mp); fclose(mp);/*void RecN(int *m,int num)/把m的值记录到n_rec.txt中 FILE *mp; mp=fopen(n_rec.txt,wt); if(mp=NULL) printf(不能创建n_rec.txtn); free(m); exit(0); fwrite(m,sizeof(int),nu

16、m,mp); fclose(mp);/Recmarkvoid LookN(int *m,int num)/查看m的值 FILE *mp; mp=fopen(n_rec.txt,rt); if(mp=NULL) printf(不能打开n_rec.txtn); free(m); exit(0); fread(m,sizeof(int),num,mp); fclose(mp);/*int excersice_begin() int i, j, temp, KEY20; int mark,count=0; int *Mark; char g; SqStack1 s1,*OPND; SqStack2 s

17、2,*OPTR; xuanti *XT; OPND=&s1; OPTR=&s2; Mark=(int *)malloc(20*sizeof(int); XT=(xuanti *)malloc(20*sizeof(xuanti); ReadFromFile(XT,20); do mark=0; srand(unsigned)time(NULL); KEY0 = rand()%20; for(i=1;i20;i+) while(1) temp = rand()%20; for(j=0;ji;j+) if(KEYj=temp) break; if(j=i) KEYi=temp; break; sys

18、tem(cls); printf(随机的10个练习题 :n); for(i=0;i=90) printf(Very Good!n); else if(mark=60) printf(成绩不错。n); else printf(很遗憾成绩不及格!n); printf(n); RecMark(Mark,count); Markcount=mark; count+;/记录次数递增 printf(是否继续做练习?(y是,n否):); g=getchar(); fflush(stdin); printf(n); if(count=20)/超过最大记录次数清0 count=0;while(g=y); Rec

19、Mark(Mark,count); return count; return_confirm();void Look_Mark(int count)/printf(是否查看历史得分?(y是,n否):); int *Mark; int i; Mark=(int *)malloc(20*sizeof(int); system(cls); printf(*查询历史得分情况*n); LookMark(Mark,count); for(i=0;i1) if(Marki-160|Marki-260) if(Marki-1Marki-2) printf(有进步,还要加油哦。n); else if(Marki

20、-1=Marki-2) printf(成绩还可以,但没有进步,还要多多努力呀!n); else printf(成绩有点下降,要多多练习,不要气馁!n); else printf(成绩很不好!要更加努力学习!n);else if(Mark0=90) printf(Very Good!n); else if(Mark0=60) printf(成绩不错。n); else printf(很遗憾成绩不及格!n); return_confirm();void main() int m=0; int *RN; char ch; RN=(int *)malloc(1*sizeof(int); RN0=0; p

21、rintf(*如果是第一次运行*n); printf(*请先建立 n_rec.txt*n); printf(*否则会出错 !*n); printf(y-创建*n-不建)n); ch=getchar(); if(ch=y) RecN(RN,1); LookN(RN,1); RN0+=m; fflush(stdin); printf(是否向试题库中添加试题: ); printf(y-是,n-否)?n); ch=getchar(); if(ch=y) Built_shitiKu(); menu: page_title(操作选单); printf(请用数字键选择操作nn); printf(1 开始练习

22、n); printf(2 查看得分记录n); printf(0 退出n); printf(*n); RN0+=m; m=0; switch(getch() case 1 : m=excersice_begin(); break; case 2 : Look_Mark(RN0); break; case 0 : RecN(RN,1); exit(0); system(cls); goto menu;3.3 程序运行结果(拷屏)4.课程设计心得、存在问题及解决方法 连续两个星期的课程设计做完了,感觉自己的能力得到了大大的提高。刚开始看见题目的时候,很不以为然,觉得这么简单。但当自己开始着手做的时候

23、才发现并不是那么回事。一个看似简单的问题,有时候却牵扯甚多。经过两个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,对C语言学习平时只是马马虎虎的过去了,真正自己去解决实际问题的时候才会发现自己学的多么糟糕,通过课程设计对自己的编程能力也有所提高;再有对C语言的文件操作这一块,真的是难了我好久。还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注重实践操作能力的培养,无论学习什么,亲自动手去做了才能得到最深刻的体会。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1