c语言版计算器实验报告_c简单计算器实验报告

2020-02-28 其他范文 下载本文

c语言版计算器实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c简单计算器实验报告”。

计算器实验报告

班级: 07计本(1)班

姓名: 王林

学号: 20706031047

指导老师: 韩静

一、需求分析

(1)制作一个计算器界面工程,有数字运算符等键,输入表达式后,按等号键输入结

束,并显示出正确的结果。

(2)程序能根据运算符的高低进行运算

(3)可以输入括号

二、设计思路

(1)用工程建立一个字符串的类结构,并用编辑框输入相应的数字和字符,并且

输入的字符用字符串逐个接受,当输入为’=’的时候,用‘#‘做最后一个输入。

(2)开始对所输入的字符串进行运算和操作,显示在工程中的编辑框内。

(3)如果结束则关闭,如果再次进行运算则进行清零。

三、主程序段

char Precede(char a,char b)//判断优先级的函数 {

switch(a)

{

case'+':{if(b=='*'||b=='/'||b=='(')return('

else return('>');

}

case'-':{if(b=='*'||b=='/'||b=='(')return('

else return('>');

}

case'*':{if(b=='(')return('

else return('>');

}

case'/':{if(b=='(')return('

else return('>');

}

case'(':{if(b==')')return('=');

else if(b=='#')return('0');

else return('

}

case')':{if(b=='(')return('0');

else return('>');

}

case'#':{if(b==')')return('0');

else if(b=='#')return('=');

else return('

}

}

}

float Operate(float a,char theta,float b)//计算两个数的结果的函数 {

float z;

switch(theta){

case '+':z=a+b;break;

case '-':z=a-b;break;

case '*':z=a*b;break;

case '/':z=a/b;break;

}

return(z);

}

float Shuhe(SqStack1 &OP,int k,int j)

{

int i,e,n=k;

float sum=0,fe;

while(j!=0)

{

Pop1(OP,e);

fe=float(e);

for(i=1;i

fe=fe/10;

sum=sum+fe;

j--;

}

while(k!=0)

{

Pop1(OP,e);

for(i=0;i

e=e*10;

sum=sum+e;

k--;

}

return(sum);

}

void CMyDlg::OnButton12()

{

UpdateData(TRUE);

m_=m_+'#';

SqStack OPTR;

SqStack1 OP;//输入的字符转化为数字的函数//字符型栈的定义//整型型栈的定义

SqStack2 OPND;//浮点型栈的定义int i=0,flag=0,k=0,tag=0,j=0;

float sum,a,b;

char c,x,theta;

InitStack(OPTR);Push(OPTR,'#');

InitStack2(OPND);InitStack1(OP);

c=m_[i++];

while(c!='#'||GetTop(OPTR)!='#')

{

if(c=='.')

{

tag=1;c=m_[i++];

}

else if(c>='0'&&c

{

Push1(OP,int(c)-48);

c=m_[i++];

if(tag==0)k++;

else j++;

flag=1;

}

else

{

if(flag==1)

{

sum=Shuhe(OP,k,j);

Push2(OPND,sum);

OP.top=OP.base;

k=0;flag=0;j=0;tag=0;

}

switch(Precede(GetTop(OPTR),c))

{

case'

{

Push(OPTR,c);c=m_[i++];

break;}

case'='://脱括号并接收下一个字符

{Pop(OPTR,x);c=m_[i++];

break;}

case'>'://退栈并将运算结果入栈

{Pop(OPTR,theta);

Pop2(OPND,b);Pop2(OPND,a);

Push2(OPND,Operate(a,theta,b));

break;}

}

}

}

sum=GetTop2(OPND);

m_.Format(“%f”,sum);

UpdateData(FALSE);

}

四、调试分析

(1)当输入“1+2-3=”时,显示结果为“0.000000”,结果正确,置清零。

(2)当输入“2.96*1.85/6.741=”时,显示结果为“0.812342”,结果正确,置清零。

(3)当输入“2.69-19.145=”时,显示结果为“-16.455000”,结果正确,置清零。

(4)当输入“5-7*(5+1.8)=”时,显示结果为“-42.600002”,结果正确,置清零。

(5)当输入“2-/65=”时,显示结果为“1.969231”,结果错误,置清零。

(6)当输入“-6+9=”时,显示结果为“-107374176.000000”,结果错误,置清零。

(7)当输入“0-6+9=”时,显示结果为“3.000000”,结果正确,置清零。

(8)当输入“(2+3)*5-8=”时,显示结果为“17.000000”,结果正确,置清零。

(9)当输入“6*(-3+1)=”时,显示结果为“12.000000”,结果错误,置清零。

(10)当输入“6*(0-3+1)=”时,显示结果为“-12.000000”,结果正确,置清零。

(11)当输入“6*(1-3)=”时,显示结果为“-12.000000”,结果正确,结束。

调试说明以及分析:

1、当输入为正确的格式时,能算出正确的结果,其中包括:小数、整数以及个位以上的数字,且运算符包括:加、减、乘、除运算,还有就是可以加括号等。

2、当输入为错误的格式是,显示的是错误的结果,如(5)中的运算结果就是错误的。

3、若某个数字是负数,如果直接输入,结果是错误的,但如果变为零减去该数字的绝对值的话或者把两数的顺序更改一下,显示的是正确的结果,如

(6)、(7)、(9)、(10)、(11)做的结果。

4、有时候会出现一些不精确的显示结果,如(4)中显示多的是0.000002,这是由于在C语言的定义时,系统所产生的结果,与算法无关。

2008.12.25

《c语言版计算器实验报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
c语言版计算器实验报告
点击下载文档
相关专题 c简单计算器实验报告 实验报告 计算器 语言版 c简单计算器实验报告 实验报告 计算器 语言版
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文