版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)程序設(shè)計(jì)(c語(yǔ)言)課程設(shè)計(jì)報(bào)告 題目:學(xué)院:專(zhuān)業(yè):班級(jí):姓名:指導(dǎo)教師:答辯日期:一、選題背景:?jiǎn)栴}提出:在應(yīng)用電腦的過(guò)程中,往往需要使用計(jì)算器,來(lái)執(zhí)行簡(jiǎn)單的運(yùn)算,但系統(tǒng)提供的計(jì)算功能過(guò)于煩瑣,而且有些程序并不提供計(jì)算功能。為此,這里用C語(yǔ)言編制了幾個(gè)函數(shù),用于程序中時(shí),可達(dá)到計(jì)算的目的.二、設(shè)計(jì)思路: 簡(jiǎn)單的計(jì)算器是對(duì)實(shí)數(shù)進(jìn)行簡(jiǎn)單的加,減,乘,除及簡(jiǎn)單的求冪運(yùn)算。本程序是通過(guò)簡(jiǎn)單的C語(yǔ)言的運(yùn)算函數(shù)來(lái)計(jì)算運(yùn)行,來(lái)實(shí)現(xiàn)計(jì)算器的基本功能。在實(shí)現(xiàn)過(guò)程中,應(yīng)用循環(huán)來(lái)判斷運(yùn)行相應(yīng)的函數(shù),即可達(dá)到簡(jiǎn)單的計(jì)算器的功能。三:設(shè)計(jì)分析:主要解決問(wèn)題方法:通過(guò)計(jì)算器函數(shù),窗口函數(shù),設(shè)計(jì)鼠標(biāo)圖形函數(shù)及按鍵函數(shù)來(lái)構(gòu)成計(jì)算器的實(shí)體,需要解決的是定義計(jì)算器的外觀,及鼠標(biāo)的圖形及其應(yīng)用,尤其是鼠標(biāo)置于頂端時(shí),其下一步的循環(huán)返回另一個(gè)頂端。技術(shù)關(guān)鍵:計(jì)算器函數(shù)computer()的邊框,按鍵大小設(shè)計(jì),及鼠標(biāo)在同一行或列中的循環(huán)滾動(dòng),還有進(jìn)行運(yùn)算時(shí),按鍵不同,進(jìn)行響應(yīng)的運(yùn)算,窗口函數(shù)(mwindow()),設(shè)計(jì)鼠標(biāo)函數(shù)(arrow()),按鍵函數(shù)(specialkey())。四:程序流程圖主函數(shù)主函數(shù)窗口函數(shù)mwindow()計(jì)算器函數(shù)computer窗口函數(shù)mwindow()計(jì)算器函數(shù)computer設(shè)計(jì)鼠標(biāo)圖形函數(shù)arrow按鍵函數(shù)specialkey()
計(jì)算器函數(shù)
x=x0;n=3;x<x0x=x+width+width/2m++;x>=x0+6*widthx>=x0+6*widthy=y0+4*height+height/2y<=y0x=x0+6*width;y=y-height-height/2;n--;v==UP;m=4;x=x-width-width/2;m--;v==LEFTm=0;v==RIGHT開(kāi)始
計(jì)算器函數(shù)x=x0;n=3;x<x0x=x+width+width/2m++;x>=x0+6*widthx>=x0+6*widthy=y0+4*height+height/2y<=y0x=x0+6*width;y=y-height-height/2;n--;v==UP;m=4;x=x-width-width/2;m--;v==LEFTm=0;v==RIGHT開(kāi)始
outtextxy(顯示結(jié)果)setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);sprintf(temp,”%f”,result);breakbreakbreakbreakbreakbreakresult=fomd(num1,num2)result=num1/num2result=num1-num2result=num1+num2result=num1*num2result=pow(num1,num2)1234567switch(act)結(jié)束y=y0y=y+height+height/2n++y>=7*heightv=DOWNn=0
outtextxy(顯示結(jié)果)setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);sprintf(temp,”%f”,result);breakbreakbreakbreakbreakbreakresult=fomd(num1,num2)result=num1/num2result=num1-num2result=num1+num2result=num1*num2result=pow(num1,num2)1234567switch(act)結(jié)束y=y0y=y+height+height/2n++y>=7*heightv=DOWNn=0五、程序清單:一、
二、#include<dos.h>/*DOS接口函數(shù)*/
#include<math.h>/*數(shù)學(xué)函數(shù)的定義*/
#include<conio.h>/*屏幕操作函數(shù)*/
#include<stdio.h>/*I/O函數(shù)*/
#include<stdlib.h>/*庫(kù)函數(shù)*/
#include<stdarg.h>/*變量長(zhǎng)度參數(shù)表*/
#include<graphics.h>/*圖形函數(shù)*/
#include<string.h>/*字符串函數(shù)*/
#include<ctype.h>/*字符操作函數(shù)*/
#defineUP0x48/*光標(biāo)上移鍵*/
#defineDOWN0x50/*光標(biāo)下移鍵*/
#defineLEFT0x4b/*光標(biāo)左移鍵*/
#defineRIGHT0x4d/*光標(biāo)右移鍵*/
#defineENTER0x0d/*回車(chē)鍵*/
void*rar;/*全局變量,保存光標(biāo)圖象*/
structpalettetypepalette;/*使用調(diào)色板信息*/
intGraphDriver; /*圖形設(shè)備驅(qū)動(dòng)*/
intGraphMode; /*圖形模式值*/
intErrorCode; /*錯(cuò)誤代碼*/
intMaxColors; /*可用顏色的最大數(shù)值*/
intMaxX,MaxY; /*屏幕的最大分辨率*/
doubleAspectRatio; /*屏幕的像素比*/
voiddrawboder(void);/*畫(huà)邊框函數(shù)*/
voidinitialize(void);/*初始化函數(shù)*/
voidcomputer(void);/*計(jì)算器計(jì)算函數(shù)*/
voidchangetextstyle(intfont,intdirection,intcharsize);
/*改變文本樣式函數(shù)*/
voidmwindow(char*header);/*窗口函數(shù)*/
intspecialkey(void);/*獲取特殊鍵函數(shù)*/
intarrow();/*設(shè)置箭頭光標(biāo)函數(shù)*/
/*主函數(shù)*/
main()
{
initialize();/*設(shè)置系統(tǒng)進(jìn)入圖形模式*/
computer(); /*運(yùn)行計(jì)算器*/
closegraph();/*系統(tǒng)關(guān)閉圖形模式返回文本模式*/
return(0);/*結(jié)束程序*/
}
voidinitialize(void)/*設(shè)置系統(tǒng)進(jìn)入圖形模式*/
{
intxasp,yasp; /*用于讀x和y方向縱橫比*/
GraphDriver=DETECT;/*自動(dòng)檢測(cè)顯示器*/
initgraph(&GraphDriver,&GraphMode,"");
/*初始化圖形系統(tǒng)*/
ErrorCode=graphresult();/*讀初始化結(jié)果*/
if(ErrorCode!=grOk)/*如果初始化時(shí)出現(xiàn)錯(cuò)誤*/
{
printf("GraphicsSystemError:%s\n");
grapherrormsg(ErrorCode);/*顯示錯(cuò)誤代碼*/
exit(1);/*退出*/
}
getpalette(&palette); /*讀面板信息*/
MaxColors=getmaxcolor()+1; /*讀取顏色的最大值*/
MaxX=getmaxx();/*讀屏幕尺寸*/
MaxY=getmaxy(); /*讀屏幕尺寸*/
getaspectratio(&xasp,&yasp); /*拷貝縱橫比到變量中*/
AspectRatio=(double)xasp/(double)yasp;/*計(jì)算縱橫比值*/
}
/*計(jì)算器函數(shù)*/
voidcomputer(void)
{
structviewporttypevp;/*定義視口類(lèi)型變量*/
intcolor,height,width;
intx,y,x0,y0,i,j,v,m,n,act,flag=1;floatnum1=0,num2=0,result;/*操作數(shù)和計(jì)算結(jié)果變量*/charcnum[5],str2[20]={""},c,temp[20]={""};charstr1[]="1230.456+-789*/Qc=^%";/*定義字符串在按鈕圖形上顯示的符號(hào)*/mwindow("Calculator");/*顯示主窗口*/color=7;/*設(shè)置灰顏色值*/getviewsettings(&vp); /*讀取當(dāng)前窗口的大小*/width=(vp.right+1)/10; /*設(shè)置按鈕寬度*/height=(vp.bottom-10)/10;/*設(shè)置按鈕高度*/x=width/2;/*設(shè)置x的坐標(biāo)值*/y=height/2; /*設(shè)置y的坐標(biāo)值*/setfillstyle(SOLID_FILL,color+3);bar(x+width*2,y,x+7*width,y+height);/*畫(huà)一個(gè)二維矩形條顯示運(yùn)算數(shù)和結(jié)果*/setcolor(color+3);/*設(shè)置淡綠顏色邊框線*/rectangle(x+width*2,y,x+7*width,y+height);/*畫(huà)一個(gè)矩形邊框線*/setcolor(RED);/*設(shè)置顏色為紅色*/outtextxy(x+3*width,y+height/2,"0.");/*輸出字符串"0."*/x=2*width-width/2;/*設(shè)置x的坐標(biāo)值*/y=2*height+height/2;/*設(shè)置y的坐標(biāo)值*/for(j=0;j<4;++j)/*畫(huà)按鈕*/{for(i=0;i<5;++i){setfillstyle(SOLID_FILL,color);setcolor(RED);bar(x,y,x+width,y+height);/*畫(huà)一個(gè)矩形條*/rectangle(x,y,x+width,y+height);sprintf(str2,"%c",str1[j*5+i]);/*將字符保存到str2中*/outtextxy(x+(width/2),y+height/2,str2);x=x+width+(width/2); /*移動(dòng)列坐標(biāo)*/}y+=(height/2)*3; /*移動(dòng)行坐標(biāo)*/x=2*width-width/2;/*復(fù)位列坐標(biāo)*/}x0=2*width;y0=3*height;x=x0;y=y0;gotoxy(x,y);/*移動(dòng)光標(biāo)到x,y位置*/arrow();/*顯示光標(biāo)*/putimage(x,y,rar,XOR_PUT);m=0;n=0;strcpy(str2,"");/*設(shè)置str2為空串*/while((v=specialkey())!=45)
/*當(dāng)壓下Alt+x鍵結(jié)束程序,否則執(zhí)行下面的循環(huán)*/{while((v=specialkey())!=ENTER)/*當(dāng)壓下鍵不是回車(chē)時(shí)*/{ putimage(x,y,rar,XOR_PUT);/*顯示光標(biāo)圖象*/ if(v==RIGHT)/*右移箭頭時(shí)新位置計(jì)算*/ if(x>=x0+6*width)/*如果右移,移到尾,則移動(dòng)到最左邊字符位置*/ { x=x0; m=0; } else { x=x+width+width/2;/*否則,右移到下一個(gè)字符位置*/m++;/*左移箭頭時(shí)新位置計(jì)算*/} if(v==LEFT) if(x<=x0) { x=x0+6*width;/*如果移到頭,再左移,則移動(dòng)到最右邊字符位置*/ m=4; } else { x=x-width-width/2;/*否則,左移到前一個(gè)字符位置*/ m--;/*左移箭頭時(shí)新位置計(jì)算*/}if(v==UP) if(y<=y0) { y=y0+4*height+height/2;/*如果移到頭,再上移,則移動(dòng)到最下邊字符位置*/ n=3; } else {y=y-height-height/2;/*否則,移到上邊一個(gè)字符位置*/n--;/*上移箭頭時(shí)新位置計(jì)算*/} if(v==DOWN) if(y>=7*height) { y=y0;/*如果移到尾,再下移,則移動(dòng)到最上邊字符位置*/n=0; } else { y=y+height+height/2;/*否則,移到下邊一個(gè)字符位置*/n++;/*在新的位置顯示光標(biāo)箭頭*/ }putimage(x,y,rar,XOR_PUT);}c=str1[n*5+m];/*將字符保存到變量c中*/if(isdigit(c)||c=='.')/*判斷是否是數(shù)字或小數(shù)點(diǎn)*/{ if(flag==-1)/*如果標(biāo)志為-1,表明為負(fù)數(shù)*/{strcpy(str2,"-");/*將負(fù)號(hào)連接到字符串中*/flag=1;}/*將標(biāo)志值恢復(fù)為1*/sprintf(temp,"%c",c);/*將字符保存到字符串變量temp中*/strcat(str2,temp);/*將temp中的字符串連接到str2中*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,str2);/*顯示字符串*/}if(c=='+'){num1=atof(str2);/*將第一個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=1;/*做計(jì)算加法標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='-'){if(strcmp(str2,"")==0)/*如果str2為空,說(shuō)明是負(fù)號(hào),而不是減號(hào)*/ flag=-1;/*設(shè)置負(fù)數(shù)標(biāo)志*/else{ num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/ strcpy(str2,"");/*將str2清空*/ act=2;/*做計(jì)算減法標(biāo)志值*/ setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2);/*畫(huà)矩形*/ outtextxy(5*width,height,"0.");/*顯示字符串*/}}if(c=='*'){num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=3;/*做計(jì)算乘法標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='/'){num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=4;/*做計(jì)算除法標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='^'){num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=5;/*做計(jì)算乘方標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*畫(huà)矩形*/outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='%'){num1=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/strcpy(str2,"");/*將str2清空*/act=6;/*做計(jì)算模運(yùn)算乘方標(biāo)志值*/setfillstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*畫(huà)矩形*/outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='='){num2=atof(str2);/*將第二個(gè)操作數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)*/switch(act)/*根據(jù)運(yùn)算符號(hào)計(jì)算*/{ case1:result=num1+num2;break;/*做加法*/ case2:result=num1-num2;break;/*做減法*/ case3:result=num1*num2;break;/*做乘法*/ case4:result=num1/num2;break;/*做除法*/ case5:result=pow(num1,num2);break;/*做x的y次方*/ case6:result=fmod(num1,num2);break;/*做模運(yùn)算*/}setfillstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆蓋結(jié)果區(qū)*/sprintf(temp,"%f",result);/*將結(jié)果保存到temp中*/outtextxy(5*width,height,temp);/*顯示結(jié)果*/}if(c=='c'){num1=0;/*將兩個(gè)操作數(shù)復(fù)位0,符號(hào)標(biāo)志為1*/num2=0;flag=1;strcpy(str2,"");/*將str2清空*/setfillstyle(SOLID_FILL,color+3);/*設(shè)置用淡綠色實(shí)體填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2);/*覆蓋結(jié)果區(qū)*/outtextxy(5*width,height,"0.");/*顯示字符串*/}if(c=='Q')exit(0);/*如果選擇了q回車(chē),結(jié)束計(jì)算程序*/}putimage(x,y,rar,XOR_PUT);/*在退出之前消去光標(biāo)箭頭*/return;/*返回*/}/*窗口函數(shù)*/voidmwindow(char*header){intheight;cleardevice(); /*清除圖形屏幕*/setcolor(MaxColors-1); /*設(shè)置當(dāng)前顏色為白色*/setviewport(20,20,MaxX/2,MaxY/2,1); /*設(shè)置視口大小*/height=textheight("H");/*讀取基本文本大小*/settextstyle(DEFAULT_FONT,HORIZ_DIR,1);/*設(shè)置文本樣式*/settextjustify(CENTER_TEXT,TOP_TEXT);/*設(shè)置字符排列方式*/outtextxy(MaxX/4,2,header);/*輸出標(biāo)題*/setviewport(20,20+height+4,MaxX/2+4,MaxY/2+20,1);/*設(shè)置視口大小*/
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臘味調(diào)研報(bào)告范文大全
- 無(wú)錫酒店調(diào)研報(bào)告范文
- 課題申報(bào)書(shū):共同富裕目標(biāo)下中國(guó)革命老區(qū)農(nóng)戶生計(jì)脆弱性及轉(zhuǎn)型路徑
- 課題申報(bào)書(shū):高質(zhì)量充分就業(yè)下大學(xué)生就業(yè)能崗匹配評(píng)價(jià)與提升路徑研究
- 課題申報(bào)書(shū):高校學(xué)生教育管理法治化的問(wèn)題與對(duì)策研究
- 上海南湖職業(yè)技術(shù)學(xué)院《新媒體與體育》2023-2024學(xué)年第一學(xué)期期末試卷
- 12 總也倒不了的老屋 公開(kāi)課一等獎(jiǎng)創(chuàng)新教案
- 上海南湖職業(yè)技術(shù)學(xué)院《計(jì)算機(jī)制圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海民遠(yuǎn)職業(yè)技術(shù)學(xué)院《生物地理學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海南湖職業(yè)技術(shù)學(xué)院《網(wǎng)絡(luò)廣告》2023-2024學(xué)年第一學(xué)期期末試卷
- 人教版數(shù)學(xué)六年級(jí)上冊(cè)期末考試試卷
- 2024年時(shí)事政治試題庫(kù)附答案(綜合題)
- 警務(wù)指揮與戰(zhàn)術(shù)學(xué)總論學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 繪本小狐貍賣(mài)空氣
- 媒體創(chuàng)意經(jīng)濟(jì):玩轉(zhuǎn)互聯(lián)網(wǎng)時(shí)代學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 華東師大版(2024新版)七年級(jí)上冊(cè)數(shù)學(xué)期末素養(yǎng)評(píng)估測(cè)試卷(含答案)
- 中考二次函數(shù)應(yīng)用題(含答案)
- 畫(huà)說(shuō)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 基于“三新”背景下的2025屆新高考物理復(fù)習(xí)備考策略-課件
- 2024年河南省鄭州市高考物理一模試卷(含解析)
- 劍指CET-4:大學(xué)生英語(yǔ)能力基礎(chǔ)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評(píng)論
0/150
提交評(píng)論