欢迎来到天天文库
浏览记录
ID:37668851
大小:235.00 KB
页数:7页
时间:2019-05-28
《数据结构课程设计报告(二)表达式求值(计算器)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.课程设计报告课程名称:数据结构课程设计设计题目:表达式求值(计算器)学院:信息科学与工程学院专业:计算机科学与技术(软件外包)姓名:指导教师:二零一五年十二月二十九日..一、设计内容与要求1、问题描述设计一个算术计算器,能运算包括四则运算、括号的表达式的运算。2、设计要求实现()、+、-、*、/、^等运算,实现小数和整数混合运算,优先级的处理,能判断算术表达式是否正确等。二、算法设计1、输入并建立表达式,运用数组结构体构建将整型数字与操作符结合定义运算符的优先级。typedefstructyxj{charoperat;intrank;}yxj;2、分别建立一个操作数栈
2、和操作符栈存放数字和操作符,定义操作符栈第一个元素优先级最低。3、自左向右扫描字符串遇到字符串中的数字时一律提取转换成double型存入操作数栈。遇到操作符时,则将当前运算符的优先级数与运算符栈顶元素的优先级数相比较。若当前运算符的优先级数大,则进栈;反之,则取出栈顶的运算符,并在数栈中连续取出两个栈顶元素作为运算对象进行运算,并将运算结果存入数栈,然后继续比较当前运算符与栈顶元素的优先级。直到当前运算符进栈。4、对比运算符进行+-*/()^运算。三、程序代码#include#include#include#in
3、clude#defineN100typedefstructyxj{charoperat;intrank;}yxj;typedefstructstr{chardata[N];}zs;voidszys(yxjmark[]){yxjos[N];charch;..doublens[N];zszhan[20];intnumb[N];intLen,p=0,q=1,i,o=1,n=0;chardata[N];os[0]=mark[0];printf("请输入算术(+-*/^)表达式(以=结束):");scanf("%s",data);Len=strlen(data
4、);numb[0]=0;for(i=0;i<20;i++)zhan[i].data[0]=' ';for(i=0;i5、6、data[i]=='+'7、8、data[i]=='-'9、10、data[i]=='*'11、12、data[i]=='/'13、14、data[i]=='('15、16、data[i]==')'17、18、data[i]=='='){intj,k=0;if((data[i]=='='19、20、data[i]=='^'21、22、data[i]=='+'23、24、data[i]=='-'25、26、data[i]=='*'27、28、data[i]=='/')&29、&(data[i-1]=='^'30、31、data[i-1]=='+'32、33、data[i-1]=='-'34、35、data[i-1]=='*'36、37、data[i-1]=='/')){printf("格式错误");return;}numb[q++]=i;while(zhan[(p+k)/2].data[0]!=' '){k++;}for(j=numb[q-2];j='0'&&data[j]<='9'38、39、data[j]=='.')zhan[(p+k)/2].data[t++]=data[j];zhan[(p+k)/2].data[t40、]=' ';if(zhan[(p+k)/2].data[0]!=' ')ns[n++]=atof(zhan[(p+k)/2].data);p++;for(j=0;j<8;j++)if(mark[j].operat==data[i])break;while(1)..{if(mark[j].operat=='('){os[o++]=mark[j];break;}elseif(mark[j].rank>os[o-1].rank&&mark[j].operat!='('){os[o++]=mark[j];break;}else{doublenumb1,numb2,numb;41、ch=os[--o].operat;if(ch=='+'){numb1=ns[--n];numb2=ns[--n];numb=numb1+numb2;ns[n++]=numb;}if(ch=='-'){numb1=ns[--n];numb2=ns[--n];numb=numb2-numb1;ns[n++]=numb;}if(ch=='*'){numb1=ns[--n];numb2=ns[--n];numb=numb2*numb1;ns[n++]=numb;}if(ch=='/'){numb1=ns[--n];numb2=ns[--n];i
5、
6、data[i]=='+'
7、
8、data[i]=='-'
9、
10、data[i]=='*'
11、
12、data[i]=='/'
13、
14、data[i]=='('
15、
16、data[i]==')'
17、
18、data[i]=='='){intj,k=0;if((data[i]=='='
19、
20、data[i]=='^'
21、
22、data[i]=='+'
23、
24、data[i]=='-'
25、
26、data[i]=='*'
27、
28、data[i]=='/')&
29、&(data[i-1]=='^'
30、
31、data[i-1]=='+'
32、
33、data[i-1]=='-'
34、
35、data[i-1]=='*'
36、
37、data[i-1]=='/')){printf("格式错误");return;}numb[q++]=i;while(zhan[(p+k)/2].data[0]!=' '){k++;}for(j=numb[q-2];j='0'&&data[j]<='9'
38、
39、data[j]=='.')zhan[(p+k)/2].data[t++]=data[j];zhan[(p+k)/2].data[t
40、]=' ';if(zhan[(p+k)/2].data[0]!=' ')ns[n++]=atof(zhan[(p+k)/2].data);p++;for(j=0;j<8;j++)if(mark[j].operat==data[i])break;while(1)..{if(mark[j].operat=='('){os[o++]=mark[j];break;}elseif(mark[j].rank>os[o-1].rank&&mark[j].operat!='('){os[o++]=mark[j];break;}else{doublenumb1,numb2,numb;
41、ch=os[--o].operat;if(ch=='+'){numb1=ns[--n];numb2=ns[--n];numb=numb1+numb2;ns[n++]=numb;}if(ch=='-'){numb1=ns[--n];numb2=ns[--n];numb=numb2-numb1;ns[n++]=numb;}if(ch=='*'){numb1=ns[--n];numb2=ns[--n];numb=numb2*numb1;ns[n++]=numb;}if(ch=='/'){numb1=ns[--n];numb2=ns[--n];i
此文档下载收益归作者所有