数据结构课程设计实验报告起止时间:-(计算器)设计小组成员及成绩分配班级:成员列表:编译系统、运行环境和已实现的功能:编译系统:VisualC++;运行环境:WindowsXP实现功能:(a)实数的加减乘除混合运算;(b)带括号运算;(c)乘方运算;(d)三角函数运算程序功能流程框图:三角函数计算退出实数的加减乘除混合运算计算器主要算法描述:(可以使用流程图或其它的算法描述方法)一、四则运算1、链栈实现括号和四则运算优先级2、输入并建立表达式,运用数组结构体构建将整型数字与操作符结合定义运算符的优先级。typedefstructyxj{charoperat;intrank;}yxj;3、分别建立一个操作数栈和操作符栈存放数字和操作符,定义操作符栈第一个元素优先级最低。4、自左向右扫描字符串遇到字符串中的数字时一律提取转换成double型存入操作数栈。遇到操作符时,则将当前运算符的优先级数与运算符栈顶元素的优先级数相比较。若当前运算符的优先级数大,则进栈;反之,则取出栈顶的运算符,并在数栈中连续取出两个栈顶元素作为运算对象进行运算,并将运算结果存入数栈,然后继续比较当前运算符与栈顶元素的优先级。直到当前运算符进栈。5、对比运算符进行+-*/()^运算。二、三角函数1、自左向右扫描字符串遇到字符串中的数字时提取转换成double型存入数栈。2、进行三角函数运算。测试实例与测试结果(输入数据与运行结果,以及执行结果的截屏):输入:10*(12+16)/2-15=输出:125执行结果:输入:5^5+6-10/2=输出:3126执行结果:1、输入:sin302、输出::1、输入:cos602、输出::输入:cos602、输出::测试实例与测试结果(输入数据与运行结果,以及执行结果的截屏):输入:tan45输出:1执行结果::设计过程中遇到的问题及解决办法:问题:算数表达式以字符串输入,操作数和操作符的提取;解决办法:两两操作符之间如有数字将中间的数字提取强制转换成double型;参考文献:(在设计中参考的书籍、网站等资料),《数据结构——C++语言描述》,清华大学出版社,2008年,页码:://download./detail/gszhouyi/738777指导老师评议:成绩评定:指导教师签名:附件:(程序源代码)#include<>#include<>#include<>#include<>#defineN100#{ charoperat; intrank;}yxj;typedefstructstr{ chardata[N];}zs;voidsjhs(void){ chars[10],a[10]; doubley,x; printf("请输入(sincostan角度制)表达式:\n"); scanf("%s",s); if(strstr(s,"sin")!=0) { inti=0,j=0; while(s[i]!='\0') { if(s[i]>='0'&&s[i]<='9') s[j++]=s[i]; i++; } s[j]='\0'; x=atof(s); y=sin(x*pai/180); } elseif(strstr(s,"cos")!=0) { inti=0,j=0; while(s[i]!='\0') { if(s[i]>='0'&&s[i]<='9') s[j++]=s[i]; i++; } s[j]='\0'; x=atof(s); y=cos(x*pai/180); } elseif(strstr(s,"tan")!=0) { inti=0,j=0; while(s[i]!='\0') { if(s[i]>='0'&&s[i]<='9') s[j++]=s[i]; i++; } s[j]='\0'; x=atof(s); y=tan(x*pai/180); } else { printf("格式错误\n"); return; } printf("%lf\n",y); printf("*****1、继续*****\n"); printf("*****0、返回上一层*****\n"); scanf("%s",a); if(strcmp(a,"0")==0) return; elseif(strcmp(a,"1")==0) sjhs(); else printf("没有该选项\n");}voidszys(yxjmark[]){ yxjos[N]; chara[10];
数据结构课程设计 实验报告(一)表达式求值(计算器) 来自淘豆网www.taodocs.com转载请标明出处.