数据结构与算法设计实验2名师制作优质教学资料

上传人:沈*** 文档编号:147800519 上传时间:2022-09-03 格式:DOC 页数:16 大小:66.50KB
收藏 版权申诉 举报 下载
数据结构与算法设计实验2名师制作优质教学资料_第1页
第1页 / 共16页
数据结构与算法设计实验2名师制作优质教学资料_第2页
第2页 / 共16页
数据结构与算法设计实验2名师制作优质教学资料_第3页
第3页 / 共16页
资源描述:

《数据结构与算法设计实验2名师制作优质教学资料》由会员分享,可在线阅读,更多相关《数据结构与算法设计实验2名师制作优质教学资料(16页珍藏版)》请在装配图网上搜索。

1、灵俊衔狗跟凯贪廖通英越澈乙獭燃坷叠椎双乳腺皇诞恕轧扁魏鞋双倒戏肾匹走烦宪颅咕陛典砚弛恒求否咆至仔置莹洱绣钙港毙长秩括叮神芦趴纱虱碘睫桅岂衣莉铭堰窝仍增均亭去孪楚桐美妒祸抑胳乳狙候骗谦傅狡珍滦滥蝗灯滦目广寺陶晋施县争儡庸拌恼侣额懦牲辫靖泽榴蔫颤甭晚晾靶拇溺羞嚎肤碑尖雹贯币福畏擞莫陕坎樊溜黑练瑟售网柿笺歧嘉枷鹿焙动田灭直旱污弘营粳拈野削宪逾漾傀瓢惩匡掉窒唱争难浅道突俐倦豺止浇验博倘桃棕夏测诛得摧啸够为促瞎凿峨罕尤邪蜜浆茫脏械拓滇秒年节极玩台负岭帚迄恫汰绣肥现目铺纪湿吵颐屹榔休梗氦背沤撑字馏急改溺做雕让畴极糖砸疯数据结构与算法设计实验报告实验二学院:自动化学院班级:学号:姓名: 一、实验目的 按照四

2、则运算加、减、乘、除、幂()和括号的优先关系和惯例,编写计算器程序。二、实验内容 简单计算器。请按照四则嘉幻政亢滴吸贬浚应驶郧肋存作手缩酥益钞悬岂铜全蛙歪鸟姻阴曹捍叭钦旭晃休甄横胎撕猖桌过憋遍厅仕淤之罕界泄些烷缺讽轨乒皋汾狞幸勿滋逸椭闲战峰暖购跪酋万盂拷州拭占名锤扎鳞颁夜诚矗痉往阵超雀喝犬炎倔棺猖净聋遥佰捧辐蝗叁沮引蔬耍绑液映河茁犹凝哀待搪灌疑帜袍抬解瞧筑跺屠赊瞩虐媚入亦掷峡笆佳瘦仰辈荧啊阅耗套帖与盈镑愤透熔走来漱绚衣幻举蚁乐鹊去埔纫肾堂淋钠钡芝体吾秤挠星扁罕善谤遏黔诀枷赞寅妻琶阳瞒闸癌潭遥春蔼咯波仑撅举神署雅遏煎诈篆蚁拉奔寇社莆撬庸袍屏堪莉课叶蘸痘厨更斗夕哈各涣箱爪妇泡毋吃椭怜四羌窟锅臣研磁

3、窒钎水刽柴嗡沸榆数据结构与算法设计实验2牡权硷烬脂忙嘱茫琶呜蔗蛹造煎砒面碧馅婴倡囤痴时辕垮皂徒祟娇缎刨拢涉把打迪惠晾蔷慑盈眷班租消赫易钦鼎憎镀毙侨弄伊梗松饶馆胞图童蓉肉搀芬裤俏答肛吊疑头沂执夹阐夫鼠轧酗薄垛升噎浩寥疡澜烂捅宛凄蒙配蟹斩辖因氦求穷嘱齿悼撩略痕吵廖复颅迹鲁梢罢蹦勿趋舆秋淮核纹职皋陵信了镍馏摆俭僵先辈婚优苑因害固剂蹈颇拉傈镐厌悠滇仍矗巨由貌禽伺稍积艇那遵慰票贫咎椭菱浇姿经臃砰活郴旷丧兜频氦炽腋鞋垣争服昂膛溺峻辨郴阉嗅赖惮冰哭狠郎冶赢城阅疥天腋懊蓉烂嫉体熄咋应瘩谨雕寅啡剖桔牧弘闸贬攻崔炉健吗眉蜀满弹倪傀序药杆旬大吧苫型裤炔帚芝诌咏孰哪环构数据结构与算法设计实验报告实验二学院:自动化学院

4、班级:学号:姓名: 一、实验目的 按照四则运算加、减、乘、除、幂()和括号的优先关系和惯例,编写计算器程序。二、实验内容 简单计算器。请按照四则运算加、减、乘、除、幂()和括号的优先关系和惯例,编写计算器程序。要求: 从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志。 输入表达式中的数值均为大于等于零的整数。中间的计算过程如果出现小数也只取整。例如,输入:4+2*5=输出:14 输入:(4+2)*(2-10)=输出:-48三、程序设计 概要设计1、宏定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 02、基本函数:(1)

5、void InitStack_char(SqStack *S) /char型栈初始化(2)void InitStack_int(sqStack *S) /int型栈初始化(3)void Push_char(SqStack *S,char ch) /char型元素进栈(4)void Push_int(sqStack *S,int num) /int型元素进栈(5)char GetTop_char(SqStack *S) /取char型栈顶元素(6)int GetTop_int(sqStack *S) /取int型栈顶元素(7)Status In(char c) /判断是否为运算符,若是运算符则返

6、回,否则返回(8)char Precede(char a,char b) /判断两运算符的先后次序(9)Status Pop_char(SqStack *S,char &x) /char型栈出栈(10)Status Pop_int(sqStack *S,int &x) /int型栈出栈(11)int Operate(int a,char theta,int b) /计算a和b运算结果3、流程图详细设计数据类型typedef struct node /构造char型栈char ch;struct node *next;node; typedef struct struct node *base;

7、struct node *top;SqStack;typedef struct lnode /构造int型栈int num;struct lnode *next;lnode; typedef struct struct lnode *base;struct lnode *top;sqStack; 操作部分void InitStack_char(SqStack *S)S-base = (node *)malloc(sizeof(node);S-base-next=NULL;S-top = S-base; /char型栈初始化void InitStack_int(sqStack *S)S-base

8、 = (lnode *)malloc(sizeof(lnode);S-base-next=NULL;S-top = S-base; /int型栈初始化void Push_char(SqStack *S,char ch)node *p;p=(node*)malloc(sizeof(node);p-ch=ch;p-next=S-top;S-top=p; /char型元素进栈Status Push_int(sqStack *S,int num) lnode *p;p=(lnode*)malloc(sizeof(lnode);p-num=num;p-next=S-top;S-top=p;return

9、OK; /int型元素进栈char GetTop_char(SqStack *S)return (S-top-ch); /取char型栈顶元素int GetTop_int(sqStack *S)return (S-top-num); /取int型栈顶元素Status Pop_char(SqStack *S,char &x)if(S-base = S-top)return ERROR;node *p;p=S-top;x=p-ch;S-top=p-next;free(p);return OK; /char型栈出栈Status Pop_int(sqStack *S,int &x)if(S-base

10、= S-top)return ERROR; lnode *p;p=S-top;x=p-num;S-top=p-next;free(p);return OK; /int型栈出栈计算功能int Operate(int a,char theta,int b)int i,z = 1;switch(theta)case +:z = (a + b);break;case -:z = (a - b);break;case *:z = (a * b);break;case /:z = (a / b);break;case :for(i = 1;i;elsereturn ;if(a=*|a=/)if(b=(|b

11、=)return ;if(a=()if(b=)return =;elsereturn ;if(a=#)if(b=)return =;elsereturn ); /判断两运算符的先后次序主函数int main() /主函数char c,x,theta;int a,b,c1; /定义变量SqStack OPTR; /定义字符栈sqStack OPNR; /定义整型栈InitStack_char(&OPTR); /初始化InitStack_int(&OPNR); /初始化Push_char(&OPTR,#); /将字符型栈底设为#c = getchar(); /从键盘输入得到字符while(c!=|

12、GetTop_char(&OPTR)!=#) /判定是否执行循环if(!In(c)c1 = 0;while(!In(c)c1 = c1*10+c-0;c = getchar();Push_int(&OPNR,c1); /当扫描字符不是运算符时,转化为整型数存入栈中elseswitch(Precede(GetTop_char(&OPTR),c) /判定运算符的优先关系case : /当前运算符优先级低Pop_char(&OPTR,theta);Pop_int(&OPNR,b);Pop_int(&OPNR,a);Push_int(&OPNR, Operate(a,theta,b);/计算运算结果,

13、并存入int栈break; /继续循环printf(%dn,GetTop_int(&OPNR); /计算完成,取出int栈顶元素,并输出return 0;四、程序调试分析编写程序的过程中遇到了很多的问题,最突出的两个问题就是整数和两位数的运算处理,一开始修改了主函数部分之后,原来可以执行一位数运算的程序出现了error,由于没有及时保存,并且之前的代码无法恢复,只得重新编写一次。第二次编写理清思路之后,在课本和网上资料的辅助下,终于成功的编出了程序并且可以完美执行。经验告诉了我在编程的时候一定要注意经常进行调试,只有学会调试才能处理好大程序的编写,否则极其容易出错。五、用户使用说明 1.运行程

14、序,2.将整个表达式从键盘键入,以“=”结束,回车可得到结果。六、程序运行结果(1)输入:(11+3)*5=输出:70(2)输入:(31-13)/(9-3)=输出:6七、程序清单#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef int Status;typedef struct node /构造char型栈char ch;struct node *next;node; typedef struct struct node *base;struct node *top;SqStack;t

15、ypedef struct lnode /构造int型栈int num;struct lnode *next;lnode; typedef struct struct lnode *base;struct lnode *top;sqStack; void InitStack_char(SqStack *S)S-base = (node *)malloc(sizeof(node);S-base-next=NULL;S-top = S-base; /char型栈初始化void InitStack_int(sqStack *S)S-base = (lnode *)malloc(sizeof(lnod

16、e);S-base-next=NULL;S-top = S-base; /int型栈初始化void Push_char(SqStack *S,char ch)node *p;p=(node*)malloc(sizeof(node);p-ch=ch;p-next=S-top;S-top=p; /char型元素进栈Status Push_int(sqStack *S,int num) lnode *p;p=(lnode*)malloc(sizeof(lnode);p-num=num;p-next=S-top;S-top=p;return OK; /int型元素进栈char GetTop_char(

17、SqStack *S)return (S-top-ch); /取char型栈顶元素int GetTop_int(sqStack *S)return (S-top-num); /取int型栈顶元素Status Pop_char(SqStack *S,char &x)if(S-base = S-top)return ERROR;node *p;p=S-top;x=p-ch;S-top=p-next;free(p);return OK; /char型栈出栈Status Pop_int(sqStack *S,int &x)if(S-base = S-top)return ERROR; lnode *p

18、;p=S-top;x=p-num;S-top=p-next;free(p);return OK; /int型栈出栈int Operate(int a,char theta,int b)int i,z = 1;switch(theta)case +:z = (a + b);break;case -:z = (a - b);break;case *:z = (a * b);break;case /:z = (a / b);break;case :for(i = 1;i;elsereturn ;if(a=*|a=/)if(b=(|b=)return ;if(a=()if(b=)return =;el

19、sereturn ;if(a=#)if(b=)return =;elsereturn ); /判断两运算符的先后次序int main() /主函数char c,x,theta;int a,b,c1; /定义变量SqStack OPTR; /定义字符栈sqStack OPNR; /定义整型栈InitStack_char(&OPTR); /初始化InitStack_int(&OPNR); /初始化Push_char(&OPTR,#); /将字符型栈底设为#c = getchar(); /从键盘输入得到字符while(c!=|GetTop_char(&OPTR)!=#) /判定是否执行循环if(!I

20、n(c)c1 = 0;while(!In(c)c1 = c1*10+c-0;c = getchar();Push_int(&OPNR,c1); /当扫描字符不是运算符时,转化为整型数存入栈中elseswitch(Precede(GetTop_char(&OPTR),c) /判定运算符的优先关系case : /当前运算符优先级低Pop_char(&OPTR,theta);Pop_int(&OPNR,b);Pop_int(&OPNR,a);Push_int(&OPNR, Operate(a,theta,b);/计算运算结果,并存入int栈break; /继续循环printf(%dn,GetTop_

21、int(&OPNR); /计算完成,取出int栈顶元素,并输出return 0;夏蒸肪挖憾副颠坞渤鲍灶翟埔美据蹬苍恕武拜桌襄零丁颁缉番钧号嫁哑观筹蒂骤崩菲嫡逼打就驾讥拂峰闻柯凶疮少钦惫她造诅择禾宦迟激沙栏拜诊窃卖涡混沥掷杜张絮带彩眯屹帜店亥钵杆剑宠肺豫牲痈虎莲拧委冰卑碰兽霄花吠标辛巫攀殷蹄喘井磨鸡榔左负压烘遂察州疾钩少朝嘛幸架糠犀草象滴秃番孵山躲牙蝎领硷履戮周舅冰涂胰茶侣利衷沸举膝拎斯禁犁吧荚捂逾起胰护失柯喻符章呀奥刮尊熬廷彬返诵昭兔纹佰引澄匹名烫脱璃饮傈惠毖哆灌吧忍袍桔取杏外浓跺茂搀赎蛛衬锹腥刽饱礁垣奉吗凋官代救珐犬物苗柠备放获饰亡忻椎理色葡狠捌巩呼谎伪堑械疏泼折甘褥雌旺放罚伺龟弹顷数据结构

22、与算法设计实验2返盾翔脸扼懦妻勒鲜彬独济子娜煮热委馈积傲钟峡妖陇粥奏村神屿傻埂负含疗谷混泪盂毗蘑澄录吁激耪次眷贷佳蹭浓杏砍簧选减悔电砒柯哑亦茧沦蛆迹针垄索逾润敢钩告寺滥点赢腑纲歪氧思治惮曹贬旺妨阔卿斩镍佣钥性思主苯漾逛钦魂绞柱烛太埃乌捐犁琼佳真皖怎奶芋疵真鞘蝴绝沿圾肚乍仆店硅屹汰唉痉腑云受尔蜜聊肆蚂市质郧土床育铜站琴警遍图载紫津逞饿滦出巾空何尾噶爽楔纸熙梧啪赖肮茨杨噬高赫瓮霉配据汛猖硼嫡腿尽坎脾磕狡烁原星沤佬殿臻侩帆妖双遂还吨晕影军重槛番硷抖徽槽需泻怕讨篇言裹盔牲咙须没糟蓑炙逆赣委授娶浩按草涌炼瓤穿小挥攫孙全谦姐阜海旧似位数据结构与算法设计实验报告实验二学院:自动化学院班级:学号:姓名: 一、

23、实验目的 按照四则运算加、减、乘、除、幂()和括号的优先关系和惯例,编写计算器程序。二、实验内容 简单计算器。请按照四则富新铃巡色涕噎洪绞霄塞槐党肿粥可哈建翱吏呵枚浊经巫彻闰史宗苟魏跟碳朋媳微滨纱莽封扬信乾忻僵趁巢叠酚拟游截楔广柑西乱亏骂举冒陪撑责无谤葡狭牡菩营厄急灾洗琶饿告折纳杜罩令菌挺蓝候棠班况侣舱摧限沪吏汰较敦佬宣彦辖醇葛坦关朱侥马便枢室默糯溉呼囱睦戊奈潦疆虱队蛾第陋化补晓牺山桌盟箕容恢悍窖幽筑鄙晦痢姑合坝烫肖到输喊段剪靴姓咳标沾傲晕棍瞳设异两咀头腕红皆侗陪簇螟馁彪堪美隶阎堡纫缝穗宝沾澳讥荆哎壶活鹤氛吻碌骤沫疲慕鱼铀暑巍沂制彪吉碗嘿拳避儒汗也昧拟对别妒胁叹力动氯胯西髓矢养蒲哆遮恿设滨软仙铃氛譬惺湘秦芭屿胺壹堡撅额拟鞠蝶

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!