C语言课程设计报告简易计算器设计_第1页
C语言课程设计报告简易计算器设计_第2页
C语言课程设计报告简易计算器设计_第3页
C语言课程设计报告简易计算器设计_第4页
C语言课程设计报告简易计算器设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言课程设计报告设学专班姓计题目:简单计算器设计院名称:电子与信息工程学院业:计算机科学与技术级:计科09-1名:朱凯迪学号19师:定稿日期:2010年03月10日 附源程序清单:Calc.h(运算函数集头文件)#include#include#include#defineHIGHstructhigh#defineMAXN5000#defineMAXSHOW40#definekey_num0#definekey_sym1structhighintnumMAXN;HIGHans,actNum,nowShow;charnowSym=N,lastSym=N;bool_isincMed=true,_

2、lastKey=key_num;intjz=10;bool_isbig(HIGHa,HIGHb)inti;for(i=MAXN-1;i0;i-)if(a.numib.numi)returntrue;elseif(a.numib.numi)returnfalse;returnfalse;voidcopy(char*str,char*rstr,intop,intlen)将str的从op开始的len个字符复制到rstr中inti=0,j=op-1;for(;i=len-1|strj=0;i+,j+)rstri=strj;rstri=0;voidcopyint(HIGHnum,HIGH*rint,in

3、top,intlen)将str的从op开始的len个字符复制到rstr中inti=1,j=op;for(;i=len&jnumi=num.numj;voidinitNum(HIGH*numb)/初始化inti;HIGHtmp;memset(tmp.num,0,sizeof(tmp.num);*numb=tmp;intabsCmp(HIGHa,HIGHb)/比较绝对值大小inti;for(i=MAXN-1;i0;i-)if(a.numi!=b.numi)return(a.numib.numi);return-1;intgetMed(HIGHa)/获取位数inti,med;for(i=MAXN-1

4、;i0;i-)if(a.numi!=0)med=i;break;if(i=0)med=1;returnmed;voidturnSym(HIGH*a)/变号a-num0=a-num0=0?-1:0;voiddecMed(HIGH*a)/减去一位inti,med=getMed(*a);if(med=MAXN-1)med-;for(i=1;inumi=a-numi+1;a-nummed=0;voidincMed(HIGH*a,intb)/加一位inti,med=getMed(*a);HIGHr;initNum(&r);if(medMAXSHOW)for(i=2;inumi-1;r.num1=b;r.

5、num0=a-num0;elser=*a;*a=r;HIGHmul(HIGHa,HIGHb)/高精度乘法inti,j,k,ma,mb;HIGHtmpr,r,zero;initNum(&zero);initNum(&r);ma=getMed(a);mb=getMed(b);for(i=1;i=ma;i+)initNum(&tmpr);for(j=1;jMAXN)initNum(&r);Application-MessageBox(数字太大!,错误,MB_OKCANCEL);nowSym=N;_lastKey=key_num;lastSym=N;returnr;for(k=1;k10)tmpMed

6、=getMed(tmpr);if(tmpMed+iMAXN)initNum(&r);Application-MessageBox(数字太大!,错误,MB_OKCANCEL);nowSym=N;_lastKey=key_num;lastSym=N;returnr;for(j=1;j=tmpMed;j+)r.numj+i-1+=tmpr.numj;for(i=1;i9)initNum(&r);Application-MessageBox(数字太大!,错误,MB_OKCANCEL);nowShow=zero;nowSym=N;_lastKey=key_num;lastSym=N;returnr;if

7、(a.num0=-1&b.num0=-1)|(a.num0=0&b.num0=0)r.num0=0;elser.num0=-1;returnr;HIGHdec(HIGHa,HIGHb)/高精度减法inti,med;HIGHr;HIGHinc(HIGHa,HIGHb);boolm=false;initNum(&r);if(a.num0=-1&b.num0=-1)m=true;elseif(a.num0=-1)b.num0=-1;returninc(a,b);elseif(b.num0=-1)a.num0=-1;returninc(a,b);if(!absCmp(a,b)a.num0=(a.num

8、0=0)?-1:0;b.num0=(b.num0=0)?-1:0;returndec(b,a);med=getMed(a);for(i=1;i=med;i+)r.numi=a.numi-b.numi;for(i=1;i=med;i+)if(r.numi0)r.numi+1-=1;r.numi=10+r.numi;if(m)r.num0=-1;returnr;HIGHinc(HIGHa,HIGHb)/高精度加法inti;HIGHr,zero;boolm=false,err=false;initNum(&r);initNum(&zero);if(a.num0=-1&b.num0=-1)m=true

9、;elseif(a.num0=-1)a.num0=0;returndec(b,a);elseif(b.num0=-1)b.num0=0;returndec(a,b);for(i=1;iMAXN;i+)r.numi=a.numi+b.numi;for(i=1;i9)initNum(&r);Application-MessageBox(数字太大!,错误,MB_OKCANCEL);nowSym=N;_lastKey=key_num;lastSym=N;nowShow=zero;returnr;if(m)r.num0=-1;returnr;HIGHdiv(HIGHa,HIGHb)/高精度整除inti,

10、j,ma=getMed(a),mb=getMed(b);HIGHr,tmpHigh,cmp,someZero,theone;initNum(&r);initNum(&theone);if(a.num0=b.num0);elser.num0=-1;num0=0;num0=0;for(i=ma-mb+1;i0;i-)initNum(&tmpHigh);copyint(a,&tmpHigh,i,ma);initNum(&cmp);for(j=0;!_isbig(cmp,tmpHigh);j+)cmp=inc(cmp,b);theone.num1=j;if(_isbig(mul(theone,b),t

11、mpHigh)j-;r.numi=j;initNum(&someZero);someZero.numi=j;someZero=mul(someZero,b);a=dec(a,someZero);returnr;HIGHmod(HIGHa,HIGHb)/高精度取模inti,j;HIGHtmpans;tmpans=div(a,b);returndec(a,mul(tmpans,b);StringgetHexStr(inta)/得到十六进制字符串if(a=10)returnA;elseif(a=11)returnB;elseif(a=12)returnC;elseif(a=13)returnD;el

12、seif(a=14)returnE;elseif(a=15)returnF;intgetHex(HIGHa)/十六进制取余if(a.num2=0)returna.num1;elsereturna.num2*10+a.num1;/转化十六进制/转化十六进制HIGHhex(HIGHa)inti=0,j;HIGHzero,r,sixteen;initNum(&zero);initNum(&r);initNum(&sixteen);sixteen.num1=6;sixteen.num2=1;if(a.num0=-1)initNum(&r);Application-MessageBox(不能为负数!,错

13、误,MB_OKCANCEL);nowSym=N;_lastKey=key_num;lastSym=N;nowShow=zero;returnr;while(_isbig(a,zero)i+;r.numi=getHex(mod(a,sixteen);a=div(a,sixteen);if(getMed(r)MAXSHOW)initNum(&r);Application-MessageBox(数字太大!,错误,MB_OKCANCEL);nowShow=zero;nowSym=N;_lastKey=key_num;lastSym=N;returnr;returnr;/转化八进制/转化八进制HIGHb

14、ajinzhi(HIGHa)inti=0,j;HIGHzero,r,eight;initNum(&zero);initNum(&r);initNum(&eight);eight.num1=8;if(a.num0=-1)initNum(&r);Application-MessageBox(不能为负数!,错误,MB_OKCANCEL);nowSym=N;_lastKey=key_num;lastSym=N;nowShow=zero;returnr;while(_isbig(a,zero)i+;r.numi=mod(a,eight).num1;a=div(a,eight);if(getMed(r)M

15、AXSHOW)initNum(&r);Application-MessageBox(数字太大!,错误,MB_OKCANCEL);nowShow=zero;nowSym=N;_lastKey=key_num;lastSym=N;returnr;returnr;/转化二进制/转化二进制HIGHbin(HIGHa)inti=0,j;HIGHzero,r,two;initNum(&zero);initNum(&r);initNum(&two);two.num1=2;if(a.num0=-1)initNum(&r);Application-MessageBox(不能为负数!,错误,MB_OKCANCEL

16、);nowShow=zero;nowSym=N;_lastKey=key_num;lastSym=N;returnr;while(_isbig(a,zero)i+;r.numi=a.num1%2;a=div(a,two);if(getMed(r)MAXSHOW)initNum(&r);Application-MessageBox(数字太大!,错误,MB_OKCANCEL);nowShow=zero;nowSym=N;_lastKey=key_num;lastSym=N;returnr;returnr;HIGHbinToshi(HIGHa)inti,med=getMed(a);HIGHr,tmp

17、,the1,tmp2,two,thetwo;initNum(&tmp);initNum(&tmp2);initNum(&the1);initNum(&thetwo);initNum(&two);two.num1=1;thetwo.num1=2;the1.num1=1;initNum(&r);for(i=1;imedb)?meda:medb;for(i=1;imedb)?meda:medb;for(i=1;i=med;i+)r.numi=tmpa.numi人tmpb.numi;r=binToshi(r);returnr;voiddoAns(HIGH*ans,HIGHactNum,char*now

18、Sym,charnewSym,charlastSym,boollastKey)HIGHthe1,zero,tmp;initNum(&the1);the1.num1=1;if(lastKey=key_sym)if(newSym=N)/if(*nowSym!=N)doAns(ans,*ans,nowSym,N,lastSym,key_num);/elseif(*nowSym!=N)doAns(ans,actNum,nowSym,N,lastSym,key_num);elseif(lastSym!=N)doAns(ans,actNum,&lastSym,N,lastSym,key_num);else

19、*ans=actNum;else*nowSym=newSym;elseif(lastKey=key_num)if(*nowSym=N)if(lastSym!=N)doAns(ans,actNum,&lastSym,N,lastSym,lastKey);else*ans=actNum;elseif(*nowSym=+)*ans=inc(actNum,*ans);elseif(*nowSym=-)*ans=dec(*ans,actNum);elseif(*nowSym=*)*ans=mul(*ans,actNum);elseif(*nowSym=/)*ans=div(*ans,actNum);el

20、seif(*nowSym=2)*ans=mul(*ans,*ans);elseif(*nowSym=3)*ans=mul(mul(*ans,*ans),*ans);elseif(*nowSym=Y)initNum(&zero);if(actNum.num0=-1|!_isbig(actNum,zero)*ans=the1;return;zero.num1=2;tmp=*ans;for(;!_isbig(zero,actNum);zero=inc(zero,the1)*ans=mul(*ans,tmp);elseif(*nowSym=L)initNum(&zero);zero.num1=2;if

21、(*nowSym=2)*ans=mul(*ans,zero);elseif(*nowSym=M)*ans=mod(*ans,actNum);elseif(*nowSym=!)actNum=dec(*ans,the1);initNum(&zero);while(_isbig(actNum,zero)*ans=mul(*ans,actNum);actNum=dec(actNum,the1);elseif(*nowSym=A)*ans=and(*ans,actNum);elseif(*nowSym=X)*ans=xor(*ans,actNum);Calc.cpp/*由BCB生成*/#include#

22、pragmahdrstop/USEFORM(Main.cpp,MainForm);/WINAPIWinMain(HINSTANCE,HINSTANCE,LPSTR,int)tryApplication-Initialize();Application-CreateForm(_classid(TMainForm),&MainForm);Application-Run();catch(Exception&exception)Application-ShowException(&exception);catch(.)trythrowException();catch(Exception&except

23、ion)Application-ShowException(&exception);return0;/Main.h/*由BCB生成*/#ifndefMainH#defineMainH/#include#include#include#include#include#include/classTMainForm:publicTForm_published:/IDE-managedComponentsTMainMenu*MainMenu1;TMenuItem*E1;TMenuItem*N1;TMenuItem*H1;TEdit*Show_Editor;TButton*bt_bkspace;TBut

24、ton*bt_ce;TButton*bt_Leftc;TButton*bt_0;TButton*bt_iAndm;TButton*bt_inc;TButton*bt_eq;TButton*bt_1;TButton*bt_2;TButton*bt_3;TButton*bt_dec;TButton*bt_lsh;TButton*bt_4;TButton*bt_5;TButton*bt_6;TButton*bt_mul;TButton*bt_xor;TButton*bt_7;TButton*bt_8;TButton*bt_9;TButton*bt_div;TButton*bt_mod;TButton

25、*bt_and;TButton*bt_xpf;TButton*bt_xlf;TButton*bt_xycf;TButton*bt_njc;TButton*sljz;TButton*sjz;TButton*bjz;TButton*ejz;void_fastcallFormCreate(TObject*Sender);void_fastcallbt_7Click(TObject*Sender);void_fastcallbt_8Click(TObject*Sender);void_fastcallbt_0Click(TObject*Sender);void_fastcallbt_1Click(TO

26、bject*Sender);void_fastcallbt_2Click(TObject*Sender);void_fastcallbt_3Click(TObject*Sender);void_fastcallbt_4Click(TObject*Sender);void_fastcallbt_5Click(TObject*Sender);void_fastcallbt_6Click(TObject*Sender);void_fastcallbt_9Click(TObject*Sender);void_fastcallbt_iAndmClick(TObject*Sender);void_fast

27、callbt_incClick(TObject*Sender);void_fastcallbt_eqClick(TObject*Sender);void_fastcallbt_decClick(TObject*Sender);void_fastcallbt_mulClick(TObject*Sender);void_fastcallShow_EditorKeyPress(TObject*Sender,char&Key);void_fastcallbt_divClick(TObject*Sender);void_fastcallbt_LeftcClick(TObject*Sender);void

28、_fastcallbt_ceClick(TObject*Sender);void_fastcallbt_bkspaceClick(TObject*Sender);void_fastcallbt_xpfClick(TObject*Sender);void_fastcallbt_xlfClick(TObject*Sender);void_fastcallbt_xycfClick(TObject*Sender);void_fastcallbt_lshClick(TObject*Sender);void_fastcallbt_modClick(TObject*Sender);void_fastcall

29、bt_njcClick(TObject*Sender);void_fastcallsjzClick(TObject*Sender);void_fastcallejzClick(TObject*Sender);void_fastcallsljzClick(TObject*Sender);void_fastcallbjzClick(TObject*Sender);void_fastcallbt_andClick(TObject*Sender);void_fastcallbt_xorClick(TObject*Sender);private:/Userdeclarationspublic:/User

30、declarations_fastcallTMainForm(TComponent*Owner);void_fastcallTMainForm:ShowText(HIGHa);/externPACKAGETMainForm*MainForm;/#endifMain.cpp#include#include#pragmahdrstop#includeMain.h/#pragmapackage(smart_init)#pragmaresource*.dfmusingnamespacestd;TMainForm*MainForm;/_fastcallTMainForm:TMainForm(TComponent*Owner)TForm(Owner)/void_fastcallTMainFo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论