数据结构课程设计算术表达式求值计算器源代码 报告.docx
- 文档编号:3523168
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:9
- 大小:46.59KB
数据结构课程设计算术表达式求值计算器源代码 报告.docx
《数据结构课程设计算术表达式求值计算器源代码 报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计算术表达式求值计算器源代码 报告.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构课程设计算术表达式求值计算器源代码报告
数据结构课程设计(算术表达式求值)-计算器(源代码报告)
高级语言程序设计
《算术表达式求值》
课程设计报告
1
第一章系统目标
算术表达式求值
系统可以实现实现对算术四则混合运算表达式求值~并打印求值过程中运算符
栈、操作数栈的变化过程。
第二章系统分析
开始运行时界面如下:
你可以输入一个表达式~按E对其进行求值。
2
第三章系统设计
开始
输出菜单界面,
输入表达式
确定选C选E选Q是
否
计算,清除结束,退出求值
3
第四章系统实现
#include
doublenumStack[N]={0};//操作数栈intnumTop;
charopStack[N];//运算符栈
intopTop;
voidprint_num(doublestr1[],intn)
{
inti;
printf("\n操作数栈:
\n");
for(i=0;i printf("%g",str1[i]); } voidprint_op(charstr2[],intm) { intj; printf("\n运算符栈: \n"); for(j=0;j printf("%c",str2[j]); } intop(charch)//判断运算符优先级{ 4 if(ch=='+'||ch=='-')return2; if(ch=='*'||ch=='/')return3; if(ch=='(')return-1; return0; } doubleresult(doublenum1,charop,doublenum2)//计算 { if(op=='+')returnnum1+num2; if(op=='-')returnnum1-num2; if(op=='*')returnnum1*num2; if(op=='/')returnnum1/num2; return0; } intcompute(charstr[]) { doublenum=0; inti=0,j=1,k=1; numTop=opTop=0; while(str[i]! ='\0'||opTop>0) { if(str[i]>='0'&&str[i]<='9') num=num*10+str[i]-'0'; elseif(k==1&&str[i]=='-'&&(i==0||op(str[i-1]))) k=-1; else { if(i>0&&! op(str[i-1])&&str[i]! ='('&&str[i-1]! =')') 5 { numStack[numTop++]=num*k; if(opTop! =0&&numTop! =0) print_num(numStack,numTop); num=0;j=1;k=1; } if(opTop==0||str[i]=='(') {opStack[opTop++]=str[i];print_op(opStack,opTop);} elseif(str[i]==')') { while(opTop>0&&opStack[--opTop]! ='(') { numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]); if(opTop! =0&&numTop! =0) { print_num(numStack,numTop); print_op(opStack,opTop); } numTop--; } if(opStack[opTop]! ='(')return0; } else { if(str[i]=='\0'&&numTop==0)return0; while(opTop>0&&op(str[i])<=op(opStack[opTop-1])) { numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]); if(opTop! =0&&numTop! =0) 6 { print_num(numStack,numTop-1); print_op(opStack,opTop); } ;numTop-- } if(str[i]! ='\0') opStack[opTop++]=str[i]; if(opTop! =0&&numTop! =0) print_op(opStack,opTop); } } if(str[i]! ='\0') i++; } if(numTop! =1||opTop! =0) return0; return1; } voidmenu() { system("cls"); printf("_______________________________\n"); printf("Clear(C)|Equal(E)|Quit(Q)\n"); printf("-------------------------------\n");} intmain(void) { inti=0,j=0,k; 7 charstr[N]="\0"; charnum[N]="\0"; charsave[N]="\0"; charch; doubletemp; unsignedlongtemp2; menu(); printf("inputanexpression,presskey'E'tocompute\n"); ch=getch(); while (1) { if(ch==')'||op(ch)||ch>='0'&&ch<='9') { str[i++]=ch; str[i]='\0'; menu(); printf("inputanexpression,presskey'E'tocompute\n"); printf("%s",str); if(ch=='-'&&(i==1||op(str[i-2]))||ch>='0'&&ch<='9') { num[j++]=ch; num[j]='\0'; } else j=0; } if(ch=='C'||ch=='c') { if(strlen(str)) str[--i]='\0'; menu(); 8 printf("inputanexpression,presskey'E'tocompute\n"); printf("%s",str); } if(ch=='E'||ch=='e') { if(compute(str)) { printf("\n=%g\n",numStack[0]); j=0;temp=numStack[0]; if(temp<0) { temp=-temp; num[j++]='-'; num[j]='\0'; } temp2=(unsignedlong)temp; k=1; while(temp2/k>=10)k*=10; while(k) { num[j++]=temp2/k+'0'; num[j]='\0'; temp2=temp2%k; k/=10; } temp=temp-(int)temp; if(temp! =0) { num[j++]='.'; num[j]='\0'; temp+=0.0000005; 9 } for(k=6;k>0;k--) { if(temp==0)break; temp*=10; num[j++]=(int)temp+'0'; num[j]='\0'; temp=temp-(int)temp; } } i=0;j=0;str[0]='\0'; } if(ch=='Q'||ch=='q') { printf("\nareyousuretoquit? (Y/N)\n"); ch=getch(); if(ch=='Y'||ch=='y')break; else { menu(); printf("inputanexpression,presskey'E'tocompute\n"); printf("%s",str); } } ch=getch(); } return0; } 10 第五章系统测试 1.先输入: 3+2*5后按E求值 2.再输入: 12/4-5后按E求值 3.再输入Q 4.输入Y,退出系统。 11 第六章设计心得 收获: 经过这次课程设计我重新回忆起许多以前学过的知识~如: 栈~字符串等等。 也学习到了一些新的知识~如: g是数值输出时去掉无用的零~等等。 疑问: 如何进行函数运算,如: log,sin等等。 第七章参考文献 杨升~数据结构~厦门出版社~2009 教师评语和成绩 2010年7月 12
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计算术表达式求值计算器源代码 报告 数据结构 课程设计 算术 表达式 求值 计算器 源代码