《C#高级编程》源代码的进.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:10 大小:37KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

《C#高级编程》源代码的进.doc

《C#高级编程》源代码的进.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

/*HYPERLINK"http://www.programbbs.com/doc/"程序名称:表达式计算器编译环境:MicrosoftVisualC++6.0时间:200801*//*说明:采用树形结构处理表达式,按优先级运算结果,一个加,减,乘,除或数值为一个节点优先级如下:函数:4括号:3乘除:2加减:1*/#include<windows.h>#include<iostream>#include<fstream>#include<string>#include<cmath>usingnamespacestd;constcharNUM[]={'0','1','2','3','4','5','6','7','8','9','.'};constcharOPERATION[]={'+','-','*','/'};constdoublePI=3.14159265358979;constdoubleEE=2.71828182818281;classFun//处理系统数学函数的类{public:Fun(stringo,intt,doublel=0.0,doubler=0.0):op(o),type(t),lvalue(l),rvalue(r){}staticstringFUN[];doublecalc();private:inttype;//66601sin9023!33C2stringop;//函数类型doublelvalue;//函数左边的值doublervalue;//函数右边的值staticintFunNum;};intFun::FunNum=10;stringFun::FUN[]={"!","sin","cos","tan","log","ln","C","A","^","-"};/*函数说明:1:log是以10为底的工程对数2:ln是以e为底的自然对数3:C计算组合数输入规则如计算3取2的组合输入表达式3C24:A计算排列数输入规则如计算3取2的排列输入表达式3A25:!计算阶乘6:^x的y次方输入x^y*/intfactorial(intn)//阶乘函数{inti,s=1;for(i=1;i<=n;i++)s*=i;returns;}intC(inta,intb){returnfactorial(a)/(factorial(b)*factorial(a-b));}intA(inta,intb){returnfactorial(a)/factorial(b);}doubleFun::calc()//计算系统函数的值{if(type==0)returnlvalue;else{if(op=="!")returnfactorial(lvalue);if(op=="sin")returnsin(rvalue/180*PI);if(op=="cos")returncos(rvalue/180*PI);if(op=="tan")returntan(rvalue/180*PI);if(op=="log")returnlog10(rvalue);if(op=="ln")returnlog10(rvalue)/log10(EE);if(op=="C")returnC(lvalue,rvalue);if(op=="A")returnA(lvalue,rvalue);if(op=="^")returnpow(lvalue,rvalue);if(op=="-")return-rvalue;else{stringerr="暂时没有函数"+op;MessageBox(NULL,err.c_str(),"错误",MB_OK);return0;}}}structUnit//双向链表保存运算单元{Unit(intp,charo,stringc,doublev,intt,Unit*pr=NULL,Unit*n=NULL):PRI(p),Operation(o),Code(c),value(v),Type(t),Pre(pr),Next(n){}intPRI;//优先级charOperation;//操作符stringCode;//原始代码doublevalue;//数据intType;//类型操作符0数据1函数2Unit*Pre;//构成双向链表Unit*Next;};classNode//表达式树状结构的节点{public:Node(charo,intp,inte=1,doublev=0,Node*ph=NULL,Node*pl=NULL,Node*pr=NULL):Operation(o),PRI(p),Expression(e),value(v),Head(ph),Left(pl),Right(pr){}Node*He