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 + -
显示快捷键?