




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四川大学软件学院实验报告学号:1043111051姓名:王金科专业:软件工程班级:2010级5班课程名称数据结构
实验课时8实验项目计算器实验时间8到10周实验目的了解c++类的封装和KMP算法。实验环境Windows平台VC6.0++
实验内容(算法、程序、步骤和方法)部分函数创建思想创建过程如下:实验流程图程序清单文件名:main.cpp#include<iostream>usingnamespacestd;#include<stdio.h>#include<malloc.h>#include"DefNit.h"#include"Compare.h"#include<windows.h>intmain(){LinkOptrT;LinkOpndN;InitStack(&T);PushOptr(T,'#');InitStack(&N);charch,key;inti=0,j=0,num2=0,op1,op2;while(1){ system("cls");cout<<"\n\n\t\t\t*********计算器*********”;cout<<"\n\n\t\t):请输入算数表达式(数入#号结束输入)";ch=getchar();while(ch!='#'||GetTop1(T)!='#'){if(!IsOptr(ch)) { i++; if(i<=j)num2=(int(ch)-48); if(i>j) { num2=num2*10+(int(ch)-48); i=j=0; } if(!IsOptr(ch=getchar())) i++; if(i==j) PushOpnd(N,num2);//用getchar()函数读进来的字符肯定只能是一个字符,比如,12是先读‘1’,然后读‘2’,这里的i和j是用来判断个位数还是十位数的,num2是把运算数栈前零散的字符统计出来} else switch(Precede(GetTop1(T),ch)) { case'<': PushOptr(T,ch); if(ch!='('&&ch!=')') j++; ch=getchar(); break; case'=': PopOptr(T); ch=getchar(); break; case'>': op1=PopOpnd(N); op2=PopOpnd(N); PushOpnd(N,Operate(op2,PopOptr(T),op1));break; }}cout<<"\n\n\t\t表达式的最终结果为:";printf("%5d\n",GetTop2(N));cout<<"\n\n\t\t是否继续(Y/N)";cin>>key;if(key=='n'||key=='N'){ break;}}cout<<"\n\n\t\t";return0;}文件名:Compare.hintIsOptr(charch){ charptr[10]={'+','-','*','/','(',')','#'}; for(inti=0;i<7;i++) { if(ch==ptr[i]) returntrue; } returnfalse;}charPrecede(charch1,charch2){if((ch1=='+'||ch1=='-'||ch1=='*'||ch1=='/'||ch1==')')&&(ch2=='+'||ch2=='-'||ch2==')'||ch2=='#')) return'>'; elseif((ch1=='('||ch1=='#')&&(ch2=='+'||ch2=='-'||ch2=='*'||ch2=='/'||ch2=='(')) return'<'; elseif((ch1=='+'||ch1=='-'||ch1=='*'||ch1=='/')&&ch2=='(') return'<'; elseif((ch1=='+'||ch1=='-')&&(ch2=='*'||ch2=='/')) return'<'; elseif((ch1=='*'||ch1=='/'||ch1==')')&&(ch2=='*'||ch2=='/')) return'>'; elseif(ch1=='('&&ch2==')') return'='; elseif(ch1=='#'&&ch2=='#') return'='; else returnfalse;}intOperate(intx,charch,inty){if(ch=='+') returnx+y; elseif(ch=='-') returnx-y; elseif(ch=='*') returnx*y; elseif(ch=='/') returnx/y; else returnfalse;}文件名:DefNit.htypedefstructNode1{charch;structNode1*Next;}Optr,*LinkOptr;//运算符栈typedefstructNode{intnum; structNode*Next;}Opnd,*LinkOpnd;//运算数栈voidInitStack(LinkOptr*S){(*S)=(LinkOptr)malloc(sizeof(Optr)); (*S)->Next=NULL;}voidInitStack(LinkOpnd*S){(*S)=(LinkOpnd)malloc(sizeof(Opnd)); (*S)->Next=NULL;}intPushOptr(LinkOptrpr,charch1){LinkOptrtemp;temp=(LinkOptr)malloc(sizeof(Optr));temp->ch=ch1;temp->Next=pr->Next;pr->Next=temp;returntrue;}intPushOpnd(LinkOpndpn,intnum1){LinkOpndtemp;temp=(LinkOpnd)malloc(sizeof(Opnd));temp->num=num1;temp->Next=pn->Next;pn->Next=temp;returntrue;}charPopOptr(LinkOptrS){if(S->Next==NULL) returntrue;LinkOptrtemp;temp=S->Next;S->Next=temp->Next;returntemp->ch;free(temp);}intPopOpnd(LinkOpndS){if(S->Next==NULL) returntrue;LinkOpndtemp;temp=S->Next;S->Next=temp->Next;returntemp->num;free(temp);}charGetTop1(LinkOptrS){returnS->Next->ch;}intGetTop2(LinkOpndS){returnS->Next->num;}实验内容(算法、程序、步骤和方法)数据记录和计算
结论(结果)
这个程序达到了实验的要求,可以实现运算表达式的输入、运算和输出,而且可以进行输入验错,可以正常运行。小结
自己在整个课程设计过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烘焙店投资加盟合同范本
- 混凝土配料劳务合同范本
- 消防检测合同的补充协议
- 洗车店急需转让合同范本
- 漂流项目运营协议书范本
- 煤气管道转让协议书模板
- 泉州串串香加盟合同范本
- 物业顾问合同协议书范本
- 砂滤池清洗回填合同范本
- 铺面场地出租协议书模板
- 医院选拔任用管理办法
- 2025年安徽皖信人力招聘笔试备考题库(带答案详解)
- 四川省成都市2025年中考语文真题试卷及答案
- 燃气工程规范化管理课件
- 光伏电站安全管理课件
- 编辑校对员笔试试题及答案
- 农民手机应用培训
- 湖南省邵阳市海谊中学2024-2025学年高一上学期期末考试历史试题(原卷版及答案)
- 煤场考试试题及答案
- 2025年河南省中考数学真题试卷及答案解析
- 2025春季学期国开电大专科《建筑施工技术》一平台在线形考(形考任务1至4)试题及答案
评论
0/150
提交评论