C语言程序!!帮帮忙呗。。急。。。555555555

2025-01-07 07:54:36
推荐回答(1个)
回答1:

例11.7 简单的时钟程序举例
下面是一个简单的时钟程序,在屏幕上显示出一个时钟表盘和时、分、秒钟,能随着时间的变化,并在表盘的下部显示出一个文字的记时器。
#include
#include
#include

#define PI 3.1415926
#define x0 320 /*定义钟表中心坐标*/
#define y0 240
int table1[8]={-5,-160,5,-160,5,-130,-5,-130}; /*定义时钟刻度形状1*/
int table2[8]={-5,-160,5,-160,2,-130,-2,-130}; /*定义时钟刻度形状2*/

void beep() /*实现发声的函数*/
{ sound(1000);
delay(500);
nosound();
}

void writetext() /*写三维立体字函数*/
{int i;
char *s="MADE IN CHINA!";/*要显示的立体字母*/
settextstyle(0,0,2); /*设置文本属性:字号和字体*/
setcolor(14); /*定义字体为黄色*/
for(i=0;i<5; i++) outtextxy(210+i,430+i,s);/*在不同位置输出同一字符串,产生黄色立体效果*/
setcolor(RED); /*字义为红色*/
outtextxy(210+i,430+i,s); /*输出红色字体*/
}

void drawpoint(int *data,int angle,int color) /*画多边形的通用函数*/
{int usedata[8]; /*存放多边形4个顶点坐标,usedata[0]和usedata[1]为第1个顶点的坐标......usedata[6]和usedata[7]为第4个顶点*/
float sinang,cosang;
int i;
sinang=sin((float)angle/180*PI); /*计算多边形的坐标弧度变换*/
cosang=cos((float)angle/180*PI);
for(i=0; i<8; i+=2) /*计算多边形各顶点的位置*/
{ usedata[i]=x0+cosang*data[i]-sinang*data[i+1]+0.5;
usedata[i+1]=y0+sinang*data[i]-cosang*data[i+1]+0.5;
}
setfillstyle(SOLID_FILL,color); /*设置填充模式和颜色*/
fillpoly(4,usedata); /*以当前填充模式根据usedata中的4个坐标点画多边形*/
}

void DrawClock(int x,int y,int color) /*画表盘*/
{ int r=150; /*表盘的半径*/
int ang; /*角度*/
float th;
setcolor(color);
circle(x,y,r+30); /*画时钟边框圆*/
circle(x,y,2); /*画表中心*/
for(ang=0;ang<360;ang+=90)
{drawpoint(table1,ang,YELLOW); /*画0、15、30、45时、分刻度*/
drawpoint(table2,ang+30,WHITE); /*画5、20、35、50时、分刻度*/
drawpoint(table2,ang+60,WHITE); /*画10、25、40、55时、分刻度*/
}
}

void DrawHand(int x,int y,float th,int l,int color)
{
int x1,y1;
x1=x+l*sin(th);
y1=y-l*cos(th);
setcolor(color);
line(x,y,x1,y1);
}

void main()
{int gdriver=DETECT,gmode;
struct time curtime;
float th_hour,th_min,th_sec;
initgraph(&gdriver,&gmode,"");

setbkcolor(0);

while(! kbhit())
{
DrawClock(x0,y0,14);
gettime(&curtime); /*得到当前系统时间*/

gotoxy(35,20); /*定位输出位置*/
if((float)curtime.ti_hour<=12) /*午前的处理*/
{printf("AM ");
if((float)curtime.ti_hour<10) printf("0");/*十点之前在小时数前加零*/
printf("%.0f:",(float)curtime.ti_hour);
}
else /*午后的处理*/
{printf("PM ");
if((float)curtime.ti_hour-12<10) printf("0");
printf("%.0f:",(float)curtime.ti_hour-12);
}
if((float)curtime.ti_min<10) printf("0");
printf("%.0f:",(float)curtime.ti_min);
if((float)curtime.ti_sec<10) printf("0");
printf("%.0f",(float)curtime.ti_sec);

/*以下三行计算表针转动角度,以竖直向上为起点,顺时针为正*/
th_sec=(float)curtime.ti_sec*0.1047197551; /*2π/60=0.1047197551*/
th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0;
th_hour=(float)curtime.ti_hour*0.523598775+th_min/12.0; /* 2π/12=0.5235987755 */
DrawHand(x0,y0,th_hour,70,2); /*画时针*/
DrawHand(x0,y0,th_min,110,3); /*分针*/
DrawHand(x0,y0,th_sec,140,12); /*秒针*/
writetext(); /*写三维立体字*/
beep();
sleep(1); /*延时一秒后刷新*/
cleardevice(); /*清除屏幕*/
}
closegraph(); /*关闭图形模式*/
}