数据结构课程设计算术表达式求值计算器源代码 报告Word文档格式.docx
- 文档编号:16428544
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:9
- 大小:46.59KB
数据结构课程设计算术表达式求值计算器源代码 报告Word文档格式.docx
《数据结构课程设计算术表达式求值计算器源代码 报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计算术表达式求值计算器源代码 报告Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
#include<
stdio.h>
#include<
conio.h>
stdlib.h>
string.h>
#defineN100
doublenumStack[N]={0};
//操作数栈intnumTop;
charopStack[N];
//运算符栈
intopTop;
voidprint_num(doublestr1[],intn)
{
inti;
printf("
\n操作数栈:
\n"
);
for(i=0;
i<
n;
i++)
%g"
str1[i]);
}
voidprint_op(charstr2[],intm)
intj;
\n运算符栈:
for(j=0;
j<
m;
j++)
%c"
str2[j]);
intop(charch)//判断运算符优先级{
4
if(ch=='
+'
||ch=='
-'
)return2;
*'
/'
)return3;
('
)return-1;
return0;
doubleresult(doublenum1,charop,doublenum2)//计算
if(op=='
)returnnum1+num2;
)returnnum1-num2;
)returnnum1*num2;
)returnnum1/num2;
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]-'
;
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>
opStack[--opTop]!
numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]);
numTop--;
if(opStack[opTop]!
)return0;
if(str[i]=='
numTop==0)return0;
op(str[i])<
=op(opStack[opTop-1]))
numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]);
6
print_num(numStack,numTop-1);
numTop--
if(str[i]!
opStack[opTop++]=str[i];
i++;
if(numTop!
=1||opTop!
return1;
voidmenu()
system("
cls"
_______________________________\n"
Clear(C)|Equal(E)|Quit(Q)\n"
-------------------------------\n"
}
intmain(void)
inti=0,j=0,k;
7
charstr[N]="
\0"
charnum[N]="
charsave[N]="
charch;
doubletemp;
unsignedlongtemp2;
menu();
inputanexpression,presskey'
E'
tocompute\n"
ch=getch();
while
(1)
||op(ch)||ch>
ch<
str[i++]=ch;
str[i]='
%s"
str);
if(ch=='
(i==1||op(str[i-2]))||ch>
)
num[j++]=ch;
num[j]='
j=0;
C'
c'
if(strlen(str))
str[--i]='
8
e'
if(compute(str))
\n=%g\n"
numStack[0]);
temp=numStack[0];
if(temp<
temp=-temp;
num[j++]='
temp2=(unsignedlong)temp;
k=1;
while(temp2/k>
=10)k*=10;
while(k)
num[j++]=temp2/k+'
temp2=temp2%k;
k/=10;
temp=temp-(int)temp;
if(temp!
.'
temp+=0.0000005;
9
for(k=6;
k>
0;
k--)
if(temp==0)break;
temp*=10;
num[j++]=(int)temp+'
i=0;
j=0;
str[0]='
Q'
q'
\nareyousuretoquit?
(Y/N)\n"
Y'
y'
)break;
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文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计算术表达式求值计算器源代码 报告 数据结构 课程设计 算术 表达式 求值 计算器 源代码