文档详情

C语言计算器源代码.docx

发布:2024-07-24约7.73千字共26页下载文档
文本预览下载声明

C++语言编写。。#includeiostream#includecmath#includestringusingnamespacestd;

constdoublepi=3constdoublee=2.718281828459;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],先初始化int

显示全部
相似文档