利用栈求表达式课程设计报告Word格式.docx
《利用栈求表达式课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《利用栈求表达式课程设计报告Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
计科0902
指导老师:
章老师
分数:
利用栈求表达式值
一:
设计目的
利用栈求表达式的值,可供小学生使用,并能给出分数,并且可以给出评价。
二:
设计要求
建立试题库文件,随机产生n个题目;
题目涉及加减乘除,带括号的混合运算;
随时可以退出;
保留历史分数能回顾历史,给出与历史的分数的比较后的评价。
三:
设计思想
首先建立三个文件,分别为shitiku.txt,markrec.txt,n_rec.txt。
其中shitiku.txt中存放试题;
markrec.txt存放历史分数;
n_rec.txt存放总共测试次数。
1.创建试题库模块:
首先在主函数中调用创建试题库函数,将试题存入到试题库文件shitiku.txt中,然后将该调用从主函数中删除。
创建试题库函数:
创建指向xuanti类型的指针,利用循环将输入的测试题该指针的xuanti单元中,最后将该指针中的测试题写入试题库文件shitiku.txt中。
2.试题测试模块:
试题计算:
建立两个栈,分别存放数字、运算符,建立一个二维数组,存放任意两个运算符之间的优先级关系,通过比较符号栈中后两个运算符的优先级关系,决定数字栈中后两个数据是直接入栈还是运算之后入栈,最后在数字栈中得到最后的运算结果。
通过比较用户输入的结果与程序计算的结果来决定测试者的分数mark是否加分,测试完成时,将分数mark写入记录分数文件markrec.txt中,并将总共的测试次数记录如n_rec.txt中。
3.查看历史分数模块:
通过查看n_rec.txt中总共的测试次数n,得到markrec.txt中n个历史分数,将结果显示个用户。
4.随时退出模块:
测试完或将查看历史分数后,按任意键将返回到菜单,菜单中输入0即可退出。
四.详细设计
1.定义数字结构体和运算符结构体,实现栈操作
typedefstructSqStack1
{//建立数字栈
int*base;
int*top;
intstacksize;
}SqStack1;
typedefstructSqStack2
{//建立运算符栈
char*base;
char*top;
}SqStack2;
2.建立试题的存放结构体
typedefstructshiti
{//定义表达式
chara[20];
/*存放表达式*/
longresult;
/*存放用户输入的答案*/
}xuanti;
3.主菜单main()函数
voidmain()
{
intm=0;
int*RN;
RN=(int*)malloc(1*sizeof(int));
RN[0]=0;
system("
cls"
);
LookN(RN,1);
RN[0]+=m;
fflush(stdin);
while
(1){
page_title();
//输出菜单
m=0;
switch(getch())
{
case'
1'
:
m=excersice_begin();
//开始测试
break;
2'
Look_Mark(RN[0]);
//查看历史分数记录
case'
3'
Built_shitiKu();
//增加试题
break;
0'
RecN(RN,1);
exit(0);
}//退出
}
pause"
}
五功能的实现
程序运行的主结构图
1.开始测试
2.查询历史成绩
3.增加试题
3.程序运行的结构图
通过比较栈顶符号与数组a[]存放的字符,在table[]二维数组中,查询其运算符的优先级,分别进行运算符的出栈,进栈以及数字进栈,进行算法的实现。
六测试结果
1.开始菜单
2.开始测试(输入-1直接退出并保存分数)
3.查看历史分数记录
4.增加试题到试题库
七结束术语
VC++运行软件上,通过利用栈求表达式的值,进行输入表达式并给出答案,保存分数进行评价,存储,增加试题到试题库中,显示历史分数,建立文件,实现程序的各项功能,对栈的应用有了进一步的了解,同时,对数据结构及其算法栈也有一定体会,对C++有了近一步的了解。