数据结构实习报告:设计一个演示用运算优先法对算数表达式求值过程的程序

轻其一片海 范文 报告范文
精选回答

数据结构实习报告:设计一个演示用运算优先法对算数表达式求值过程的程序本文简介:实习报告题目:设计一个演示用运算优先法对算数表达式求值过程的程序。班级:姓名:学号:完成日期:一、需求分析1建立运算数栈SqStack1和运算符栈SqStack2辅助分析算符有限关系.2用户输入以“#”结尾的算数表达式,本程序需要用户自行输入表达式(运算符可以是加(+);减(-);乘(*);除(/)

数据结构实习报告:设计一个演示用运算优先法对算数表达式求值过程的程序本文内容:

实习报告

题目:设计一个演示用运算优先法对算数表达式求值过程的程序。

班级:

姓名:

学号:

完成日期:

一、

需求分析

1建立运算数栈SqStack1和运算符栈SqStack2辅助分析算符有限关系.

2用户输入以“#”结尾的算数表达式,本程序需要用户自行输入表达式(运算符可以是加(+);减(-);乘(*);除(/);括号(())),以字符形式读入,在读入的同时,完成运算符和运算数的识别处理,在识别出运算数的同时,要将其字符序列形式转换成整数形式。

3在程序的适当位置输出运算符栈、运算数栈、输入字符和主要操作的内容,即演示运算操作。

4测试数据见原题。

5程序执行的命令包括:

(1)

建立算数表达式;

(2)

得到运算表达式的值;

(3)

演示运算过程。

二、

概要设计

1.

设定栈的抽象数据类型定义:

ADT

Stack{

数据对象

D={

ai

|

ai

∈charSet,i=1,2,.,n,n≥0

}

数据关系:

R1={

|

ai-1,ai∈D,i=2,.,n

}

(约定an

端为栈顶,a1

端为栈底)

基本操作:

InitStack(

inttop;

int

stacksize;

}SqStack1;//操作数栈

typedef

struct{

charbase;

chartop;

int

stacksize;

}SqStack2;//操作符栈

2、

栈类型

typedef

struct{

charbase;

chartop;

int

stacksize;

}Stack;

//栈类型

栈的基本操作设置如下:

void

InitStack(Stack

S.top=p;

S.size++;

Return

TRUE;

}

else

return

FALSE;

}

Status

Pop(Stack

else{

p=S.top;S.top=S.top->next;

e=p->:data;S.size--;

return

TRUE;

}

}

3、运算代码

int

Operate(int

a,char

theta,int

b)

//计算表达式值:主要是将大的表达式转化成小的表达式进行逐步求值

{

int

c;

if(theta==

+

)

c=a+b;

else

if(theta==

-

)

c=a-b;

else

if(theta==

)

c=a*b;

else

c=a/b;

return

c;

}//Operate

int

result(SqStack1OPND,SqStack2OPTR)

//求值

{

char

a=0;

char

theta;

int

b,c,number=0;

IntInitStack(OPND);

CharInitStack(OPTR);

CharPush(OPTR,#

);

a=getchar();

while(a!=

#

||

CharGetTop(OPTR)!=

#

)

{

printf(“输入字符:%c

“,a);

if(!In(a))//不是运算符则进栈

{

number=0;

while(!In(a))

{

number

=

number*10

+(a-48);//处理多位整数z=10*x+y

a

=

getchar();

}

IntPush(OPND,number);

printf(“主要操作:Push(OPND,%d)

“,number);

}

else

switch(Precede(a,CharGetTop(OPTR)))

{

case

:

theta=CharPop(OPTR);

c=IntPop(OPND);

b=IntPop(OPND);

IntPush(OPND,Operate(b,theta,c));

printf(“主要操作:Operate(%d,%c,%d)

“,b,theta,c);

break;

}

printf(“OPND栈:%d

OPTR栈:%c\n“,IntGetTop(OPND),CharGetTop(OPTR));

}

printf(“The

result

is

%d.\n“,IntGetTop(OPND));

//打印输出表达式值

return

OK;

}

4.主函数和其他函数的代码

void

main()

//主函数,使用自定义函数完成功能

{

SqStack1

s1,*OPND;

SqStack2

s2,*OPTR;

OPND=

OPTR=

printf(“Please

enter

an

expression

with

a

end

of

#

.\n“);

printf(“The

Expression:“);

result(OPND,OPTR);

}

char

Precede(char

a,char

b)//运算优先级判断

{

int

i,j;

char

Table[8][8]={,+,-,*,/,(,),#,+,>,>,,>,-,>,>,,>,*,>,>,>,>,,>,/,>,>,>,>,,>,(,,>,>,>,,>,>,#,#include

#include

#include

#define

STACK_INIT_SIZE

100

#define

STACKINCREMENT

10

#define

ERROR

0

#define

OK

1

//********************************************栈模块

typedef

struct

SqStack1//运算数栈

{

intbase;

inttop;

int

stacksize;

}SqStack1;

typedef

struct

SqStack2//运算符栈

{

charbase;

chartop;

int

stacksize;

}SqStack2;

void

IntInitStack(SqStack1S)

{

S->base=(int)malloc(STACK_INIT_SIZE*sizeof(int));

if(!S->base)

exit(ERROR);

S->top=S->base;

S->stacksize=STACK_INIT_SIZE;

}

void

CharInitStack(SqStack2S)

{

S->base=(char)malloc(STACK_INIT_SIZE*sizeof(char));

if(!S->base)

exit(ERROR);

S->top=S->base;

S->stacksize=STACK_INIT_SIZE;

}

int

IntGetTop(SqStack1S)

//取栈顶元素

{

int

e;

if((*S).top==(*S).base)

return

0;

e=*((*S).top-1);

return

e;

}

char

CharGetTop(SqStack2S)

//取栈顶元素

{

char

e;

if((*S).top==(*S).base)

return

0;

e=*((*S).top-1);

return

e;

}

int

IntPush(SqStack1S,int

e)

{(*S).top++=e;

return

OK;

}

int

CharPush(SqStack2S,char

e)

{(*S).top++=e;

return

OK;

}

int

IntPop(SqStack1S)

{

int

e;

if((*S).top==(*S).base)

return

0;

e=*--(*S).top;

return

e;

}

int

CharPop(SqStack2S)

{

char

e;

if((*S).top==(*S).base)

return

0;

e=*--(*S).top;

return

e;

}

//——————————————————*******************运算模块

char

Precede(char

a,char

b)//运算优先级判断

{

int

i,j;

char

Table[8][8]={,+,-,*,/,(,),#,+,>,>,,>,-,>,>,,>,*,>,>,>,>,,>,/,>,>,>,>,,>,(,,>,>,>,,>,>,#,:

theta=CharPop(OPTR);

c=IntPop(OPND);

b=IntPop(OPND);

IntPush(OPND,Operate(b,theta,c));

printf(“主要操作:Operate(%d,%c,%d)

“,b,theta,c);

break;

}

printf(“OPND栈:%d

OPTR栈:%c\n“,IntGetTop(OPND),CharGetTop(OPTR));

}

printf(“\n结果:%d.\n“,IntGetTop(OPND));

//打印输出表达式值

return

OK;

}

//————————————————————————主程序模块

void

main()

//主函数,使用自定义函数完成功能

{

SqStack1

s1,*OPND;

SqStack2

s2,*OPTR;

OPND=

OPTR=

printf(“请输入算数表达式并以

#

结尾.\n“);

printf(“算数表达式:“);

result(OPND,OPTR);

}

不该舍不得 2022-07-10 06:43:56

相关推荐

前途的意思

前途原指前面的路程,比喻将来的光景;将行经的前方路途,引申为目标和价值。出自鲁迅《故事新编-奔月》:“圆的雪白的月亮照着前途,凉风吹脸,真是比大猎回来时还有趣。”出处:晋-左思《吴都赋》:“先驱前涂,俞骑骋路。...
展开详情

丼怎么读

jǐng或dǎn。读作jǐng时,同“井”。读作dǎn时,意为投物井中所发出的声音,也可用作姓。中文丼字来源甲骨文,甲骨文即有丼字,或为今“丹”字,井中的一点,为丹砂的象征符号。又因为从“井”得字,所以也指井,...
展开详情

芝麻油是上火还是降火

芝麻油有降火功效。一般黑芝麻食用,白芝麻榨油。中医学认为:本品性味甘、凉,具有润肠通便、解毒生肌之功效。据《本草纲目》上记载:有润燥、解毒、止痛、消肿之功。”《别录》说:利大肠,胞衣不落。生者摩疙肿,生秃发。”...
展开详情

闭门反思的意思

“闭门反思”的意思是关上门反省自己的过错。形容自身冷静下来好好单独地想想所犯之过错,作出深刻反省。成语出自:《汉书·韩延寿传》:“因入卧传舍,闭阁思过。畅姬扳肯殖厩帮询爆墨。”...
展开详情

进退裕如是什么意思

进退裕如,汉语成语,意思谓前进和后退均从容不费力。出自《耆旧续闻》。成语的出处:宋陈鹄《耆旧续闻》卷三:“如乘骏马,进退裕如,不须鞭勒,无不当人意。”成语的用法作谓语、宾语;指进退自如。示例:清薛福成《庸盦笔记...
展开详情

精选推荐更多>

实干的名人例子素材

实干的名人例子素材:
1、达尔文小时候的学习成绩远不如他的妹妹,他在老师和父亲的心目中,是一个十分平庸的孩子,甚至还在一般智慧的水准之下。但他以惊人的毅力坚持野外观察活动和室内研究,最终成为举世闻名的生物学家。
2、三国时,曹操率军作战,在行军途中自己的马踏坏了农田里的庄稼。按照军纪当斩,曹操不掩饰自己的过错,当众割发代首,晓谕三军,受到将士尊敬。
3、中国首位诺贝尔生理学和医学奖获得者屠呦呦凭着艰苦奋斗的精神,经过不断地深入研究和实验,她终于提取出对疟原虫抑制率100%的青蒿素。
4、扁鹊是我国的大医学家,扁鹊在青年时期,结识了一位民间良医,就拜良医为师。他刻苦学习,反复钻研、实践,他不仅掌握了老师积累的全部知识,而且有了新的创造和发展,后来他成为良医。
5、马克思是全世界无产阶级革命的伟大导师,为了揭开资本家剥削工人的秘密,他每天坚持到大英博物馆读书,查阅资料,长时间的大量读书,致使他常做的地方水泥面上磨下了两行沟壕。

校次是什么意思

校次,拼音jiào cì,汉语词语,逐一检查。出自《周礼·天官·宫正》:“以时比宫中之官府次舍之众寡。”汉代郑玄注:“比,校次其人之在否。”
造句:
1、这篇稿子是他负责校次。
2、古卷在旧约全书的基础上彻底做了校次。
3、毕竟,作为经理,你的职责是让别人成长,因此,如果让别人成天到晚地做复印、校次的活,那么你就没有尽职。
4、但是,美玉微瑕,仔细研读,仍能发现其中校勘上的不足,而这些不足多是属于校次的技术性错误。

元朝使用什么样的制度管理中国

元朝(1271年—1368年),是中国历史上首次由少数民族建立的大一统王朝,统治者为蒙古孛儿只斤氏。传五世十一帝,从1206年成吉思汗建立蒙古政权始为162年,从忽必烈定国号元开始历时98年。元朝退出中原后的北元政权一直持续到1402年。
1206年,成吉思汗统一蒙古各部,建立大蒙古国。先后攻灭西辽、西夏、花剌子模、金朝等政权。蒙哥汗去世后,引发了阿里不哥与忽必烈的汗位之争,促使大蒙古国分裂。1260年忽必烈即位称帝,建元“中统”,定都开平府(上都)。1271年,忽必烈取《易经》“大哉乾元”之意改国号为“大元”,次年定都大都。1279年,结束了自唐末以来长期的混乱局面。之后元朝持续对外扩张,进攻日本、缅甸、越南、爪哇等,但均遭失败。元朝中期皇位继承紊乱,政治始终未上正轨,而且汉化迟滞,发展不前。后期政治腐败,权臣干政,民族矛盾与阶级矛盾日益加剧,导致元末农民起义。1368年,朱元璋建立明朝,随后北伐驱逐元廷攻占大都。此后元廷退居漠北,史称北元。1402年,元臣鬼力赤篡夺政权建立鞑靼,北元灭亡。
元朝时期统一多民族国家进一步巩固,疆域超越历代。元朝废除尚书省和门下省,保留中书省与枢密院、御史台分掌政、军、监察三权,地方实行行省制度,开中国行省制度之先河。

宇宙最大的星球是什么星球?

宇宙最大的星球是红巨星。这颗超级恒星的直径超过太阳的114倍,是一个双星系统的一部分。该恒星的质量为太阳的150倍,专家们支持,这是人类历史上首次观测到如此巨大的恒星系统,此前发现的最大恒星的质量为太阳的83倍。
盾牌座UY位于遥远的盾牌座,半径就比太阳大了2000倍,体积则达到了太阳的50亿倍左右。但是质量只有其12倍而已。据估计,这颗恒星的质量大约只有太阳的10倍,在演化为红特超巨星的过程中急剧膨胀,损失了至少一半的质量。
太阳系中的星球相比较大小,海王星是地球的58倍,天王星是地球的65倍,这么看地球也没有差到哪里去,不算太小。接着和更大的星球相比较,比如土星是地球的830倍,木星是地球的1300倍,数千倍的大小差距,已经可以感受到地球的渺小了。地球在宇宙中可能连一粒尘埃都算不上。但就是这个在宇宙中连一粒尘埃都算不上的地球,却孕育了无数智慧的生命,尤其是孕育了人类这种高智慧的生物,这是很多大星球都比不上的。
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200