C語言課程設(shè)計(jì)報(bào)告【簡易計(jì)算器設(shè)計(jì)】_第1頁
C語言課程設(shè)計(jì)報(bào)告【簡易計(jì)算器設(shè)計(jì)】_第2頁
C語言課程設(shè)計(jì)報(bào)告【簡易計(jì)算器設(shè)計(jì)】_第3頁
C語言課程設(shè)計(jì)報(bào)告【簡易計(jì)算器設(shè)計(jì)】_第4頁
C語言課程設(shè)計(jì)報(bào)告【簡易計(jì)算器設(shè)計(jì)】_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

《C語言課程設(shè)計(jì)》報(bào)告設(shè)計(jì)題目:簡單計(jì)算器設(shè)計(jì)學(xué)院名稱:電子與信息工程學(xué)院專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):計(jì)科09-1姓名:朱凱迪學(xué)號(hào)19指導(dǎo)教師:宋宏圖定稿日期:2023年03月10日設(shè)計(jì)題目簡單計(jì)算器設(shè)計(jì)設(shè)計(jì)要求在功能上功能盡量模擬windows操作系統(tǒng)中的計(jì)算器,系統(tǒng)界面不做強(qiáng)制要求。設(shè)計(jì)目的通過本項(xiàng)課程設(shè)計(jì),可以培養(yǎng)獨(dú)立思考、綜合運(yùn)用所學(xué)有關(guān)相應(yīng)知識(shí)的能力,能更好的穩(wěn)固《C語言程序設(shè)計(jì)》課程學(xué)習(xí)的內(nèi)容,掌握工程軟件設(shè)計(jì)的根本方法,強(qiáng)化上機(jī)動(dòng)手編程能力,闖過理論與實(shí)踐相結(jié)合的難關(guān)!更加了解了c語言的好處和其可用性!同時(shí)增加了同學(xué)之間的團(tuán)隊(duì)合作精神!更加也體會(huì)到以后在工作中團(tuán)隊(duì)合作的重要性和必要性!通過C語言課程設(shè)計(jì),使學(xué)生了解高級(jí)程序設(shè)計(jì)語言的結(jié)構(gòu),掌握根本的程序設(shè)計(jì)過程和技巧,掌握根本的分析問題和利用計(jì)算機(jī)求解問題的能力,具備初步的高級(jí)語言程序設(shè)計(jì)能力。為后續(xù)各門計(jì)算機(jī)課程的學(xué)習(xí)和畢業(yè)設(shè)計(jì)打下堅(jiān)實(shí)根底。設(shè)計(jì)思想及過程由于需要使功能盡量模仿Windows下的計(jì)算器,而很多功能要以圖形界面實(shí)現(xiàn),故用BorlandC++Builder編寫。所以用的是面向?qū)ο蟪绦蛟O(shè)計(jì)。但因?yàn)檫@是C語言的課程設(shè)計(jì),所以除了面向?qū)ο蟮氖褂靡酝?,所有語法都是按照C語言的格式編寫。采用工程模式,文件包括calc.h(運(yùn)算主函數(shù)頭文件,包括各運(yùn)算符的操作以及其輔助函數(shù))、Main.h(窗體類的聲明頭文件)、Calc.cpp(工程初始化文件)、Main.cpp(代碼主文件,包括各空間操作的函數(shù))以及一些其它附屬文件,包括dll動(dòng)態(tài)鏈接庫。在參考了Windows里的計(jì)算器以后,決定在我的課程設(shè)計(jì)中實(shí)現(xiàn):0~9的數(shù)字輸入功能〔小數(shù)點(diǎn)除外〕實(shí)現(xiàn)加、減、乘、整除、取模、階乘、位運(yùn)算左移、x的y次方、與、異或、x立方、x平方運(yùn)算功能,二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制轉(zhuǎn)換功能,正負(fù)轉(zhuǎn)換功能,退格、歸零等功能。數(shù)字顯示最多為40位,超過即用科學(xué)表示法表示〔例如1E50〕。運(yùn)算時(shí)因最高能對(duì)5000位的數(shù)字進(jìn)行運(yùn)算,故所有功能建立在自行編寫代碼的高精度運(yùn)算根底上。在按鍵操作中,先判斷用戶按的是數(shù)字鍵還是功能鍵。功能鍵分運(yùn)算符鍵、進(jìn)制轉(zhuǎn)換鍵以及清空鍵。然后記錄下來用戶當(dāng)前的按鍵,然后對(duì)上次按的功能鍵鍵進(jìn)行運(yùn)算。如按了1、+、5,再按任何功能鍵即對(duì)1+5進(jìn)行運(yùn)算。如果按的是進(jìn)制轉(zhuǎn)換鍵,就記錄當(dāng)前進(jìn)制,那么在以后每次操作中,都將顯示結(jié)果轉(zhuǎn)換為當(dāng)前進(jìn)制再顯示。如:以下是按5以及*號(hào)時(shí)的函數(shù)代碼void__fastcallTMainForm::bt_5Click(TObjectvoid__fastcallTMainForm::bt_5Click(TObject*Sender)/*輸入5*/{if(_lastKey==key_sym)initNum(&actNum);/*初始化當(dāng)前動(dòng)作數(shù)字*/if(_lastKey==key_sym&&nowSym=='N')/*如果最后的按鍵是符號(hào)而且按的是等號(hào)*/{initNum(&ans);/*讓答案等于0*/lastSym='N';}incMed(&actNum,5);/*將活動(dòng)數(shù)字加一位,并且最后一位是5*/ShowText(actNum);/*顯示當(dāng)前活動(dòng)數(shù)字*/_lastKey=key_num;/*記錄最后按鍵為數(shù)字鍵*/}void__fastcallTMainForm::bt_mulClick(TObject*Sender)/*輸入*號(hào)*/{doAns(&ans,actNum,&nowSym,'*',lastSym,_lastKey);/*↑做出上一步答案〔不是按乘號(hào)這一步〕*/ShowText(ans);/*顯示答案*/lastSym=nowSym;/*現(xiàn)在即將運(yùn)算的符號(hào)賦值給最后的符號(hào)*/nowSym='*';/*將*號(hào)現(xiàn)在即將運(yùn)算*/actNum=ans;/*將答案賦值給活動(dòng)數(shù)字*///initNum(&actNum);_lastKey=key_sym;/*將最后的按鍵轉(zhuǎn)換為符號(hào)按鍵*/}對(duì)于高精度,采用結(jié)構(gòu)體structhigh{intnum[MAXN];};的形式,數(shù)組的一個(gè)元素存一位。個(gè)位為num[1],將符號(hào)存在num[0]之中。對(duì)于高精度加法,先判斷兩個(gè)數(shù)符號(hào),如果為異號(hào),那么進(jìn)行高精度減法,否那么將各位逐個(gè)相加,然后逐位進(jìn)位,返答復(fù)案即可。對(duì)于高精度減法,先判斷兩個(gè)數(shù)符號(hào),如果為異號(hào),那么進(jìn)行高精度加法,否那么用大數(shù)減小數(shù),逐個(gè)相減,然后逐位退位,判斷符號(hào)、返答復(fù)案即可。對(duì)于高精度乘法,用第二個(gè)數(shù)的各位乘以第一個(gè)數(shù)的各位。然后錯(cuò)位相加,相當(dāng)于小學(xué)生擺豎式。最后將各位相乘的結(jié)果相加,逐位進(jìn)位,判斷符號(hào)、返答復(fù)案即可。對(duì)于高精度整除,采用各位從0~9枚舉形式,如果此位與0~9相乘剛好小于等于相應(yīng)數(shù)字,那么為此位答案為這個(gè)數(shù)。最后返答復(fù)案即可。對(duì)于高精度取模,那么只需求出高精度整除,然后將數(shù)字減去整除的結(jié)果即可。對(duì)于n階乘,做n次乘法,每乘一次,乘數(shù)減一。對(duì)于左移,雖然是建立在位運(yùn)算根底上,但其效果只是乘以二,所以只需高精度乘以二即可。對(duì)于x的平方、立方、y次方,只需將x高精度相乘2次、3次或者更屢次即可。對(duì)于與運(yùn)算,先將兩個(gè)數(shù)轉(zhuǎn)換為二進(jìn)制,然后對(duì)每位進(jìn)行與運(yùn)算,最后轉(zhuǎn)換回十進(jìn)制即可。對(duì)于異或運(yùn)算,原理同與運(yùn)算。對(duì)于進(jìn)制轉(zhuǎn)換,采用除n取余法。將其轉(zhuǎn)換為相應(yīng)進(jìn)制。對(duì)于清零鍵,按按鍵功能對(duì)actNum、ans、nowSym等變量清空或者減少一位即可。我對(duì)于程序容錯(cuò)性做了很大程度上的優(yōu)化。對(duì)于超出位數(shù)的運(yùn)算會(huì)跳出“數(shù)字太大〞提示。對(duì)于各按鍵混合使用會(huì)導(dǎo)致的程序混亂用了極大程度上的優(yōu)化,也就是說對(duì)于按鍵的隨意性有很好的兼容性。比方說可以直接按2再按*然后按=,就會(huì)算出2的平方。對(duì)于顯示函數(shù),先判斷當(dāng)前進(jìn)制數(shù),然后再將需要顯示的數(shù)字轉(zhuǎn)換為當(dāng)前進(jìn)制數(shù)再顯示。如果位數(shù)超過40,那么取前幾位,采用科學(xué)計(jì)數(shù)法顯示。未能實(shí)現(xiàn)局部:小數(shù)局部。由于時(shí)間關(guān)系,未能實(shí)現(xiàn)復(fù)制粘貼數(shù)字功能。流程圖退格鍵減少一位歸零鍵退出結(jié)束清零相關(guān)其它鍵按鍵顯示函數(shù)是否增加一位清零操作前一次按鍵是數(shù)字?設(shè)置相關(guān)后效信息顯示函數(shù)運(yùn)算符運(yùn)算函數(shù)數(shù)字鍵按鍵開始退格鍵減少一位歸零鍵退出結(jié)束清零相關(guān)其它鍵按鍵顯示函數(shù)是否增加一位清零操作前一次按鍵是數(shù)字?設(shè)置相關(guān)后效信息顯示函數(shù)運(yùn)算符運(yùn)算函數(shù)數(shù)字鍵按鍵開始運(yùn)行過程翻開Calc.exe,模擬Windows下的計(jì)算器功能。根本功能為輸入數(shù)字,再輸入運(yùn)算符,然后輸入運(yùn)算符對(duì)應(yīng)數(shù)字,按等號(hào)。輸入數(shù)字,再輸入運(yùn)算符,輸入等于號(hào)的結(jié)果為“當(dāng)前輸入的數(shù)字→運(yùn)算符→當(dāng)前輸入的數(shù)字〞??梢哉{(diào)節(jié)正負(fù)號(hào)。輸入“數(shù)字,運(yùn)算符,數(shù)字,運(yùn)算符...數(shù)字,運(yùn)算符〞亦可。心得體會(huì)這次“簡單計(jì)算器制作〞的課程設(shè)計(jì)不僅讓我對(duì)C語言的熟悉程度上升到了另一個(gè)高度,而且在一定意義上對(duì)面向?qū)ο笤O(shè)計(jì)的理解更加深刻了。是我在編程路途上的一次質(zhì)的飛躍。而且在處理非常規(guī)數(shù)據(jù)類型的運(yùn)算的鍛煉下,使我對(duì)編程語言有了一個(gè)新的認(rèn)識(shí)。當(dāng)看著一個(gè)具有圖形界面的計(jì)算器的模型成品出現(xiàn)在自己面前時(shí),心中有著無限感慨,原來編程也不是非常遙不可及的,原來在編程的趣味性中能讓我學(xué)到更多有意思的知識(shí)。附源程序清單:Calc.h(運(yùn)算函數(shù)集頭文件)#include<stdio.h>#include<string>#include<string.h>#defineHIGHstructhigh#defineMAXN5000#defineMAXSHOW40#definekey_num0#definekey_sym1structhigh{intnum[MAXN];};HIGHans,actNum,nowShow;charnowSym='N',lastSym='N';bool_isincMed=true,_lastKey=key_num;intjz=10;bool_isbig(HIGHa,HIGHb){inti;for(i=MAXN-1;i>0;i--){if(a.num[i]>b.num[i])returntrue;elseif(a.num[i]<b.num[i])returnfalse;}returnfalse;}voidcopy(char*str,char*rstr,intop,intlen)//將str的從op開始的len個(gè)字符復(fù)制到rstr中{inti=0,j=op-1;for(;i<=len-1||str[j]=='\0';i++,j++)rstr[i]=str[j];rstr[i]='\0';}voidcopyint(HIGHnum,HIGH*rint,intop,intlen)//將str的從op開始的len個(gè)字符復(fù)制到rstr中{inti=1,j=op;for(;i<=len&&j<MAXN;i++,j++)rint->num[i]=num.num[j];}voidinitNum(HIGH*numb)//初始化{inti;HIGHtmp;memset(tmp.num,0,sizeof(tmp.num));*numb=tmp;}intabsCmp(HIGHa,HIGHb)//比擬絕對(duì)值大小{inti;for(i=MAXN-1;i>0;i--){if(a.num[i]!=b.num[i])return(a.num[i]>b.num[i]);}return-1;}intgetMed(HIGHa)//獲取位數(shù){inti,med;for(i=MAXN-1;i>0;i--)if(a.num[i]!=0){med=i;break;}if(i==0)med=1;returnmed;}voidturnSym(HIGH*a)//變號(hào){a->num[0]=a->num[0]==0?-1:0;}voiddecMed(HIGH*a)//減去一位{inti,med=getMed(*a);if(med==MAXN-1)med--;for(i=1;i<=med;i++)a->num[i]=a->num[i+1];a->num[med]=0;}voidincMed(HIGH*a,intb)//加一位{inti,med=getMed(*a);HIGHr;initNum(&r);if(med<MAXSHOW){for(i=2;i<=med+1;i++)r.num[i]=a->num[i-1];r.num[1]=b;r.num[0]=a->num[0];}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;j<=mb;j++){tmpr.num[j]=a.num[i]*b.num[j];}inttmpMed=getMed(tmpr);if(tmpMed+i>MAXN){initNum(&r);Application->MessageBox("數(shù)字太大!","錯(cuò)誤",MB_OKCANCEL);nowSym='N';_lastKey=key_num;lastSym='N';returnr;}for(k=1;k<tmpMed;k++){tmpr.num[k+1]+=(tmpr.num[k]/10);tmpr.num[k]%=10;}if(tmpr.num[tmpMed]>10)tmpMed=getMed(tmpr);if(tmpMed+i>MAXN){initNum(&r);Application->MessageBox("數(shù)字太大!","錯(cuò)誤",MB_OKCANCEL);nowSym='N';_lastKey=key_num;lastSym='N';returnr;}for(j=1;j<=tmpMed;j++)r.num[j+i-1]+=tmpr.num[j];}for(i=1;i<MAXN-1;i++){r.num[i+1]+=(r.num[i]/10);r.num[i]%=10;}if(r.num[MAXN-1]>9){initNum(&r);Application->MessageBox("數(shù)字太大!","錯(cuò)誤",MB_OKCANCEL);nowShow=zero;nowSym='N';_lastKey=key_num;lastSym='N';returnr;}if((a.num[0]==-1&&b.num[0]==-1)||(a.num[0]==0&&b.num[0]==0))r.num[0]=0;elser.num[0]=-1;returnr;}HIGHdec(HIGHa,HIGHb)//高精度減法{inti,med;HIGHr;HIGHinc(HIGHa,HIGHb);boolm=false;initNum(&r);if(a.num[0]==-1&&b.num[0]==-1)m=true;elseif(a.num[0]==-1){b.num[0]=-1;returninc(a,b);}elseif(b.num[0]==-1){a.num[0]=-1;returninc(a,b);}if(!absCmp(a,b)){a.num[0]=(a.num[0]==0)?-1:0;b.num[0]=(b.num[0]==0)?-1:0;returndec(b,a);}med=getMed(a);for(i=1;i<=med;i++)r.num[i]=a.num[i]-b.num[i];for(i=1;i<=med;i++){if(r.num[i]<0){r.num[i+1]-=1;r.num[i]=10+r.num[i];}}if(m)r.num[0]=-1;returnr;}HIGHinc(HIGHa,HIGHb)//高精度加法{inti;HIGHr,zero;boolm=false,err=false;initNum(&r);initNum(&zero);if(a.num[0]==-1&&b.num[0]==-1)m=true;elseif(a.num[0]==-1){a.num[0]=0;returndec(b,a);}elseif(b.num[0]==-1){b.num[0]=0;returndec(a,b);}for(i=1;i<MAXN;i++)r.num[i]=a.num[i]+b.num[i];for(i=1;i<MAXN-1;i++){r.num[i+1]+=(r.num[i]/10);r.num[i]%=10;}if(r.num[MAXN-1]>9){initNum(&r);Application->MessageBox("數(shù)字太大!","錯(cuò)誤",MB_OKCANCEL);nowSym='N';_lastKey=key_num;lastSym='N';nowShow=zero;returnr;}if(m)r.num[0]=-1;returnr;}HIGHdiv(HIGHa,HIGHb)//高精度整除{inti,j,ma=getMed(a),mb=getMed(b);HIGHr,tmpHigh,cmp,someZero,theone;initNum(&r);initNum(&theone);if(a.num[0]==b.num[0]);elser.num[0]=-1;a.num[0]=0;b.num[0]=0;for(i=ma-mb+1;i>0;i--){initNum(&tmpHigh);copyint(a,&tmpHigh,i,ma);initNum(&cmp);for(j=0;!_isbig(cmp,tmpHigh);j++){cmp=inc(cmp,b);}theone.num[1]=j;if(_isbig(mul(theone,b),tmpHigh))j--;r.num[i]=j;initNum(&someZero);someZero.num[i]=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)//得到十六進(jìn)制字符串{if(a==10)return"A";elseif(a==11)return"B";elseif(a==12)return"C";elseif(a==13)return"D";elseif(a==14)return"E";elseif(a==15)return"F";}intgetHex(HIGHa)//十六進(jìn)制取余{if(a.num[2]==0)returna.num[1];elsereturna.num[2]*10+a.num[1];}HIGHhex(HIGHa)//轉(zhuǎn)化十六進(jìn)制{inti=0,j;HIGHzero,r,sixteen;initNum(&zero);initNum(&r);initNum(&sixteen);sixteen.num[1]=6;sixteen.num[2]=1;if(a.num[0]==-1){initNum(&r);Application->MessageBox("不能為負(fù)數(shù)!","錯(cuò)誤",MB_OKCANCEL);nowSym='N';_lastKey=key_num;lastSym='N';nowShow=zero;returnr;}while(_isbig(a,zero)){i++;r.num[i]=getHex(mod(a,sixteen));a=div(a,sixteen);if(getMed(r)>MAXSHOW){initNum(&r);Application->MessageBox("數(shù)字太大!","錯(cuò)誤",MB_OKCANCEL);nowShow=zero;nowSym='N';_lastKey=key_num;lastSym='N';returnr;}}returnr;}HIGHbajinzhi(HIGHa)//轉(zhuǎn)化八進(jìn)制{inti=0,j;HIGHzero,r,eight;initNum(&zero);initNum(&r);initNum(&eight);eight.num[1]=8;if(a.num[0]==-1){initNum(&r);Application->MessageBox("不能為負(fù)數(shù)!","錯(cuò)誤",MB_OKCANCEL);nowSym='N';_lastKey=key_num;lastSym='N';nowShow=zero;returnr;}while(_isbig(a,zero)){i++;r.num[i]=mod(a,eight).num[1];a=div(a,eight);if(getMed(r)>MAXSHOW){initNum(&r);Application->MessageBox("數(shù)字太大!","錯(cuò)誤",MB_OKCANCEL);nowShow=zero;nowSym='N';_lastKey=key_num;lastSym='N';returnr;}}returnr;}HIGHbin(HIGHa)//轉(zhuǎn)化二進(jìn)制{inti=0,j;HIGHzero,r,two;initNum(&zero);initNum(&r);initNum(&two);two.num[1]=2;if(a.num[0]==-1){initNum(&r);Application->MessageBox("不能為負(fù)數(shù)!","錯(cuò)誤",MB_OKCANCEL);nowShow=zero;nowSym='N';_lastKey=key_num;lastSym='N';returnr;}while(_isbig(a,zero)){i++;r.num[i]=a.num[1]%2;a=div(a,two);if(getMed(r)>MAXSHOW){initNum(&r);Application->MessageBox("數(shù)字太大!","錯(cuò)誤",MB_OKCANCEL);nowShow=zero;nowSym='N';_lastKey=key_num;lastSym='N';returnr;}}returnr;}HIGHbinToshi(HIGHa){inti,med=getMed(a);HIGHr,tmp,the1,tmp2,two,thetwo;initNum(&tmp);initNum(&tmp2);initNum(&the1);initNum(&thetwo);initNum(&two);two.num[1]=1;thetwo.num[1]=2;the1.num[1]=1;initNum(&r);for(i=1;i<=med;i++,tmp=inc(tmp,the1)){tmp2.num[1]=a.num[i];r=inc(r,mul(tmp2,two));two=mul(two,thetwo);}returnr;}HIGHand(HIGHa,HIGHb)//與{HIGHtmpa,tmpb,r;intmed,meda,medb,i;initNum(&r);tmpa=bin(a);tmpb=bin(b);meda=getMed(tmpa);medb=getMed(tmpb);med=(meda>medb)?meda:medb;for(i=1;i<=med;i++)r.num[i]=tmpa.num[i]&tmpb.num[i];r=binToshi(r);returnr;}HIGHxor(HIGHa,HIGHb)//異或{HIGHtmpa,tmpb,r;intmed,meda,medb,i;initNum(&r);tmpa=bin(a);tmpb=bin(b);meda=getMed(tmpa);medb=getMed(tmpb);med=(meda>medb)?meda:medb;for(i=1;i<=med;i++)r.num[i]=tmpa.num[i]^tmpb.num[i];r=binToshi(r);returnr;}voiddoAns(HIGH*ans,HIGHactNum,char*nowSym,charnewSym,charlastSym,boollastKey){HIGHthe1,zero,tmp;initNum(&the1);the1.num[1]=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*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);elseif(*nowSym=='2')*ans=mul(*ans,*ans);elseif(*nowSym=='3'){*ans=mul(mul(*ans,*ans),*ans);}elseif(*nowSym=='Y'){initNum(&zero);if(actNum.num[0]==-1||!_isbig(actNum,zero)){*ans=the1;return;}zero.num[1]=2;tmp=*ans;for(;!_isbig(zero,actNum);zero=inc(zero,the1)){*ans=mul(*ans,tmp);}}elseif(*nowSym=='L'){initNum(&zero);zero.num[1]=2;if(*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<vcl.h>#pragmahdrstop//-------------------------------------------------------------USEFORM("Main.cpp",MainForm);//-------------------------------------------------------------WINAPIWinMain(HINSTANCE,HINSTANCE,LPSTR,int){try{Application->Initialize();Application->CreateForm(__classid(TMainForm),&MainForm);Application->Run();}catch(Exception&exception){Application->ShowException(&exception);}catch(...){try{throwException("");}catch(Exception&exception){Application->ShowException(&exception);}}return0;}//-------------------------------------------------------------Main.h/*由BCB生成*/#ifndefMainH#defineMainH//---------------------------------------------------------------------------#include<Classes.hpp>#include<Controls.hpp>#include<StdCtrls.hpp>#include<Forms.hpp>#include<Menus.hpp>#include<ExtCtrls.hpp>//---------------------------------------------------------------------------classTMainForm:publicTForm{__published: //IDE-managedComponentsTMainMenu*MainMenu1;TMenuItem*E1;TMenuItem*N1;TMenuItem*H1;TEdit*Show_Editor;TButton*bt_bkspace;TButton*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*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(TObject*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__fastcallbt_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__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__fastcallbt_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: //Userdeclarations__fastcallTMainForm(TComponent*Owner);void__fastcallTMainForm::ShowText(HIGHa);};//---------------------------------------------------------------------------externPACKAGETMainForm*MainForm;//---------------------------------------------------------------------------#endifMain.cpp#include<vcl.h>#include<calc.h>#pragmahdrstop#include"Main.h"http://---------------------------------------------------------------------------#pragmapackage(smart_init)#pragmaresource"*.dfm"usingnamespacestd;TMainForm*MainForm;//---------------------------------------------------------------------------__fastcallTMainForm::TMainForm(TComponent*Owner):TForm(Owner){}//---------------------------------------------------------------------------void__fastcallTMainForm::ShowText(HIGHa)/*顯示函數(shù)*/{nowShow=a;AnsiStringstr;intmed,i,j;if(jz==2)a=bin(a);elseif(jz==8)a=bajinzhi(a);elseif(jz==16)a=hex(a);med=getMed(a);boolm=(a.num[0]==-1)?true:false;if(med<=MAXSHOW){if(m){i=1;str="-";}elsei=0;for(j=med;(m)?(i<=med):(i<med);i++,j--){str+=(a.num[j]>9)?getHexStr(a.num[j]):IntToStr(a.num[j]);}Show_Editor->Text=str;}else{if(m){i=1;str="-";}elsei=0;inte=med-1;for(j=med;(m)?(i<=40):(i<40);i++,j--){str+=IntToStr(a.num[j]);if((m)?i==1:i==0)str+='.';}str+="E+"+IntToStr(e);Show_Editor->Text=str;}}void__fastcallTMainForm::FormCreate(TObject*Sender)/*窗體創(chuàng)立*/{initNum(&actNum);initNum(&ans);}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_7Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,7);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_8Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,8);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_0Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,0);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_1Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,1);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_2Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,2);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_3Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,3);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_4Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,4);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_5Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,5);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_6Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,6);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_9Click(TObject*Sender){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N'){initNum(&ans);lastSym='N';}incMed(&actNum,9);ShowText(actNum);_lastKey=key_num;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_iAndmClick(TObject*Sender){turnSym(&actNum);ShowText(actNum);}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_incClick(TObject*Sender){doAns(&ans,actNum,&nowSym,'+',lastSym,_lastKey);ShowText(ans);lastSym=nowSym;nowSym='+';actNum=ans;//initNum(&actNum);_lastKey=key_sym;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_eqClick(TObject*Sender){doAns(&ans,actNum,&nowSym,'N',lastSym,_lastKey);if(nowSym!='N')lastSym=nowSym;ShowText(ans);nowSym='N';//actNum=ans;//initNum(&actNum);_lastKey=key_sym;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_decClick(TObject*Sender){doAns(&ans,actNum,&nowSym,'-',lastSym,_lastKey);ShowText(ans);lastSym=nowSym;nowSym='-';actNum=ans;//initNum(&actNum);_lastKey=key_sym;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_mulClick(TObject*Sender){doAns(&ans,actNum,&nowSym,'*',lastSym,_lastKey);ShowText(ans);lastSym=nowSym;nowSym='*';actNum=ans;//initNum(&actNum);_lastKey=key_sym;}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_divClick(TObject*Sender){doAns(&ans,actNum,&nowSym,'/',lastSym,_lastKey);ShowText(ans);lastSym=nowSym;nowSym='/';actNum=ans;//initNum(&actNum);_lastKey=key_sym;}//---------------------------------------------------------------------------void__fastcallTMainForm::Show_EditorKeyPress(TObject*Sender,char&Key){if(Key>='0'&&Key<='9'){if(_lastKey==key_sym)initNum(&actNum);if(_lastKey==key_sym&&nowSym=='N')initNum(&ans);incMed(&actNum,Key-'0');ShowText(actNum);_lastKey=key_num;}elseif(Key=='+')bt_incClick(Sender);elseif(Key=='-')bt_decClick(Sender);elseif(Key=='*')bt_mulClick(Sender);elseif(Key=='/')bt_divClick(Sender);elseif(Key=='^')bt_xycfClick(Sender);elseif(Key=='!')bt_njcClick(Sender);elseif(Key==13)bt_eqClick(Sender);elseif(Key==8)bt_bkspaceClick(Sender);}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_LeftcClick(TObject*Sender){initNum(&actNum);ShowText(actNum);}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_ceClick(TObject*Sender){initNum(&ans);initNum(&actNum);_lastKey=key_num;nowSym='N';lastSym='N';ShowText(actNum);}//---------------------------------------------------------------------------void__fastcallTMainForm::bt_bkspaceClick(TObject*Sender){decMed(&actNum);ShowText(actNum);}//---------------------------------------------------------------------------void__fastc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論