怎么使用C语言制作一个时钟?

怎么使用C语言制作一个时钟?如果限定使用的是turboc,怎么制作。有可视化的麻烦给我完整的程序,没有的话只要是时钟就行,有几步要几步。... 怎么使用C语言制作一个时钟?如果限定使用的是turboc,怎么制作。有可视化的麻烦给我完整的程序,没有的话只要是时钟就行,有几步要几步。 展开
 我来答
魔法师00可可
2008-10-26 · TA获得超过1660个赞
知道大有可为答主
回答量:726
采纳率:100%
帮助的人:968万
展开全部
这个也是我在别的地方找到的
很好的
#include "stdio.h"
#include "graphics.h"
#include "math.h"
#include "time.h"
#include "dos.h"
#define r 200
#define pi 3.1415926
#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300; /*遇到X(a,b,c) 就用x=a*cos(b*c*pi/180-pi/2)+300 替换*/
#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240; /*遇到Y(a,b,c) 就用y=a*sin(b*c*pi/180-pi/2)+240; 替换*/
#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y) /*宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换*/
/*
那么就是当执行d(200,12,6)时 相当于写了3句话
首先X(a,b,c) 也就是X(200,12,6) 这时计算x=200*cos(12*6*pi/180-pi/2)+300
也就是计算出了 以半径为200,度数为12 步长为6 (实际上就是72度 但是这里又减去了pi/2 也就是72-45=27度)
的那点的横坐标 也就是x的数值
然后执行Y(a,b,c)也就是Y(200,12,6)这时计算y=200*sin(12*6*pi/180-pi/2)+240
也就是计算出了 以半径为200,度数为12 步长为6 (实际上就是72度 但是这里又减去了pi/2 也就是72-45=27度)
的那点的纵坐标 也就是y的数值
最后是 line(300,240,x,y) 也就是 画线 这样指针就出来了
那么这里第一个参数是设置半径长度 第二个参数是设置度数 第三个参数是设置步长(度数)
*/
main()
{
int x=300,y=240,bx,by,bx1,by1,bx2,by2,bx3,by3,jd,i,j,k,h1,m1,hc=0,l,ax,ay,n,p=0;
char b[]={'I',' ',' ',' ',' ','L','o','v','e',' ',' ',' ',' ','Y','o','u'};
int driver=VGA,mode=VGAHI; /*定义图形驱动器*/
int h,m,s; /*定义时针hour 分针minute 秒针second*/
struct time t[1]; /*定义一个结构体名为time的数组,只有一个成员t[0]*/
initgraph(&driver,&mode,""); /*设置图形驱动器*/
setbkcolor(0); /*设置背景色为黑色*/
for(n=0;n<=27;n++)

printf("\n");
for(n=0;n<=29;n++)
printf(" ");
setcolor(14); /*设置前景色为黄色*/
circle(x,y,r); /*以300,240,半径为200画大圆*/
setcolor(12); /*设置前景色为洋红色*/
circle(x,y,190); /* 内部小圆*/
/*设置填充样式及颜色*/
setfillstyle(SOLID_FILL,14); /*实心填充*/
floodfill(x,y,12); /* 填充表盘 填充色为洋红(12) */
setfillstyle(SOLID_FILL,13); /*实心填充*/
floodfill(1,1,14);
setcolor(2); /*设置为绿色*/
/*画表心*/
circle(x,y,2); /*表心小圆*/
circle(x,y,5); /*表心大圆*/
/*眼睛*/
ellipse(x-80,y-70,0,360,23,65); /*左 外面的椭圆*/
ellipse(x+80,y-70,0,360,23,65); /*右 外面的椭圆*/
ellipse(x-80,y-60,0,180,23,23); /*左 里面的椭圆*/
setfillstyle(SOLID_FILL,0); /*实型填充 填充颜色为黑色*/
floodfill(x-80,y-60,2); /*填充颜色 绿色*/
ellipse(x+80,y-60,0,180,23,23); /*右 里面的椭圆*/
setfillstyle(SOLID_FILL,0); /*实型填充 填充颜色为黑色*/
floodfill(x+80,y-70,2); /*填充颜色 绿色*/
/* outtextxy(225,380,"EmBEdDed 06241 ShiwU");
outtextxy(245,400,"MaDE In HuaXiA"); */

/*六个胡子*/
setcolor(5); /* 粉红色 */
line(x-120,y+70,x-250,y+90);
line(x-120,y+90,x-250,y+110);
line(x-120,y+110,x-250,y+130);
line(x+120,y+70,x+250,y+90);
line(x+120,y+90,x+250,y+110);
line(x+120,y+110,x+250,y+130);
/*画耳朵*/
arc(150,80,0,360,60); /*画圆弧(此处完全可以用圆来代替)*/
setfillstyle(SOLID_FILL,14); /*填充色黄色*/
floodfill(150,80,5);
arc(450,80,0,360,60);
setfillstyle(SOLID_FILL,14);
floodfill(450,80,5);
setcolor(14); /*擦除内部圆弧痕迹*/
arc(150,80,0,360,60);
arc(450,80,0,360,60);
/*画嘴*/
setcolor(0);
ellipse(x,y+60,160,340,23,23); /*用圆弧画嘴*/
/*画侧脸*/
circle(x+120,y+10,23); /*前景色为0 侧面的圆圈*/
setfillstyle( SOLID_FILL,12); /*实型填充 颜色为12 淡洋红*/
floodfill(x+120,y+10,0); /*以侧面的圆心为中心 边缘颜色为0 白色 进行对封闭图形的填充*/
setcolor(14); /*设置前景色为黄色 清除内部圆弧痕迹*/
circle(x+120,y+10,23); /*重新画小圈*/
setcolor(0); /*前景色为0 侧面的圆圈*/
circle(x-120,y+10,23); /*以下同上*/
setfillstyle( SOLID_FILL,12);
floodfill(x-120,y+10,0);
setcolor(14);
circle(x-120,y+10,23);

ellipse(x,y+60,0,180,23,23);
for(i=0;i<60;i++)
{if(i%5==0) l=15;
else l=5;
ax=200*cos(i*6*pi/180)+300;
ay=200*sin(i*6*pi/180)+240;
bx=(200-l)*cos(i*6*pi/180)+300;
by=(200-l)*sin(i*6*pi/180)+240;
line(ax,ay,bx,by);

}
setwritemode(1); /*这句无敌了*/

gettime(t); /*得到系统时间给数组t实际上就是给了t[0]*/
h=t[0].ti_hour; /*时针数值给h*/
m=t[0].ti_min; /*分针数值给m*/
s=t[0].ti_sec;
/*秒针数值给s*/
setcolor(7); /*设置前景色为7 淡灰色*/
/*第一个参数是设置半径长度 第二个参数是设置起始度数 第三个参数是设置步长(度数)*/
d(150,h,30); /*以半径为150,h为起始度数,步长为30度,时针总共一圈才走12下*/
setcolor(14); /*设置分针颜色 1 蓝色*/
d(170,m,6); /*以半径170,m为起始度数,步长为6度,分针一圈走60下*/
setcolor(4); /*设置秒针颜色 4 红色*/
d(190,s,6); /*以半径190,s为起始度数,步长为6度,秒针一圈走60下*/
while(!kbhit()) /*当不敲击键盘时候一直循环*/
{

while(t[0].ti_sec==s) /*判断当前系统时间是否与刚才得到的秒时间相等,一定相等,没有刷新系统时间*/
gettime(t);
setcolor(4);
d(190,s,6); /*所以重新刷新系统时间*/
s=t[0].ti_sec;
setfillstyle(SOLID_FILL,13); /*实心填充*/
floodfill(1,380,14);
if(p<=15)
{ setbkcolor(hc); printf("%c",b[p]); }
else
setbkcolor(0);
p++;
setcolor(4); /*设置秒针颜色为2 绿色*/
d(190,s,6);
if (t[0].ti_min!=m) /*判断当前系统时间(分)与刚才得到的分是否相等*/
{
setcolor(14);
d(170,m,6);
m=t[0].ti_min;
d(170,m,6);
}
if (t[0].ti_hour!=h)
{
setcolor(7);
d(150,h,30);
h=t[0].ti_hour;
d(150,h,30);
}
setcolor(hc++);
if(hc==12)
hc=0;
ellipse(300,300,160,340,23,23);

/*眼睛*/
ellipse(220,170,0,360,23,65);
ellipse(380,170,0,360,23,65);
ellipse(220,180,0,180,23,23);
ellipse(380,180,0,180,23,23);

arc(150,80,20,250,59);
arc(450,80,-70,165,59);

}

getch();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式