大学计算机C++语言计算器源代码Word下载.docx

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

大学计算机C++语言计算器源代码Word下载.docx

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

大学计算机C++语言计算器源代码Word下载.docx

//定义

stack_charS_char;

charfu[18]={'

\n'

'

)'

+'

-'

*'

T,'

%'

A'

'

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;

/'

&

&

y!

=0)

r=x/y;

r=x*y;

r=1;

for(inti=1;

=y;

i++)

r*=x;

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

r=double(r0);

returnr;

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

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

if(cc=='

r=sqrt(one);

elseif(cc=='

r=cos(one);

r=sin(one);

r=tan(one);

r=acos(one);

r=asin(one);

r=atan(one);

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

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

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;

}if(line[i]=='

.'

{i++;

ge=0;

biao_dian=1;

P'

{shu[++p]=pi;

i++;

break;

E'

{shu[++p]=e;

}if(flag1)

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

0'

flag=1;

if(biao_dian)ge++;

}elsebreak;

}if(flag)

{if(biao_dian){

intr=1;

for(intk=1;

k<

=ge;

k++)r*=10;

h/=r;

shu[++p]=h;

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

)shu[++p]=-1;

elseif(line[i]=='

)shu[++p]=-2;

)shu[++p]=-3;

)shu[++p]=-4;

)shu[++p]=-5;

elseif(line[i]=='

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);

}else

if(m==-

1)

c=

elseif(m

==-2)

1

J

==-3)

1*1.

==-4)

==-5)

==-6)

j

==-7)

==-8)

==-9)

==-10)

==-11)

==-12)

==-13)

==-14)

==-15)

==-16)

==-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=

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

当前位置:首页 > IT计算机

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

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