利用栈求表达式的值.doc_第1页
利用栈求表达式的值.doc_第2页
利用栈求表达式的值.doc_第3页
利用栈求表达式的值.doc_第4页
利用栈求表达式的值.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计 姓名:王宗敏班级:软件1021111217班学号: 1021111217目录:1需求分析 2概要设计 3详细设计 4调试分析 5用户使用说明 6测试结果 利用栈求表达式的值,可供小学生作业,并能给出分数。1 需求分析任务:通过此系统可以实现如下功能:此系统能够输入一个表达式,并计算该表达式的值。可以根据计算结果给出分数。能供小学生进行简单的四则运算,此外这里特别强调括号的匹配!要求:根据以上功能说明,设计运算信息,堆栈的存储结构,设计程序完成功能; 2. 概要设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。3 详细代码#include string.h#include stdio.h#includeconio.h#define maxsize 100#include ctype.htypedef char datatype;typedef structdatatype stackmaxsize;int top; seqstack;void stackinitiate(seqstack *s)s-top=0;int stacknotempty(seqstack s)if(s.toptop=maxsize)printf(堆栈已满无法插入!n);return 0;elses-stacks-top=x;s-top+;return 1;int stackpop(seqstack *s,datatype *d)if(s-toptop-;*d=s-stacks-top;return 1;int stacktop(seqstack s,datatype *d)if(s.top=0)printf(堆栈已空!n);return 0;else*d=s.stacks.top-1;return 1;void expiscorrect(char exp, int n)seqstack mystack;int i;char c;stackinitiate(&mystack);for(i=0;in;i+)if(expi=()stackpush(&mystack, expi);else if(expi=) & stacknotempty(mystack) & stacktop(mystack,&c) & c=()stackpop(&mystack,&c);else if(expi=) & !stacknotempty(mystack)printf(右括号多余左括号!n);return ;if(stacknotempty(mystack)printf(左括号多余右括号!n);elseprintf(左右括号匹配正确!n); static float ans50; static int count=0; static int right=0; static float yourresult50;int postexp(char exp)seqstack mystack;datatype x1,x2;int i;int j=0,ls;int top=0;int isFalse=0;int isRead=0;char oprator = ;stackinitiate(&mystack);for(i=0;expi!=#;i+)if(isdigit(expi)top=(int)(expi-48);top*=10;elseif (isRead = 0)isRead+;top/=10;stackpush(&mystack,top);oprator = expi;top=0;else if (isRead = 1)stackpush(&mystack,top);if (isRead = 1)isRead+;stackpop(&mystack,&x2); stackpop(&mystack,&x1);ls=x1;x1=x2;x2=ls;x1/=10;switch(oprator)case +: x1+=x2;break;case -: x1-=x2;break;case *: x1*=x2;break;case /:if(x2=0.0)printf(除数为0错!n);isFalse=1;elsex1/=x2;break;oprator = expi;x2=x1;top=0;if (isRead = 0)isRead+;top/=10;stackpush(&mystack,top);oprator = expi;top=0;else if (isRead = 1)stackpush(&mystack,top);if (isRead = 1)isRead+;stackpop(&mystack,&x2); stackpop(&mystack,&x1);ls=x1;x1=x2;x2=ls;x1/=10;switch(oprator)case +: x1+=x2;break;case -: x1-=x2;break;case *: x1*=x2;break;case /:if(x2=0.0)printf(除数为0错!n);isFalse=1;elsex1/=x2;break;oprator = expi;x2=x1;top=0;if (isFalse = 1) return -1;anscount = x1; printf(请输入您计算的结果:); scanf(%f,&yourresultcount); if(anscount=yourresultcount) right+; count+; getchar();int main()int i=0; char exp100; printf( -计算表达式-n使用说明:n); printf( 1.请输入要计算的表达式,以#结尾,例如1+2#n); printf( 2.结束计算请输入符号$n); printf( 3.在表达式中可以运算括号,中括号和大括号统一使用小括号代替()!n); printf( 4.程序输入格式错误时,将会自动结束程序,请注意格式正确!n); printf(请输入要计算的表达式,以#结尾。结束程序输入$。n); / c=getchar();scanf(%s,exp); while(expi!=$) expiscorrect(&exp,i); postexp(&exp); printf(-n); printf(请输入下一个表达式,以#结尾。结束程序输入$。n); scanf(%s,exp); / c=getchar(); printf(nn *您的成绩单*n); printf(-n); printf( 序 号 正确答案 您的答案 结 论n); for(i=0;icount;i+)printf(表达式%d %.2f %.2f %sn, i+1,ansi,yourresulti,ansi=yourresulti?正确!:错误!); printf(-n); printf(解答题目总共为%d道,其中n,count); printf(正确解答%d道题,错误解答%d道题。n *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论