#include <dos.h> /*DOSæ¥å£å½æ°*/
#include <math.h> /*æ°å¦å½æ°çå®ä¹*/
#include <conio.h> /*å±å¹æä½å½æ°*/
#include <stdio.h> /*I/Oå½æ°*/
#include <stdlib.h> /*åºå½æ°*/
#include <stdarg.h> /*åéé¿åº¦åæ°è¡¨*/
#include <graphics.h> /*å¾å½¢å½æ°*/
#include <string.h> /*å符串å½æ°*/
#include <ctype.h> /*å符æä½å½æ°*/
#define UP 0x48 /*å
æ ä¸ç§»é®*/
#define DOWN 0x50 /*å
æ ä¸ç§»é®*/
#define LEFT 0x4b /*å
æ 左移é®*/
#define RIGHT 0x4d /*å
æ å³ç§»é®*/
#define ENTER 0x0d /*å车é®*/
void *rar; /*å
¨å±åéï¼ä¿åå
æ å¾è±¡*/
struct palettetype palette; /*使ç¨è°è²æ¿ä¿¡æ¯*/
int GraphDriver; /* å¾å½¢è®¾å¤é©±å¨*/
int GraphMode; /* å¾å½¢æ¨¡å¼å¼*/
int ErrorCode; /* é误代ç */
int MaxColors; /* å¯ç¨é¢è²çæ大æ°å¼*/
int MaxX, MaxY; /* å±å¹çæ大å辨ç*/
double AspectRatio; /* å±å¹çåç´ æ¯*/
void drawboder(void); /*ç»è¾¹æ¡å½æ°*/
void initialize(void); /*åå§åå½æ°*/
void computer(void); /*计ç®å¨è®¡ç®å½æ°*/
void changetextstyle(int font, int direction, int charsize); /*æ¹åææ¬æ ·å¼å½æ°*/
void mwindow(char *header); /*çªå£å½æ°*/
int specialkey(void) ; /*è·åç¹æ®é®å½æ°*/
int arrow(); /*设置ç®å¤´å
æ å½æ°*/
/*主å½æ°*/
int main()
{
initialize();/* 设置系ç»è¿å
¥å¾å½¢æ¨¡å¼ */
computer(); /*è¿è¡è®¡ç®å¨ */
closegraph();/*ç³»ç»å
³éå¾å½¢æ¨¡å¼è¿åææ¬æ¨¡å¼*/
return(0); /*ç»æç¨åº*/
}
/* 设置系ç»è¿å
¥å¾å½¢æ¨¡å¼ */
void initialize(void)
{
int xasp, yasp; /* ç¨äºè¯»xåyæ¹å纵横æ¯*/
GraphDriver = DETECT; /* èªå¨æ£æµæ¾ç¤ºå¨*/
initgraph( &GraphDriver, &GraphMode, "" );
/*åå§åå¾å½¢ç³»ç»*/
ErrorCode = graphresult(); /*读åå§åç»æ*/
if( ErrorCode != grOk ) /*å¦æåå§åæ¶åºç°é误*/
{
printf("Graphics System Error: %s\n",
grapherrormsg( ErrorCode ) ); /*æ¾ç¤ºé误代ç */
exit( 1 ); /*éåº*/
}
getpalette( &palette ); /* 读é¢æ¿ä¿¡æ¯*/
MaxColors = getmaxcolor() + 1; /* 读åé¢è²çæ大å¼*/
MaxX = getmaxx(); /* 读å±å¹å°ºå¯¸ */
MaxY = getmaxy(); /* 读å±å¹å°ºå¯¸ */
getaspectratio( &xasp, &yasp ); /* æ·è´çºµæ¨ªæ¯å°åéä¸*/
AspectRatio = (double)xasp/(double)yasp;/* 计ç®çºµæ¨ªæ¯å¼*/
}
/*计ç®å¨å½æ°*/
void computer(void)
{
struct viewporttype vp; /*å®ä¹è§å£ç±»ååé*/
int color, height, width;
int x, y,x0,y0, i, j,v,m,n,act,flag=1;
float num1=0,num2=0,result; /*æä½æ°å计ç®ç»æåé*/
char cnum[5],str2[20]={""},c,temp[20]={""};
char str1[]="1230.456+-789*/Qc=^%";/* å®ä¹å符串å¨æé®å¾å½¢ä¸æ¾ç¤ºçç¬¦å· */
mwindow( "Calculator" ); /* æ¾ç¤ºä¸»çªå£ */
color = 7; /*设置ç°é¢è²å¼*/
getviewsettings( &vp ); /* 读åå½åçªå£ç大å°*/
width=(vp.right+1)/10; /* 设置æé®å®½åº¦ */
height=(vp.bottom-10)/10 ; /*设置æé®é«åº¦ */
x = width /2; /*设置xçåæ å¼*/
y = height/2; /*设置yçåæ å¼*/
setfillstyle(SOLID_FILL, color+3);
bar( x+width*2, y, x+7*width, y+height );
/*ç»ä¸ä¸ªäºç»´ç©å½¢æ¡æ¾ç¤ºè¿ç®æ°åç»æ*/
setcolor( color+3 ); /*设置淡绿é¢è²è¾¹æ¡çº¿*/
rectangle( x+width*2, y, x+7*width, y+height );
/*ç»ä¸ä¸ªç©å½¢è¾¹æ¡çº¿*/
setcolor(RED); /*设置é¢è²ä¸ºçº¢è²*/
outtextxy(x+3*width,y+height/2,"0."); /*è¾åºå符串"0."*/
x =2*width-width/2; /*设置xçåæ å¼*/
y =2*height+height/2; /*设置yçåæ å¼*/
for( j=0 ; j<4 ; ++j ) /*ç»æé®*/
{
for( i=0 ; i<5 ; ++i )
{
setfillstyle(SOLID_FILL, color);
setcolor(RED);
bar( x, y, x+width, y+height ); /*ç»ä¸ä¸ªç©å½¢æ¡*/
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) ; /*移å¨ååæ */
}
y +=(height/2)*3; /* 移å¨è¡åæ */
x =2*width-width/2; /*å¤ä½ååæ */
}
x0=2*width;
y0=3*height;
x=x0;
y=y0;
gotoxy(x,y); /*移å¨å
æ å°x,yä½ç½®*/
arrow(); /*æ¾ç¤ºå
æ */
putimage(x,y,rar,XOR_PUT);
m=0;
n=0;
strcpy(str2,""); /*设置str2为空串*/
while((v=specialkey())!=45) /*å½åä¸Alt+xé®ç»æç¨åºï¼å¦åæ§è¡ä¸é¢ç循ç¯*/
{
while((v=specialkey())!=ENTER) /*å½åä¸é®ä¸æ¯å车æ¶*/
{
putimage(x,y,rar,XOR_PUT); /*æ¾ç¤ºå
æ å¾è±¡*/
if(v==RIGHT) /*å³ç§»ç®å¤´æ¶æ°ä½ç½®è®¡ç®*/
if(x>=x0+6*width)
/*å¦æå³ç§»ï¼ç§»å°å°¾ï¼å移å¨å°æ左边å符ä½ç½®*/
{
x=x0;
m=0;
}
else
{
x=x+width+width/2;
m++;
} /*å¦åï¼å³ç§»å°ä¸ä¸ä¸ªå符ä½ç½®*/
if(v==LEFT) /*左移ç®å¤´æ¶æ°ä½ç½®è®¡ç®*/
if(x<=x0)
{
x=x0+6*width;
m=4;
} /*å¦æ移å°å¤´ï¼å左移ï¼å移å¨å°æå³è¾¹å符ä½ç½®*/
else
{
x=x-width-width/2;
m--;
} /*å¦åï¼å·¦ç§»å°åä¸ä¸ªå符ä½ç½®*/
if(v==UP) /*ä¸ç§»ç®å¤´æ¶æ°ä½ç½®è®¡ç®*/
if(y<=y0)
{
y=y0+4*height+height/2;
n=3;
} /*å¦æ移å°å¤´ï¼åä¸ç§»ï¼å移å¨å°æä¸è¾¹å符ä½ç½®*/
else
{
y=y-height-height/2;
n--;
} /*å¦åï¼ç§»å°ä¸è¾¹ä¸ä¸ªå符ä½ç½®*/
if(v==DOWN) /*ä¸ç§»ç®å¤´æ¶æ°ä½ç½®è®¡ç®*/
if(y>=7*height)
{
y=y0;
n=0;
} /*å¦æ移å°å°¾ï¼åä¸ç§»ï¼å移å¨å°æä¸è¾¹å符ä½ç½®*/
else
{
y=y+height+height/2;
n++;
} /*å¦åï¼ç§»å°ä¸è¾¹ä¸ä¸ªå符ä½ç½®*/
putimage(x,y,rar,XOR_PUT); /*å¨æ°çä½ç½®æ¾ç¤ºå
æ ç®å¤´*/
}
c=str1[n*5+m]; /*å°å符ä¿åå°åécä¸*/
if(isdigit(c)||c=='.') /*å¤ææ¯å¦æ¯æ°åæå°æ°ç¹*/
{
if(flag==-1) /*å¦ææ å¿ä¸º-1ï¼è¡¨æ为è´æ°*/
{
strcpy(str2,"-"); /*å°è´å·è¿æ¥å°å符串ä¸*/
flag=1;
} /*å°æ å¿å¼æ¢å¤ä¸º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); /*å°ç¬¬ä¸ä¸ªæä½æ°è½¬æ¢ä¸ºæµ®ç¹æ°*/
strcpy(str2,""); /*å°str2æ¸
空*/
act=1; /*å计ç®å æ³æ å¿å¼*/
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为空ï¼è¯´ææ¯è´å·ï¼èä¸æ¯åå·*/
flag=-1; /*设置è´æ°æ å¿*/
else
{
num1=atof(str2); /*å°ç¬¬äºä¸ªæä½æ°è½¬æ¢ä¸ºæµ®ç¹æ°*/
strcpy(str2,""); /*å°str2æ¸
空*/
act=2; /*å计ç®åæ³æ å¿å¼*/
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); /*å°ç¬¬äºä¸ªæä½æ°è½¬æ¢ä¸ºæµ®ç¹æ°*/
strcpy(str2,""); /*å°str2æ¸
空*/
act=3; /*å计ç®ä¹æ³æ å¿å¼*/
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); /*å°ç¬¬äºä¸ªæä½æ°è½¬æ¢ä¸ºæµ®ç¹æ°*/
strcpy(str2,""); /*å°str2æ¸
空*/
act=4; /*å计ç®é¤æ³æ å¿å¼*/
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); /*å°ç¬¬äºä¸ªæä½æ°è½¬æ¢ä¸ºæµ®ç¹æ°*/
strcpy(str2,""); /*å°str2æ¸
空*/
act=5; /*å计ç®ä¹æ¹æ å¿å¼*/
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); /*å°ç¬¬äºä¸ªæä½æ°è½¬æ¢ä¸ºæµ®ç¹æ°*/
strcpy(str2,""); /*å°str2æ¸
空*/
act=6; /*å计ç®æ¨¡è¿ç®ä¹æ¹æ å¿å¼*/
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=='=')
{
num2=atof(str2); /*å°ç¬¬äºä¸ªæä½æ°è½¬æ¢ä¸ºæµ®ç¹æ°*/
switch(act) /*æ ¹æ®è¿ç®ç¬¦å·è®¡ç®*/
{
case 1:result=num1+num2;break; /*åå æ³*/
case 2:result=num1-num2;break; /*ååæ³*/
case 3:result=num1*num2;break; /*åä¹æ³*/
case 4:result=num1/num2;break; /*åé¤æ³*/
case 5:result=pow(num1,num2);break; /*åxçy次æ¹*/
case 6:result=fmod(num1,num2);break; /*å模è¿ç®*/
}
setfillstyle(SOLID_FILL,color+3); /*设置ç¨æ·¡ç»¿è²å®ä½å¡«å
*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*è¦çç»æåº*/
sprintf(temp,"%f",result); /*å°ç»æä¿åå°tempä¸*/
outtextxy(5*width,height,temp); /*æ¾ç¤ºç»æ*/
}
if(c=='c')
{
num1=0; /*å°ä¸¤ä¸ªæä½æ°å¤ä½0ï¼ç¬¦å·æ å¿ä¸º1*/
num2=0;
flag=1;
strcpy(str2,""); /*å°str2æ¸
空*/
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=='Q')exit(0); /*å¦æéæ©äºqå车ï¼ç»æ计ç®ç¨åº*/
}
putimage(x,y,rar,XOR_PUT); /*å¨éåºä¹åæ¶å»å
æ ç®å¤´*/
return; /*è¿å*/
}
/*çªå£å½æ°*/
void mwindow( char *header )
{
int height;
cleardevice(); /* æ¸
é¤å¾å½¢å±å¹ */
setcolor( MaxColors - 1 ); /* 设置å½åé¢è²ä¸ºç½è²*/
setviewport( 20, 20, MaxX/2, MaxY/2, 1 ); /* 设置è§å£å¤§å° */
height = textheight( "H" ); /* 读ååºæ¬ææ¬å¤§å° */
settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );/*设置ææ¬æ ·å¼*/
settextjustify( CENTER_TEXT, TOP_TEXT );/*设置å符æåæ¹å¼*/
outtextxy( MaxX/4, 2, header ); /*è¾åºæ é¢*/
setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 ); /*设置è§å£å¤§å°*/
drawboder(); /*ç»è¾¹æ¡*/
}
void drawboder(void) /*ç»è¾¹æ¡*/
{
struct viewporttype vp; /*å®ä¹è§å£ç±»ååé*/
setcolor( MaxColors - 1 ); /*设置å½åé¢è²ä¸ºç½è² */
setlinestyle( SOLID_LINE, 0, NORM_WIDTH );/*设置ç»çº¿æ¹å¼*/
getviewsettings( &vp );/*å°å½åè§å£ä¿¡æ¯è£
å
¥vpææçç»æä¸*/
rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top ); /*ç»ç©å½¢è¾¹æ¡*/
}
/*è®¾è®¡é¼ æ å¾å½¢å½æ°*/
int arrow()
{
int size;
int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4}; /*å®ä¹å¤è¾¹å½¢åæ */
setfillstyle(SOLID_FILL,2); /*设置填å
模å¼*/
fillpoly(8,raw); /*ç»åºä¸å
æ ç®å¤´*/
size=imagesize(4,4,16,16); /*æµè¯å¾è±¡å¤§å°*/
rar=malloc(size); /*åé
å
ååºå*/
getimage(4,4,16,16,rar); /*åæ¾å
æ ç®å¤´å¾è±¡*/
putimage(4,4,rar,XOR_PUT); /*æ¶å»å
æ ç®å¤´å¾è±¡*/
return 0;
}
/*æé®å½æ°*/
int specialkey(void)
{
int key;
while(bioskey(1)==0); /*çå¾
é®çè¾å
¥*/
key=bioskey(0); /*é®çè¾å
¥*/
key=key&0xff? key&0xff:key>>8; /*åªåç¹æ®é®çæ«æå¼ï¼å
¶ä½ä¸º0*/
return(key); /*è¿åé®å¼*/
}
温馨提示:内容为网友见解,仅供参考