VC计算器实现实验报告.docx
- 文档编号:14105378
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:48
- 大小:157.32KB
VC计算器实现实验报告.docx
《VC计算器实现实验报告.docx》由会员分享,可在线阅读,更多相关《VC计算器实现实验报告.docx(48页珍藏版)》请在冰点文库上搜索。
VC计算器实现实验报告
VC课程设计实验报告
课题名称:
计算器实现
姓名:
陈锋
学号:
2008221105110010
提交报告时间:
2010年11月22日
课程设计目标
实验设计一个计算器,要求可通过按钮输入数字、运算符,能通过按钮实现退格、清除功能,实现整数的加、减、乘、除、取余、开方、平方等运算功能,必要的错误处理,如除零;可以通过键盘输入数字、退格、运算符(+、-、*、/、%、=),实现括号运算;实现不同进制(二进制、十进制、八进制、十六进制)下的加、减、乘、除、取余、开方、平方等运算功能。
1.分析与设计
(1)实现方法:
编程语言为C++语言。
编程方法:
通过一个文本框接收所输入的运算表达式,然后将其转换成后缀表达式并将各个数字先转换成十进制数值进行计算,最后再转换成相应进制的字符串。
(2)代码设计说明:
文件和类的设计说明:
创建一个头文件:
Calculate.h
内容如下:
#include"stdio.h"
constintMaxSize=30;
constintMaxPri=8;
BOOLdecimal_2;//为真代表选择相应的进制
BOOLdecimal_8;
BOOLdecimal_10;
BOOLdecimal_16;
struct
{
charch;
intpri;
}
lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'%',5},{'+',3},{'-',3},{')',8},{'^',7}},
rpri[]={{'=',0},{'(',8},{'*',4},{'/',4},{'%',4},{'+',2},{'-',2},{')',1},{'^',6}};
intleftpri(charop)//求左运算符的优先级
{
for(inti=0;i if(lpri[i].ch==op) returnlpri[i].pri; } intrightpri(charop)//求右运算符op的优先级 { for(inti=0;i if(rpri[i].ch==op) returnrpri[i].pri; } intInOp(charch)//判断ch是否为运算符 { if(ch=='('||ch==')'||ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='%'||ch=='^'||ch=='('||ch==')') return1; elsereturn0; } intPrecede(charop1,charop2) { if(leftpri(op1)==rightpri(op2)) return0; elseif(leftpri(op1) return-1; elsereturn1; } voidtrans(char*exp,charpostexp[])//将算术表达式转换成后缀表达式 { struct { chardata[MaxSize]; inttop; }op; inti=0; op.top=0; op.data[op.top]='='; while(*exp! ='\0') { if(! InOp(*exp)) { while(*exp>='0'&&*exp<='9'||*exp=='.'||*exp>='a'&&*exp<='f') { postexp[i++]=*exp; exp++; } postexp[i++]='#'; } else { switch(Precede(op.data[op.top],*exp)) { case-1: op.top++; op.data[op.top]=*exp; exp++; break; case0: op.top--; exp++; break; case1: postexp[i++]=op.data[op.top]; op.top--; break; } } } while(op.data[op.top]! ='=') { postexp[i++]=op.data[op.top]; op.top--; } postexp[i]='\0'; } floatcompvalue(char*postexp)//计算后缀表达式的值 { struct { floatdata[MaxSize]; inttop; }st; floatd,a,b,c; st.top=-1; while(*postexp! ='\0') { switch(*postexp) { case'+': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; c=a+b; st.top++; st.data[st.top]=c; break; case'-': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; c=b-a; st.top++; st.data[st.top]=c; break; case'*': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; c=a*b; st.top++; st.data[st.top]=c; break; case'/': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; if(a! =0) { c=b/a; st.top++; st.data[st.top]=c; } else { MessageBox(NULL,"\t除零错误! ","Error",MB_OK); st.data[st.top]=0; break; } break; case'%': a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; if(a! =0) { c=(int)b%(int)a; st.top++; st.data[st.top]=c; } else { MessageBox(NULL,"\t余零错误! ","Error",MB_OK); st.data[st.top]=0; break; } break; case'^': { a=st.data[st.top]; st.top--; b=st.data[st.top]; st.top--; floatd=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 计算器 实现 实验 报告