版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中北高校数 据 结 构课 程 设 计 说 明 书同学姓名:刘敏杰学 号:1021011545学院 :软件学院 专业 :软件开发与测试利用栈求表达式的值,可供学校生作业,题目 :并能给出分数指导老师何志英2021 年 12 月 20 日1. 设计任务概述(包括系统总体框图及功能描述)此课题是讨论表达式求值的问题,以帮忙学校生完成测试;为了达到这个功 能,实际我们要做的就是出题, 和运算分数给出评判的工作;整体设计都是以这个要求为轴心进行的;为了直观和便利,现画出软件整体设计模块图;利用栈求表达式的值创试题查随建测试看时试历退题史出库分数整体设计模块图可以清楚的看出软件的几大模块;整个系统的操作流
2、程图可以看出操作的整体流程,如下图开头输入 1菜单挑选输入 2输入 0查看试历题史测分试数终止12. 本设计所采纳的数据结构(如:链表、栈、树、图等)依据以上功能说明,设计运算信息,堆栈的储备结构,设计程序完胜利能;3. 功能模块具体设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的储备结构设计说明 (假如指定储备结构请写出该储备结构的定义);3.1 具体设计思想同学要进行测试,第一要有试题; 那么我们就要先建立试题库;这个试题库的试题是我们在程序运行过程中手动输入,存放在一个shujuku.txt 的文件中;第一在主函数中调用创建试题库函数,将试题存入到试题库文件
3、shitiku.txt 中,然后将该调用从主函数中删除;创建试题库函数: 创建指向 xuanti 类型的指针, 利用循环将输入的测试题该指针的xuanti单元中,最终将该指针中的测试题写入试题库文件shitiku.txt 中;3.2 核心代码 正文宋体小四号字, 1.5 倍行距 #include <stdio.h>#include <stdlib.h>#include <time.h>#include<string.h>#include <conio.h>#define stack_init_size 100#define stack
4、increment 10#define error 02#define ok 1/ 定义表达式typedef struct shitichar a20; long result;xuanti;typedef struct sqstack1 /建立数字栈int *base; int *top;int stacksize;sqstack1;typedef struct sqstack2/建立运算符栈char *base; char *top;int stacksize;sqstack2;void writetofilexuanti *pstu,int num; void readfromfilex
5、uanti *pstu,int num;void page_titlechar *menu_item/建立菜单printf">>>数学习题库 <<<nn- %s -nn",menu_item;void return_confirm3printf"n按任意键返回n" getch;void intinitstacksqstack1 *s1s1->base=int *mallocstack_init_size*sizeofint; if.s1->baseexiterror;s1->top=s1->ba
6、se;s1->stacksize=stack_init_size;/intinitstackvoid charinitstacksqstack2 *s2s2->base=char *mallocstack_init_size*sizeofchar; if.s2->baseexiterror;s2->top=s2->base;s2->stacksize=stack_init_size;/charinitstacklong intgettopsqstack1 *s1 /取栈顶元素long e1; if*s1.top=*s1.base return 0;e1=*s
7、1.top-1;4return e1;/intgettopchar chargettopsqstack2 *s2 /取栈顶元素char e2;if*s2.top=*s2.base return 0; e2=*s2.top-1;return e2;/intgettopint intpushsqstack1 *s1,int e1/入栈*s1.top+=e1; return ok;/intpushint charpushsqstack2 *s2,char e2/入栈*s2.top+=e2; return ok;/charpushint intpopsqstack1 *s1/出栈int e1; if*
8、s1.top=*s1.base return 0;e1=*-*s1.top;5return e1;/intpopint charpopsqstack2 *s2/出栈char e2;if*s2.top=*s2.base return 0; e2=*-*s2.top;return e2;/charpopchar precedechar a,char bint i,j;char table88= ' ','+','-','*','/','','','#','+
9、9;,'>','>','<','<','<','>','>','-','>','>','<','<','<','>','>','*','>','>','>','>',
10、9;<','>','>','/','>','>','>','>','<','>','>','','<','<','<','<','<','=',' ','','>','
11、>','>','>',' ','>','>','#','<','<','<','<','<',' ','=',;/优先级表格fori=0;i<8;i+iftable0i=a/纵坐标查找break;forj=0;j<8;j+/横坐标查找iftablej0=b6break; return tableji;/prec
12、edeint operateint a,char theta,int b /运算表达式值:主要是将大的表达式转化成小的表达式进行逐步求值int c;iftheta='+' c=a+b; else iftheta='-' c=a-b;else iftheta='*' c=a*b; else c=a/b;return c;/operateint isoptrchar chchar ptr10='+','-','*','/','','','#'
13、;forint i=0;i<7;i+ifch=ptri return true;return false;long resultchar *a,sqstack1 *opnd,sqstack2 *optr/求值char theta;int b,d,k=0,i=0,j=0,num2=0; intinitstackopnd; charinitstackoptr;7charpushoptr,'#'whileai.='='if.isoptraik+;ifk<=jnum2=intai-48; i+;ifk>jnum2=num2*10+intai-48; k
14、=j=0;i+;if.isoptrai k+;ifk=jintpushopnd,num2;else ifisoptraiswitchprecedeai,chargettopoptrcase '<':charpushoptr,ai+; ifai.=''&&ai.=''j+;8break;case '=':charpopoptr;i+;break; case '>':theta=charpopoptr;d=intpopopnd; b=intpopopnd; intpushopnd,opera
15、teb,theta,d; break;/switch /else if/whileprintf"表达式的正确结果为 :" printf"%dn",intgettopopnd; return intgettopopnd;/reslutvoid built_shitikuint i,num; xuanti *pstu;printf"输入试题数目: n"scanf"%d",# fflushstdin;pstu=xuanti *mallocnum*sizeofxuanti;/动态安排内存ifpstu=nul
16、lprintf"没有足够的内存空间! n" return;9fori=0;i<num;i+/输入试题printf"第%d道试题 :",i+1;getspstui.a; fflushstdin; printf"n"writetofilepstu,num;/将 pstu 所指向的同学信息写入文件中memsetpstu,0,num*sizeofxuanti;/将 pstu 所指向的内存块清0readfromfilepstu,num;/从文件中读取同学信息到pstu所指向的内存块中printf"试题列表: n" fo
17、ri=0;i<num;i+/输入试题printf"第%d道试题 :",i+1;printf"%s",pstui.a; printf"n"freepstu;/释放动态安排的内存void writetofilexuanti *pstu,int num/将 pstu 所指向的试题息写入文件shitiku.txt中file *fp; fp=fopen"shitiku.txt","at" iffp=nullprintf"不能创建 shitiku.txtn"10freepstu;
18、exit0;fwritepstu,sizeofxuanti,num,fp; fclosefp;void readfromfilexuanti *pstu,int num/从试题库中提取试题 file *fp; fp=fopen"shitiku.txt","rt"iffp=nullprintf"不能打开 shitiku.txtn" freepstu;exit0;freadpstu,sizeofxuanti,num,fp; fclosefp;/* void recmarkint *m,int num/把得分记录到 markrec.txt中
19、file *mp; mp=fopen"markrec.txt","at" ifmp=nullprintf"不能创建 markrec.txtn"11freem;exit0;fwritem,sizeofint,num,mp; fclosemp;/recmarkvoid lookmarkint *m,int num/查看得分记录file *mp; mp=fopen"markrec.txt","rt" ifmp=nullprintf"不能打开 markrec.txtn" freem;
20、exit0;freadm,sizeofint,num,mp; fclosemp;/* void recnint *m,int num/把 m的值记录到 n_rec.txt中file *mp; mp=fopen"n_rec.txt","wt" ifmp=nullprintf"不能创建 n_rec.txtn" freem;12exit0;fwritem,sizeofint,num,mp; fclosemp;/recmarkvoid looknint *m,int num/查看 m的值 file *mp;mp=fopen"n_re
21、c.txt","rt" ifmp=nullprintf"不能打开 n_rec.txtn" freem;exit0;freadm,sizeofint,num,mp; fclosemp;/* int excersice_beginint i, j, temp, key20; int mark,count=0;int *mark; char g;sqstack1 s1,*opnd; sqstack2 s2,*optr; xuanti *xt; opnd=&s1;13optr=&s2;mark=int *malloc20*sizeofi
22、nt; xt=xuanti *malloc20*sizeofxuanti; readfromfilext,20;domark=0; srandunsignedtimenull; key0 = rand%20;fori=1;i<20;i+while1temp = rand%20; forj=0;j<i;j+ifkeyj=temp break;ifj=ikeyi=temp; break;system"cls"printf"随机的 10 个练习题 :n" fori=0;i<10;i+14printf"第%d个练习题 :",
23、i+1; printf"%sn",xtkeyi.a;printf"请输入运算结果 :"scanf"%ld",&xtkeyi.result; fflushstdin;ifxtkeyi.result=resultxtkeyi.a,opnd,optrmark+=10;printf"答案正确 ."printf"nn"elseprintf"答案错误 ."printf"nn"printf"*得分情形 *n"printf"最终的得分
24、为 :%dn",mark;ifmark>=90 printf"very good.n" else ifmark>=60printf"成果不错; n"else printf"很遗憾成果不及格! n" printf"n"recmarkmark,count; markcount=mark;count+;/记录次数递增15printf"是否连续做练习 .'y'是, 'n'否:"g=getchar; fflushstdin; printf"n
25、"ifcount>=20/超过最大记录次数清 0count=0;whileg='y'recmarkmark,count; return count; return_confirm;void look_markint count/printf"是否查看历史得分 .'y'是, 'n'否:" int *mark;int i;mark=int *malloc20*sizeofint; system"cls"printf"*查询历史得分情形 *n"lookmarkmark,coun
26、t; fori=0;i<count;i+printf"*第%d次得%d分*n", i+1, marki;ifi>1ifmarki-1>60|marki-2>60ifmarki-1>marki-2printf"有进步,仍要加油哦;n"16else ifmarki-1=marki-2 printf"成果仍可以,但没有进步,仍要多多努力呀! n"else printf"成果有点下降,要多多练习,不要丧气!n"else printf"成果很不好!要更加努力学习!n"else
27、ifmark0>=90 printf"very good.n" else ifmark0>=60printf"成果不错; n"else printf"很遗憾成果不及格! n"return_confirm;void mainint m=0; int *rn; char ch;rn=int *malloc1*sizeofint; rn0=0;printf"* 假如是第一次运行 *n"printf"* 请 先 建 立 n_rec.txt*n"printf"*否就会出错 .*n"17printf"'y'-创建*'n'-不建n"ch=getchar; ifch='y'recnrn,1;looknrn,1;rn0+=m;fflushstdin;printf"是否向试题库中添加试题: " printf&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年内蒙古美术职业学院马克思主义基本原理概论期末考试模拟题及答案解析(夺冠)
- 2024年玉环县幼儿园教师招教考试备考题库带答案解析(必刷)
- 2025年柳城县招教考试备考题库含答案解析(夺冠)
- 2025年哈密职业技术学院单招综合素质考试题库带答案解析
- 2024年青阳县幼儿园教师招教考试备考题库附答案解析(必刷)
- 2025年唐山科技职业技术学院单招综合素质考试题库带答案解析
- 2025年苏州百年职业学院马克思主义基本原理概论期末考试模拟题附答案解析
- 2025年霍城县招教考试备考题库及答案解析(夺冠)
- 2025年重庆工业职业技术大学马克思主义基本原理概论期末考试模拟题含答案解析(必刷)
- 2026年云南三鑫职业技术学院单招职业技能测试题库附答案解析
- 建筑结构健康监测技术方案
- 国家电网有限公司输变电工程通 用设计(330~750kV输电线路绝缘子金具串通 用设计分册)2024版
- 欠债抵房屋协议合同
- TSG R0004-2025固定式压力容器安全技术监察规程
- 大学劳动教育(第二版)课件 第二章 劳动价值观与劳动素养
- DBJ50T-240-2016 蒸压加气混凝土精确砌块自承重墙体工程应用技术规程
- 重难点08滑块-滑板模型专题高一物理题组法突破重难点(原卷版)
- 2024铁路营业线作业人员北斗安全预警防护系统技术条件
- 《东北解放区工业戏剧研究(1945-1949年)》
- 新版中国食物成分表
- 外研版七年级英语上册电子版课文-七上外研版英语电子书
评论
0/150
提交评论