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

云卷云舒 范文 报告范文
精选回答

数据结构实习报告:设计一个演示用运算优先法对算数表达式求值过程的程序。本文简介:实习报告题目:设计一个演示用运算优先法对算数表达式求值过程的程序。班级:姓名:学号:完成日期:一、需求分析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-06-28 18:43:38

相关推荐

得意洋洋,反义词(得意洋洋的反义词)

1、得意洋洋的反义词有郁郁寡欢的,有空虚进取的书,有哭天抢地的,有郁郁寡欢的,有失意的,有垂头丧气的,有谦虚谨慎的,有黯然销魂的,有抑郁的。2、“得意”是中国成语,读作:dyyngyng,解释为:得意:明白意图...
展开详情

蚍蜉撼树是什么意思蚍(蚍蜉撼树是什么意思)

1、蜉蝣树(拼音pfhnsh)是中国成语,蜉蝣树(蜉蝣:一种大蚂蚁;Shake:摇动)比喻力量本来就很弱,但是你想摇动一个很强大的东西,就不能随心所欲了。这个成语一般用作主语、谓语、宾语,属于主谓式,含有贬义。...
展开详情

党的基本路线是国家的生命线人民的幸福线对不对

1、党的基本路线的核心内容是“领导和团结全国各族人民,以经济建设为中心,坚持四项基本原则,坚持改革开放,自力更生,艰苦奋斗,为把我国建设成为富强民主文明的社会主义现代化国家而奋斗。”这条路线的核心内容概括起来就...
展开详情

潇字组词有哪些(潇字组词)

1、潇洒,萧叔,潇湘虞姬,潇洒,刮风下雨,萧,刮风下雨,萧?2、浪漫,南极潇湘,夜雨潇湘,三笑,那里潇湘,帅气,小森。3、下雨了,下雨了,下雨了,下雨了,下雨了。4、xio,汉字,拼音为Xio.意为自然大方,不...
展开详情

东人是什么意思(东人)

1、东人,这是一个中文词汇。它的拼音是dngrn,意思是主人和主人。2、解释:《诗小雅大东》:“东人的儿子,我不能为你工作。”朱基传:“东人,一个诸侯。”指西周统治下的东部诸侯国人民,后指陕西以东人民。唐瑜《酬...
展开详情

精选推荐更多>

浮想联翩哪个字错了

浮想联翩没有错别字。
浮想联翩,汉语成语,拼音是fú xiǎng lián piān,意思是飘浮不定的想象,比喻连续不断,许许多多的想象不断涌现出来。
出自晋·陆机《文赋》:“沈辞怫悦;若游鱼衔钩而出重渊之深;浮藻联翩;若翰鸟缨缴而坠曾云之峻”。
用法:作谓语、宾语、定语;形容思绪活跃。多用作贬义,有时也用作褒义,具体视语境而定。
示例:这幅画饱含诗情,使人浮想联翩,神游画外,得到美的享受。
造句:
1、李先生每次收到国内的来信,都浮想联翩,夜不能寐。
2、每次回到故乡,我就浮想联翩,昔日和小伙伴们玩耍嬉戏的情景仿佛就发生在昨天。
3、那天夜里,奥克睡在科根家。他合着眼,但却浮想联翩。
4、映在护城河里水面上的樱花仿佛彩灯,让人浮想联翩。

杨志的人物关系

杨志是中国古典小说《水浒传》中的人物,绰号青面兽,杨家将后人,武举出身,曾任殿帅府制使,因失陷花石纲丢官。后在东京谋求复职不果,穷困卖刀,杀死泼皮牛二,被刺配大名府,得到梁中书的赏识,提拔为管军提辖使。
他护送生辰纲,结果又被劫取,只得上二龙山落草。三山聚义后加入梁山,一百单八将之一,在梁山排第十七位,上应天暗星,位列马军八骠骑兼先锋使。征方腊时病逝于丹徒县,追封忠武郎。
杨志是三代将门之后,五侯杨令公之孙,因脸上生有一大块青记,人称青面兽。他自幼流落关西,早年曾应武举,官至殿司制使官。后押送花石纲,却在黄河里翻船失陷,不敢回京赴命,只得避难江湖。

邯郸学步文言文翻译

《邯郸学步》文言文翻译:燕国寿陵有个少年,千里迢迢来到邯郸,打算学习邯郸人走路的姿式。结果,他不但没有学到赵国人走路的样子,而且把自己原来走路的步子也忘记了,最后只好爬着回去。
原文:
寿陵余子之学行于邯郸,未得国能,又失其故行矣,直匍匐而归耳。
《邯郸学步》出自《庄子·秋水》,寓意:燕国人努力向别人学习,应该肯定,但是他依样画葫芦的生搬硬套并不可取,不但没学到别人的精髓,反而连自己原有的也丢了。
学习不是不能模仿,但必须先细心观察别人的优点,研究邯郸人之所以能够走得优雅的关键之处,除了步法外,那种优雅是否和他们的神态、心境,甚至文化有关?再从自己的实际状况来检视,要将步伐调整成邯郸人的样子,需要做出哪些改变?这样才能取人之长,补己之短。如果像燕国人那样盲目,一味崇拜别人,结果必然是功夫没学成,不切实际,自己的长处也丢光了。
不过若从“刻苦学习”的角度来看,燕国人的精神应该受到肯定,虽然他的学习方式不对,但是至少“肯学”,比起很多不肯学习、任由自己安于现状的人,燕国人更有改变的勇气。如果有朝一日他领悟诀窍,要优雅地走路便指日可待。

北宋诗人晏几道和晏殊是什么关系

北宋词人晏殊和晏几道是父子关系。
晏几道(1038年5月29日-1110年),北宋著名词人。字叔原,号小山,抚州临川文港沙河(今属江西省南昌市进贤县)人。晏殊第七子。
历任颍昌府许田镇监、乾宁军通判、开封府判官等。性孤傲,中年家境中落。与其父晏殊合称“二晏”。词风似父而造诣过之。工于言情,其小令语言清丽,感情深挚,尤负盛名。表达情感直率。多写爱情生活,是婉约派的重要作家。有《小山词》留世。
晏殊(991年-1055年2月27日),字同叔,江南西路抚州临川县(今江西进贤)人。北宋政治家、文学家。
晏殊以词著于文坛,尤擅小令,风格含蓄婉丽,与其第七子晏几道被称为“大晏”和“小晏”,又与欧阳修并称“晏欧”。后世尊其为“北宋倚声家初祖”;亦工诗善文,其文章又能“为天下所宗”。原有文集,今已散佚。存世作品有《珠玉词》、《晏元献遗文》、《类要》残本。
常见热点问答
热点搜索
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