计算器程序编程实习报告Word文档格式.docx

上传人:b****6 文档编号:18865686 上传时间:2023-01-01 格式:DOCX 页数:12 大小:18.03KB
下载 相关 举报
计算器程序编程实习报告Word文档格式.docx_第1页
第1页 / 共12页
计算器程序编程实习报告Word文档格式.docx_第2页
第2页 / 共12页
计算器程序编程实习报告Word文档格式.docx_第3页
第3页 / 共12页
计算器程序编程实习报告Word文档格式.docx_第4页
第4页 / 共12页
计算器程序编程实习报告Word文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

计算器程序编程实习报告Word文档格式.docx

《计算器程序编程实习报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算器程序编程实习报告Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

计算器程序编程实习报告Word文档格式.docx

?

尣否栈顶元素比C的优先级等于脱括号

否是字符小于将字符压入OPTR

将字OPTR

顶栈获取元素

大于

输出结果

栈出operate栈

行执压,

结束

返回

三、详细设计:

OPTROPTR,OPND首先定义两个栈,分别取名是,其中、主函数1

OPND存放字符,存放数字。

将optr中压入#作为栈底元素,然后从键盘上获取表达式的字符

如果是数字,将该字符转化为数字,压入到栈opnd中。

如果是字符,和optr的栈顶元素比较优先级

1,、栈顶元素优先级<

键入的元素,该调用push()函数,将字符压入到optr栈中

2、如果栈顶元素的优先级等于键入元素,则得知此符号为括号,调用pop()函数,将该字符栈中的栈顶元素退出,即为脱括号。

3、如果栈顶元素的优先级高于键入元素,调用pop()函数,分别将取两次数字栈的栈顶元素,pop(opnd,b),pop(opnd,a),,同时将optr中的栈顶元素去取出,pop(optr,theta),调用operate()函数,进行计算。

将operate(a,theta,b)压入到opnd栈中,继续进行循环。

直到#结束。

模块1、定义2中栈,定义栈,区分两种数据类型

typedefstruct{

intstack[MAXSIZE];

inttop;

}SqStack;

模块2、定义两种出栈入栈函数,以便后来调用不同数据类型的pop(*s,x),.push(*s,*x);

intPush1(SqStack*s,intx)

{if(s->

top>

=MAXSIZE)

printf(ERROR,Overflow!

\n);

else

{s->

stack[s->

top]=x;

s->

top++;

}

return1;

模块3、Operate函数定义:

operate函数,利用switch()语句来

operate(inta,charb,intc)写定义3个实参,inta,bchartheta;

{theta代表运算符,依次判断运算符的+—

switch(b)*,/,情况,进行运算,{case'

+'

:

a=a+c;

break;

令a=a+c,a=a-c,a=a*c,a=a/c,

case'

-'

a=a-c;

返回a的值

*'

a=a*c;

/'

a=a/c;

}

returna;

模4、优先级判断

将+—*/()#的优先级做成如下的图

+>

'

>

<

'

—'

*'

/

='

0,(

)'

0,'

寻找优先级即将左表中的对应坐标用程,'

0#'

序语言找到即可,设计一个二维数组,str[7[,[7],将字符进行定

位,i,j分别代表横纵坐标,利用switch,语句进行选择,对应的str[i][j]即为优先级符号,所以将str[i][j],作为函数的返回值

调试中的问题:

1、最初只定义了一种数据类型的栈,出栈入栈函数也只有一种int数据类型,导致之后的函数调用数据类型不匹配,无法识别。

2、在定义入栈函数时,未能将push(*s,*x)中的x定义成指针类型,在pop(*s,x)中误将x定义成指针类型。

3、在调用函数时对栈的调用中数据类型不一致。

4、对主函数,从键盘键入的C为字符型,没有能够将字符型转化成整型进行计算,使得在计算中是用的0~9的ASCII码值进行的计算,在ASCII码表中0~9的ASCII码表依次为48~57,int

m

m=c—48,即‘c'

-48,得到真实的数值。

5、取栈顶元素的函数定义错误,使得程序无法进行,由于gettop函数定义错误,在optr中一直重复取#的循环运算,导致“error

Underflow”刷屏出现。

源代码;

#include<

stdio.h>

string.h>

ctype.h>

#defineMAXSIZE100

#definetrue1

#definefalse0

typedefstruct{//定义堆栈数据类型

typedefstruct{//定义堆栈数据类型

charstack[MAXSIZE];

}sqstack;

voidInitStack(SqStack*s)

{//初始化栈,栈顶指针为0

s->

top=0;

voidInitStack2(sqstack*s)

0初始化栈,栈顶指针为//{

intPush1(SqStack*s,intx)

{//入栈

if(s->

{

intGettop1(SqStack*s,int*x)

取栈顶元素//

if(s->

top==0)

printf(error,gettop1);

return0;

{

*x=s->

stack[s->

top];

return1;

intPop1(SqStack*s,int*x){//出栈

top==0)

printf(ERROR,pop1!

top--;

*x=s->

charPush2(sqstack*s,charx)

top==MAXSIZE+1)

printf(ERROR,push2!

else

charGettop2(sqstack*s,char*ch){//取栈顶元素

0)

{*ch=s->

top-1];

return*ch;

return0;

出栈//charPop2(sqstack*s,char*x){

printf(ERROR,pop2!

charprocede(charc1,charc2)

inti=0,j=0;

charstr[7][7]={

'

0,

0,'

};

switch(c1)

case'

i=0;

i=1;

i=2;

i=3;

('

i=4;

)'

i=5;

#'

i=6;

switch(c2)

j=0;

j=1;

j=2;

j=3;

j=4;

j=5;

j=6;

return(str[i][j]);

}//返回优先级判断结果

intoperate(inta,charb,intc)

switch(b)

{case'

main()

sqstackOPTR;

SqStackOPND;

chartheta,c,x;

inta,b,m;

InitStack2(&

OPTR);

Push2(&

OPTR,'

);

InitStack(&

OPND);

牰湩晴尨请输入一个计算式,以#结束\n);

c=getchar();

{while(c!

||OPTR.stack[OPTR.top-1]!

if(c>

0'

&

c<

9'

m=c-48;

Push1(&

OPND,m);

switch(procede(OPTR.stack[OPTR.top-1],c))

Push2(&

OPTR,c);

break;

Pop2(&

OPTR,&

x);

theta);

//退栈并将运算结果入栈

Pop1(&

OPND,&

b);

a);

Push1(&

OPND,operate(a,theta,b));

牰湩晴尨结果:

%d\n,OPND.stack[OPND

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

当前位置:首页 > 党团工作 > 思想汇报心得体会

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

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