C++语言计算器源代码.docx

上传人:b****3 文档编号:1931268 上传时间:2022-10-25 格式:DOCX 页数:19 大小:18.81KB
下载 相关 举报
C++语言计算器源代码.docx_第1页
第1页 / 共19页
C++语言计算器源代码.docx_第2页
第2页 / 共19页
C++语言计算器源代码.docx_第3页
第3页 / 共19页
C++语言计算器源代码.docx_第4页
第4页 / 共19页
C++语言计算器源代码.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C++语言计算器源代码.docx

《C++语言计算器源代码.docx》由会员分享,可在线阅读,更多相关《C++语言计算器源代码.docx(19页珍藏版)》请在冰豆网上搜索。

C++语言计算器源代码.docx

C++语言计算器源代码

 

C++语言编写。

#include

#include

#include

usingnamespacestd;

constdoublepi=3.14159265;

constdoublee=2.9;

constintSIZE=1000;

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',')','+','-','*','/','%','^',

'Q','L','C','S','T','c','s','t','('};

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;i<=15;i++)

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;

}

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

如*,/等等)

{

doubler;

if(c=='-')

r=x-y;

elseif(c=='+')

r=x+y;

elseif(c=='/'&&y!

=0)

r=x/y;

elseif(c=='*')

r=x*y;

elseif(c=='^')

{

r=1;

for(inti=1;i<=y;i++)

r*=x;

}

elseif(c=='%')

{

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

r=double(r0);

}

returnr;

}

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

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

{

doubler;

if(cc=='Q')

r=sqrt(one);

elseif(cc=='C')

r=cos(one);

elseif(cc=='S')

r=sin(one);

elseif(cc=='T')

r=tan(one);

elseif(cc=='c')

r=acos(one);

elseif(cc=='s')

r=asin(one);

elseif(cc=='t')

r=atan(one);

returnr;

}

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

{

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

returnr;

}

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

{

charc;//表示运算符号

intp=0;//用于shu[++p],先初始化

inti,j;

init();//进行初始化

push_char('\n');

line[strlen(line)]='\n';

line[strlen(line)+1]='\0';

if(biao)

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

biao=0;

for(i=0;line[i]!

='\0';)//把表达式中的数字字符串转化成可计算的数字

{

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;

}

if(line[i]=='.')

{

i++;

ge=0;

biao_dian=1;

}

if(line[i]=='P')

{

shu[++p]=pi;

i++;

break;

}

if(line[i]=='E')

{

shu[++p]=e;

i++;

break;

}

if(flag1)

{

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

flag=1;

i++;

if(biao_dian)

ge++;

}

else

break;

}

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;

elseif(line[i]=='*')

shu[++p]=-3;

elseif(line[i]=='/')

shu[++p]=-4;

elseif(line[i]=='%')

shu[++p]=-5;

elseif(line[i]=='^')

shu[++p]=-6;

elseif(line[i]=='Q')

shu[++p]=-7;

elseif(line[i]=='L')

shu[++p]=-8;

elseif(line[i]=='C')

shu[++p]=-9;

elseif(line[i]=='S')

shu[++p]=-10;

elseif(line[i]=='T')

shu[++p]=-11;

elseif(line[i]=='c')

shu[++p]=-12;

elseif(line[i]=='s')

shu[++p]=-13;

elseif(line[i]=='t')

shu[++p]=-14;

elseif(line[i]=='(')

shu[++p]=-15;

elseif(line[i]==')')

shu[++p]=-16;

elseif(line[i]=='\n')

shu[++p]=-17;

i++;

}

i=1;

while(shu[i]!

=-17||get_top_char()!

='\n')

{

doublem=shu[i];

if(m>=0)

{

push_num(m);

i++;

}

else

{

if(m==-1)

c='+';

elseif(m==-2)

c='-';

elseif(m==-3)

c='*';

elseif(m==-4)

c='/';

elseif(m==-5)

c='%';

elseif(m==-6)

c='^';

elseif(m==-7)

c='Q';

elseif(m==-8)

c='L';

elseif(m==-9)

c='C';

elseif(m==-10)

c='S';

elseif(m==-11)

c='T';

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

当前位置:首页 > PPT模板 > 商务科技

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

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