算术表达式实验报告.docx

上传人:b****8 文档编号:30139274 上传时间:2023-08-05 格式:DOCX 页数:9 大小:91.54KB
下载 相关 举报
算术表达式实验报告.docx_第1页
第1页 / 共9页
算术表达式实验报告.docx_第2页
第2页 / 共9页
算术表达式实验报告.docx_第3页
第3页 / 共9页
算术表达式实验报告.docx_第4页
第4页 / 共9页
算术表达式实验报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

算术表达式实验报告.docx

《算术表达式实验报告.docx》由会员分享,可在线阅读,更多相关《算术表达式实验报告.docx(9页珍藏版)》请在冰豆网上搜索。

算术表达式实验报告.docx

算术表达式实验报告

 

本科学生综合性实验报告

 

项目组长:

学号:

成员:

专业:

计算机科学与技术班级:

B02

实验项目名称算术表达式求值

指导教师及职称:

开课学期2011-2012学年第一学期

上课时间2011年10月15日-2011年11月5日

 

一、实验设方案

实验名称:

算术表达式求值

实验时间:

2010年10月15日

小组合作:

是●否○

小组成员:

0103356吴荣福0103316倪志鹏

1、实验目的

实验目的:

写代码来计算算术表达式

2、实验思路(实验内容、数据处理方法及实验步骤等)

#include

#include

#include

#definesize100

#defineaddsize20

typedefintselemtype;

typedefintstatus;

typedefstruct{

selemtype*base;

selemtype*top;

intstacksize;

}sqstack;

//构造空栈

statusinitstack(sqstack&l){

l.base=(selemtype*)malloc(size*sizeof(selemtype));

if(!

l.base)exit(0);

l.top=l.base;

l.stacksize=size;

return1;

}

//返回栈顶元素

statusgettop(sqstacks)

{

selemtypee;

if(!

s.top)return0;

e=*(s.top-1);

returne;;

}

//进栈

statuspush(sqstack&l,selemtypee){

if(l.top-l.base>=l.stacksize){

l.base=(selemtype*)realloc(l.base,l.stacksize+addsize*sizeof(selemtype));

if(!

l.base)exit(0);

l.top=l.base+l.stacksize;

l.stacksize+=addsize;

}

*l.top++=e;

return1;

}

//出栈

statuspop(sqstack&l,selemtype&e){

if(l.top==l.base)return0;

e=*--l.top;

returne;

}

//判断是不是运算符

statusischar(charc){

if(c=='+'||c=='-'||c=='*'||c=='/'||c=='#'||c=='('||c==')')

return1;

else

return0;

}

//判断优先级

charyouxian(charm,charn){

inta,b;

switch(m)

{

case'+':

case'-':

a=6;break;

case'*':

case'/':

a=9;break;

case'(':

a=5;break;

case'#':

a=-1;break;

}

switch(n)

{

case'+':

case'-':

b=7;break;

case'*':

case'/':

b=8;break;

case')':

b=5;break;

case'(':

b=7;break;

case'#':

b=-1;break;

}

if(a>b)

return'>';

if(a

return'<';

else

return'=';

}

//计算函数

selemtypeoperate(selemtypea,selemtypem,selemtypeb){

selemtypes;

switch(m){

case'+':

s=(a+b);

break;

case'-':

s=(a-b);

break;

case'*':

s=(a*b);

break;

case'/':

s=(a/b);

break;

}

returns;

}

//主函数

voidmain(){

charch[5];

ch[0]='Y';

do{

printf("输入:

\n");

sqstacka,b;

charc;

selemtypex,y,theta;

initstack(a);push(a,'#');

initstack(b);c=getchar();

while(c!

='#'||gettop(a)!

='#'){

if(!

ischar(c)){

push(b,c-'0');

c=getchar();

}

else{

switch(youxian(gettop(a),c)){

case'<':

push(a,c);

c=getchar();

break;

case'=':

pop(a,x);

c=getchar();

break;

case'>':

pop(a,theta);

pop(b,y);

pop(b,x);

push(b,operate(x,theta,y));

break;

}

}

}

getchar();

printf("结果是:

");

printf("%d\n",gettop(b));

printf("是否继续(Y/N):

");

gets(ch);

}while(ch[0]=='Y'||ch[0]=='y');

printf("*************************\n");

}

指导老师对实验设计方案的意见

 

指导老师签名:

年月日

二、实验结果与分析

1、实验目的、实验思路。

实验目的:

计算算术表达式;

实验思路:

把一个算术表达式分解成数字和运算符,而把数字和运算符分别进入两个栈中,再考虑到运算符的优先级而进行相对应的计算;最终得到结果。

2、实验现象、数据及结果

3、对实验现象、数据及观察结果的分析与讨论

首先每个表达式都是以‘#’来结尾的,正如上面的实验结果所示,该程序满足‘+’‘—’‘*’‘/’‘()’等各种运算,并且对于各种运算符的结合也同样适用,总体来说,该程序还是不错的。

4、结论

该程序对于加减乘除等各种运算还是比较实用,总体上说来还可以

5、实验总结

(1)首先对于任意一个实验,每个实验都有它的原理,想把实验完成必须弄懂理解原理是怎么样的,遇到不懂得问题可以问老师、同学还可以查网络;

(2)在运行程序时,遇到错误是不可避免的,遇到错误要认真分析,一个一个解决。

(3)完成实验最重要的一点就是合作,懂得合作才是关键。

1次实验成败之处及其原因分析

成败之处:

首先我认为该实验是成多而败少,因为他是我们的团队小组共同完成的成果,而败就是我们花的时间还是长了点,效率还得提高。

分析:

实验的最终目的不仅仅是完成实验,同时也是对我们学生的一种考验,我和我的团队成员,一起努力,最终完美的完成实验。

2实验的关键环节及改进措施

做好本实验需要把握的关键环节

1.首先是对实验原理的把握

2.其次是对栈的各种用法的掌握

3.再者对各种运算符的优先级的表示

若重做本实验,为实现预期效果,实验步骤应如何改善

如果说本次实验还有要改善的那就是时间观念要得到加强,效率得提高。

3实验的自我评价:

1.自我评价:

首先总体上说来本次实验中我们的表现还是不错的,但是还是有要改进的地方,比如说:

遇到问题的时候不要着急,要认真分析其中的原因,再解决它。

2.再次就是还要更加注重团队问题。

指导老师评语及得分:

 

签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1