版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
四川大学软件学院实验报告学号: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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二手房产买卖抵押合同(二零二四年)
- 办公室管理工作总结
- 《诊断眼位与斜视》
- 2024版房产按揭贷款新条款2篇
- 2024版普通货物运输合同范本范文
- 口腔种植巡回护士护理讲课
- 物业管理服务合同标准范本
- 2024年工业自动化控制系统研发投资合同
- 国际贸易21进口合同的履行
- MS和偏头痛练习题
- 《乘用车越野性能主观评价方法》
- 国家电网招聘之财务会计类题库含完整答案(必刷)
- 幼师个人成长发展规划
- 2024-2025学年北师大版高二上学期期末英语试题及解答参考
- 2024年手术室带教工作计划样本(5篇)
- 一年级数学(上)计算题专项练习汇编
- 中医基础理论课件
- 保安服务招投标书范本(两篇)2024
- 辽宁省沈阳市五校协作体2024-2025学年高二上学期11月期中考试语文试题(含答案)
- 算法分析与设计学习通超星期末考试答案章节答案2024年
- 保密知识培训
评论
0/150
提交评论