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