C++课程设计简单计算器的设计 2Word下载.docx

上传人:b****7 文档编号:22939817 上传时间:2023-02-06 格式:DOCX 页数:30 大小:141.85KB
下载 相关 举报
C++课程设计简单计算器的设计 2Word下载.docx_第1页
第1页 / 共30页
C++课程设计简单计算器的设计 2Word下载.docx_第2页
第2页 / 共30页
C++课程设计简单计算器的设计 2Word下载.docx_第3页
第3页 / 共30页
C++课程设计简单计算器的设计 2Word下载.docx_第4页
第4页 / 共30页
C++课程设计简单计算器的设计 2Word下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

C++课程设计简单计算器的设计 2Word下载.docx

《C++课程设计简单计算器的设计 2Word下载.docx》由会员分享,可在线阅读,更多相关《C++课程设计简单计算器的设计 2Word下载.docx(30页珍藏版)》请在冰豆网上搜索。

C++课程设计简单计算器的设计 2Word下载.docx

VC++6.0系统可以在一张CD盘上,也可以在“VisualStudio(VisualC++、VisualFoxpro)”等产品的第一张CD盘上。

一般都有一个VC的自动安装程序,也可以执行VC6目录下的setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。

在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD盘重新执行setup.exe安装程序,安装程序会检测当前系统安装VC6的足件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要添加的部件或撤消选定要删除的部件。

与一般的应用软件一样,有以下两种启动方式:

(1)通过“开始”按钮,选择“程序”菜单,然后打开“MicrosoftVisualstudio6.0中文版”子菜单中的“MicrosoftVisualC++6.0中文版”程序。

(2)用户也可以使用命令行启动VC。

单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入c:

\ProgramFiles\MicrosoftVisualStudio\VC98\VC6.exe(按默认盘符和路径安装)即可。

1.4可行性及需求分析

本设计是简单计算器。

日常计算机使用中,常常涉及到一些有关计算的问题,一个小型的计算器软件变得非常有用,该校型计算器需要空间资源较少,对电脑其他程序的应用影响较小。

它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;

醒目美观的软件封面。

使用人员能快捷简单地进行操作。

即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

本软件主要用于计算机windows2000/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。

要程序能实现:

加,减,乘,除,开方,倒数等运算功能;

还要实现数据的输入,输出,计算,显示及程序退出等功能。

另外还可以实现多种科学计算的功能,如:

三角函数的计算,弧度与角度间的转换,对数指数的计算等等。

二、程序设计与实现

2.1程序结构

本计算器首先是通过在计算器的界面上按下相应的按钮,来进行基本的加,减,乘,除等基本运算,计算器还能够进行平方运算,求平方根运算,乘方运算,三角函数运算(包括正弦函数(sin)、余弦函数(cos)、正切函数(tan)、余切函数(cot)),对数函数(ln、log),指数函数(exp),幂函数(x~)等运算。

2.2详细步骤

2.2.1程序的流程图

2.2.2程序设计具体步骤

1)总体功能:

整个计算器除了基本的加、减、乘、除运算外,另外还有7个功能可以实现七大运算:

三角函数运算功能、对数函数运算功能、指数函数运算功能、乘方运算功能、平方运算功能、根式运算功能、归零功能。

各个运算功能的详细设计说明分别如下:

a、基本运算功能

主要实现数据的加、减、乘、除运算,提供简单的科学计算!

b、三角函数运算功能

用来执行三角函数的运算,包括正弦函数(sin)、余弦函数(cos)和正切函数(tan)

c、对数函数运算功能

用来执行对数函数的运算,包括以e为底ln函数和以10为底的lg函数。

d、指数函数运算功能

用来执行指数函数的运算。

e、乘方运算功能

用来执行乘方的运算,进行数值的成倍计算。

f、平方运算功能

用来执行平方运算,说到底它也属于乘方运算的范畴。

g、根式运算功能用来执行根式的运算。

h.归零、删除功能主要实现数据的清零,当用户输入数据出错时,使用此功能可以清除已输入的内容并重新输入新的运算内容。

具体程序如下:

doubleoperate(doubley,charc,doublex)//对两个数计算(含是双目运算符:

如*,/等等)

{

doubler;

if(c=='

-'

r=x-y;

elseif(c=='

+'

r=x+y;

/'

&

&

y!

=0)

r=x/y;

*'

r=x*y;

^'

{

r=1;

for(inti=1;

i<

=y;

i++)

r*=x;

}

%'

intr0=(int)x%(int)y;

r=double(r0);

returnr;

}

doubleoperate_one(doubleone,charcc)//对一个数运算(含单目运算符:

如log(L),sin(S)等等)

if(cc=='

Q'

r=sqrt(one);

elseif(cc=='

C'

r=cos(one);

S'

r=sin(one);

T'

r=tan(one);

c'

r=acos(one);

s'

r=asin(one);

t'

r=atan(one);

doubleoperate_L(doublea,doubleb,chardian)//求对数的值

doubler=log(b)/log(a);

2)运算符的比较等级

typedefstructnode//为了处理符号而建立的链表(如:

1+(-2))

chardata;

node*next;

}node;

typedefstructstack_num//存储数的栈

double*top;

double*base;

}stack_num;

typedefstructstack_char//存储运算符号的栈

char*top;

char*base;

}stack_char;

stack_numS_num;

//定义

stack_charS_char;

charfu[18]={'

\n'

'

)'

L'

('

};

intcompare[1000];

//表现出各运算符号的优先级

doubleshu[1000];

//存储"

数"

的数组

doubledai_result;

//运算的结果,是为了处理M运算(简介函数里有M的定义)

intbiao=0;

//和dia_result一样,为了处理M运算

charline[SIZE];

//输入的所要计算的表达式

voidinit()//初始化

compare[fu[0]]=-2;

//用数字的大小表现出符号的优先级

compare[fu[1]]=-1;

compare[fu[2]]=2;

compare[fu[3]]=2;

compare[fu[4]]=4;

compare[fu[5]]=4;

compare[fu[6]]=4;

compare[fu[7]]=5;

for(inti=8;

=15;

compare[fu[i]]=6;

compare[fu[16]]=7;

S_num.base=(double*)malloc(sizeof(double)*SIZE);

//为栈开辟空间

S_char.base=(char*)malloc(sizeof(char)*SIZE);

//同上

S_num.top=S_num.base;

S_char.top=S_char.base;

voidpush_num(doublen)//数字进栈

*++S_num.top=n;

voidpush_char(charc)//运算符号进栈

*++S_char.top=c;

doublepop_num()//数字出栈

doublem=*S_num.top;

S_num.top--;

returnm;

charpop_char()//运算符号出栈

charcc=*S_char.top;

S_char.top--;

returncc;

charget_top_char()//得到运算符号的栈中最顶端的运算符号

return*S_char.top;

3)整个表达式具体运算程序:

doublecompute()//对整个表达式的计算

charc;

//表示运算符号

intp=0;

//用于shu[++p],先初始化

inti,j;

init();

//进行初始化

push_char('

);

line[strlen(line)]='

;

line[strlen(line)+1]='

\0'

if(biao)

push_num(dai_result);

//把运算的结果先进栈,在这个结果的基础上继续进行运算

biao=0;

for(i=0;

line[i]!

='

)//把表达式中的数字字符串转化成可计算的数字

intflag=0;

intflag1=1;

//标记是否是运算符号

//intflag2=1;

//标记是否出现'

_'

doubleh=0;

intge;

//位数

intbiao_dian=0;

//是否是小数的类型

while

(1)

{

flag1=1;

for(j=0;

j<

=16;

j++)

{

if(line[i]==fu[j])

{

flag1=0;

break;

}

}

if(line[i]=='

break;

.'

i++;

ge=0;

biao_dian=1;

P'

shu[++p]=pi;

E'

shu[++p]=e;

if(flag1)

h=h*10+(line[i]-'

0'

flag=1;

if(biao_dian)

ge++;

else

}

if(flag)

if(biao_dian)

intr=1;

for(intk=1;

k<

=ge;

k++)

r*=10;

h/=r;

shu[++p]=h;

//把转化而来的数字存于数组

if(line[i]=='

shu[++p]=-1;

elseif(line[i]=='

shu[++p]=-2;

shu[++p]=-3;

shu[++p]=-4;

shu[++p]=-5;

shu[++p]=-6;

shu[++p]=-7;

shu[++p]=-8;

shu[++p]=-9;

shu[++p]=-10;

shu[++p]=-11;

shu[++p]=-12;

shu[++p]=-13;

shu[++p]=-14;

shu[++p]=-15;

shu[++p]=-16;

shu[++p]=-17;

i++;

i=1;

while(shu[i]!

=-17||get_top_char()!

doublem=shu[i];

if(m>

push_num(m);

i++;

else

if(m==-1)

c='

elseif(m==-2)

elseif(m==-3)

elseif(m==-4)

elseif(m==-5)

elseif(m==-6)

elseif(m==-7)

elseif(m==-8)

elseif(m==-9)

elseif(m==-10)

elseif(m==-11)

elseif(m==-12)

elseif(m==-13)

elseif(m==-14)

elseif(m==-15)

elseif(m==-16)

elseif(m==-17)

charch=get_top_char();

//得到最顶端运算符号

if(compare[ch]<

compare[c])//运算符号级别的比较

push_char(c);

elseif(ch=='

c=='

pop_char();

elseif(compare[ch]>

=compare[c]&

ch!

if(ch=='

||ch=='

||ch=='

||ch=='

doubleone=pop_num();

chardian=pop_char();

push_num(operate_one(one,dian));

elseif(ch=='

doubleone_L=pop_num();

doubletwo_L=pop_num();

push_num(operate_L(two_L,one_L,dian));

else

doublex=pop_num();

doubley=pop_num();

if(dian=='

x==0)//判断是否除了"

零"

{

cout<

<

"

由于您除了零,结果将是错误的"

endl;

}

push_num(operate(x,dian,y));

//把进行一次计算的结果入栈

doubleresult=pop_num();

//得到结果

returnresult;

4)检查表达式的书写错误:

intcheck_kuohao()//检查表达式括号是否匹配

inti,f=0;

intkuo[SIZE],key=1;

memset(kuo,0,sizeof(kuo));

kuo[++f]=1;

if(kuo[f]==1)

kuo[f]=0;

f--;

key=0;

if(key&

f==0)

return1;

else

return0;

intcheck_char()//检查运算符号是否合法(如:

1+*4)

inti,ge;

ge=0;

while(line[i]=='

||line[i]=='

||line[i]=='

ge++;

if(ge>

=3)

else

voidoutput(doubleresult)//打出结果

printf("

所得结果是:

"

cout<

result<

voidcheck()//检查表达式是否合法

voidintroduce();

charcc;

//决定计算器按哪种功能进行计算

doubleresult;

//结果

voidinput();

if(check_kuohao()&

check_char())//看是否合法,合法则计算

result=compute();

output(result);

cout<

输入一个字符'

M'

或'

D'

F'

决定是否继续:

while(cin>

>

cc)

if(cc=='

{

system("

cls"

introduce();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1