util.c
来自「浙大《C语言设计基础课程设计》中的例程 有些比较好的代码!」· C语言 代码 · 共 344 行
C
344 行
#include "compute.h"
/**********************************************************
* 函数原型:void GraphInit() *
* 传入参数:无 *
* 返 回 值:无 *
* 函数功能:图形方式初始化 *
* 图形初始化出错,程序终止退出 *
**********************************************************/
void GraphInit()
{
int GraphDriver=DETECT; /* 自动检测图形模式 */
int GraphMode,ErrorCode;
initgraph( &GraphDriver, &GraphMode, "c:\\tc" ); /* 指向tc安装目录 */
ErrorCode = graphresult();
if( ErrorCode != grOk ){
printf("Graphics System Error: %s\n",grapherrormsg(ErrorCode));
exit( 1 );
}
}
/**********************************************************
* 函数原型:void bottondown(int x,int y) *
* 传入参数:x-按钮左上角的x坐标 *
* y-按钮左上角的y坐标 *
* 返 回 值:无 *
* 函数功能:绘制按下的按钮 *
**********************************************************/
void bottondown(int x,int y)
{
setcolor(DARKGRAY);
line(x,y,x+50,y);
line(x+50,y,x+50,y+30);
setcolor(WHITE);
line(x,y,x,y+30);
line(x,y+30,x+50,y+30);
}
/**********************************************************
* 函数原型:void bottonup(int x,int y) *
* 传入参数:x-按钮左上角的x坐标 *
* y-按钮左上角的y坐标 *
* 返 回 值:无 *
* 函数功能:绘制弹起的按钮 *
**********************************************************/
void bottonup(int x,int y)
{
setcolor(DARKGRAY);
line(x,y,x,y+30);
line(x,y+30,x+50,y+30);
setcolor(WHITE);
line(x,y,x+50,y);
line(x+50,y,x+50,y+30);
setcolor(BLACK);
}
/**********************************************************
* 函数原型:void show(int x,int y) *
* 传入参数:x-按钮左上角的x坐标 *
* y-按钮左上角的y坐标 *
* 返 回 值:无 *
* 函数功能:单击按钮的效果显示 *
**********************************************************/
void show(int x,int y)
{
bottondown(x,y); /* 显示按钮的按下状态 */
delay(5000); /* 延时 */
bottonup(x,y); /* 显示按钮的弹起状态 */
}
/**********************************************************
* 函数原型:char getnumber(int x,int y) *
* 传入参数:x-鼠标位置的x坐标 *
* y-鼠标位置的y坐标 *
* 返 回 值:鼠标单击按钮的标签字符 *
* 函数功能:根据鼠标单击时的位置确定单击的按钮 *
**********************************************************/
char getnumber(int x,int y)
{
char d;
/* 鼠标单击时在左上角为(150,105),右下角为(200,135)的矩形框中,
表明单击了'7'数字按钮 */
if(x<200&&x>150&&y>105&&y<135)
d='7';
if(x<200&&x>150&&y>150&&y<180)
d='4';
if(x<200&&x>150&&y>195&&y<225)
d='1';
if(x<200&&x>150&&y>240&&y<270)
d='0';
if(x<270&&x>220&&y>105&&y<135)
d='8';
if(x<270&&x>220&&y>150&&y<180)
d='5';
if(x<270&&x>220&&y>195&&y<225)
d='2';
if(x<340&&x>290&&y>105&&y<135)
d='9';
if(x<340&&x>290&&y>150&&y<180)
d='6';
if(x<340&&x>290&&y>195&&y<225)
d='3';
if(x<340&&x>290&&y>240&&y<270)
d='.';
if(x<410&&x>360&&y>105&&y<135)
d='%';
if(x<410&&x>360&&y>150&&y<180)
d='*';
if(x<410&&x>360&&y>195&&y<225)
d='-';
if(x<410&&x>360&&y>240&&y<270)
d='+';
if(x<480&&x>430&&y>105&&y<135)
d='C';
if(x<480&&x>430&&y>150&&y<180)
d='S';
if(x<480&&x>430&&y>195&&y<225)
d='/';
/* 正/负转换'+/-'按钮用'w'字符表示其标签 */
if(x<270&&x>220&&y>240&&y<270)
d='w';
if(x<480&&x>430&&y>240&&y<270)
d='=';
return(d);
}
/**********************************************************
* 函数原型:void clearscreen() *
* 传入参数:无 *
* 返 回 值:无 *
* 函数功能:信息显示框的清除 *
**********************************************************/
void clearscreen()
{
setfillstyle(SOLID_FILL,YELLOW);
bar(150,60,480,90);
}
/**********************************************************
* 函数原型:int kx(char d) *
* 传入参数:d-按钮的标签 *
* 返 回 值:按钮的左上角的x坐标 *
* 函数功能:根据按钮标签字符确定按钮的x坐标 *
**********************************************************/
int kx(char d)
{
int x;
switch(d)
{
case '7':case '4':case '1':case '0': x=150;break;
case '8':case '5':case '2':case 'w': x=220;break;
case '9':case '6':case '3':case '.': x=290;break;
case '%':case '*':case '-':case '+': x=360;break;
case 'C':case 'S':case '/':case '=': x=430;break;
default: x=0;
}
return(x);
}
/**********************************************************
* 函数原型:int ky(char d) *
* 传入参数:d-按钮的标签 *
* 返 回 值:按钮的左上角的y坐标 *
* 函数功能:根据按钮标签字符确定按钮的y坐标 *
**********************************************************/
int ky(char d)
{
int y;
switch(d)
{
case '7':case '8':case '9':case '%':case 'C': y=105;break;
case '4':case '5':case '*':case '6':case 'S': y=150;break;
case '1':case '2':case '3':case '-':case '/': y=195;break;
case '0':case 'w':case '.':case '+':case '=': y=240;break;
default: y=0;
}
return(y);
}
/**********************************************************
* 函数原型:void outch(double sum) *
* 传入参数:sum-待输出的双精度浮点数 *
* 返 回 值:无 *
* 函数功能:在信息显示框中输出sum的值 *
**********************************************************/
void outch(double sum)
{
int i=0,m=0,j=0,fig;
char FIG[8];
char temp[2]="";
long int xu;
if(sum>1e20||sum<-1e20) /* sum绝对值大于1e20,输出E */
outtextxy(OUTX-10,OUTY,"E");
else if(sum>=1e8) /* sum小于等于1e20且大于等于1e8的处理 */
{
clearscreen();
while(sum>100&&j<20)
{
sum/=10;
j++;
}
j++;
FIG[0]=((int)sum)%10+'0';
FIG[1]=floor(sum/10)+'0';
if(j<=9) {
FIG[2]=j+'0';
temp[0] = FIG[2];
outtextxy(OUTX,OUTY,temp);
outtextxy(OUTX-10,OUTY,"E");
temp[0] = FIG[0];
outtextxy(OUTX-30,OUTY,temp);
outtextxy(OUTX-45,OUTY,".");
temp[0]=FIG[1];
outtextxy(OUTX-60,OUTY,temp);
}
else {
FIG[2]=j%10+'0';
FIG[3]=floor(j/10)+'0';
temp[0]=FIG[2];
outtextxy(OUTX,OUTY,temp);
temp[0]=FIG[3];
outtextxy(OUTX-15,OUTY,temp);
outtextxy(OUTX-30,OUTY,"E");
temp[0]=FIG[0];
outtextxy(OUTX-45,OUTY,temp);
outtextxy(OUTX-60,OUTY,".");
temp[0]=FIG[1];
outtextxy(360,OUTY,temp);
}
}
else if(sum<=-1e8) /* sum大于等于-1e20且小于等于-1e8的处理 */
{
outch(-sum);
outtextxy(OUTX-90,OUTY,"-");
}
else /* 此时sum的值在-1e8和1e8之间 */
{
if(-1e-6<sum&&sum<1e-6) /* sum值是0的处理 */
{
clearscreen();
outtextxy(OUTX-15,OUTY,"0");
outtextxy(OUTX,OUTY,".");
}
if(sum>1e-6) /* sum值大于0的处理(小于1e8) */
{
while(floor(sum)!=sum && sum<1e7 && m<8)
{
sum*=10;
m++;
}
xu=floor(sum);
while(xu!=0)
{
FIG[i++]=xu%10+'0';
xu=floor(xu/10);
}
clearscreen();
if(m==0)
{
for(fig=0;fig<i;fig++)
{
temp[0]=FIG[fig];
outtextxy(OUTX-15*(fig+1),OUTY,temp);
}
outtextxy(OUTX,OUTY,".");
}
if(m<i)
{
for(fig=0;fig<m;fig++)
{
temp[0]=FIG[fig];
outtextxy(OUTX-15*fig,OUTY,temp);
}
outtextxy(OUTX-15*m,OUTY,".");
for(fig=m;fig<i;fig++)
{
temp[0]=FIG[fig];
outtextxy(OUTX-15*(fig+1),OUTY,temp);
}
}
if(m>=i)
{
for(fig=0;fig<i;fig++)
{
temp[0]=FIG[fig];
outtextxy(OUTX-15*fig,OUTY,temp);
}
outtextxy(OUTX-15*m,OUTY,".");
outtextxy(OUTX-15*(m+1),OUTY,"0");
for(fig=i;fig<m;fig++)
outtextxy(OUTX-15*fig,OUTY,"0");
}
}
if(sum<-1e-6) /* sum值小于0的处理(大于-1e8) */
{
sum=-sum;
while(floor(sum)!=sum && m<8 && sum<1e7)
{
sum*=10;
m++;
}
xu=(long int)sum;
while(xu!=0)
{
FIG[i++]=xu%10+'0';
xu=floor(xu/10);
}
clearscreen();
if(m==0)
{
for(fig=0;fig<i;fig++)
{
temp[0]=FIG[fig];
outtextxy(OUTX-15*(fig+1),OUTY,temp);
}
outtextxy(OUTX,OUTY,".");
outtextxy(OUTX-15*(i+1),OUTY,"-");
}
if(m<i)
{
for(fig=0;fig<m;fig++)
{
temp[0]=FIG[fig];
outtextxy(OUTX-15*fig,OUTY,temp);
}
outtextxy(OUTX-15*m,OUTY,".");
for(fig=m;fig<i;fig++)
{
temp[0]=FIG[fig];
outtextxy(OUTX-15*(fig+1),OUTY,temp);
}
outtextxy(OUTX-15*(fig+1),OUTY,"-");
}
if(m>=i)
{
for(fig=0;fig<i;fig++)
{
temp[0]=FIG[fig];
outtextxy(OUTX-15*fig,OUTY,temp);
}
outtextxy(OUTX-15*m,OUTY,".");
outtextxy(OUTX-15*(m+1),OUTY,"0");
for(fig=i;fig<m;fig++)
outtextxy(OUTX-15*fig,OUTY,"0");
outtextxy(OUTX-15*(m+2),OUTY,"-");
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?