您的位置:

时钟c语言教学,数字时钟c语言

本文目录一览:

怎么用C语言编程数字时钟

1、以下例程实现时钟的实时显示基本要求: 1) 自行设计界面,模拟表盘式时钟。要求界面美观,清晰。2)数字同步显示时间信息。

2、例程:

#includegraphics.h 

#includemath.h 

#includedos.h 

#define PI 3.1415926 

//屏幕中心的坐标(640X480模式下)

#define mid_x 320 

#define mid_y 240 

int main() 

{ int graphdriver=DETECT,graphmode; 

int end_x,end_y; 

struct time curtime; 

float th_hour,th_min,th_sec; 

initgraph(graphdriver,graphmode,"C:\\TC2"); //初始化VGA屏幕模式

setbkcolor(BLACK); //使用黑色的背景色

while(!kbhit(0)) //若有键盘输入,则跳出,即是结束程序

{ setcolor(GREEN); //把画笔设为绿色

circle(mid_x,mid_y,180); //钟的外圆

circle(mid_x,mid_y,150); //钟的内圆

circle(mid_x,mid_y,1); //画出钟的圆心

gettime(curtime); //取得系统当前时间

th_sec=(float)curtime.ti_sec*0.1047197551; //把秒针的角度化为弧度,为以后绘制时方便,下同

th_min=(float)curtime.ti_min*0.1047197551+th_sec/60.0; //分针的弧度

th_hour=(float)curtime.ti_hour*0.5235987755+th_min/12.0; //时度的弧度,注意整时是12等分的,所时乘的是3.14/180*5

//计算出时针的尾的坐标(时针长70)

end_x=mid_x+70*sin(th_hour); 

end_y=mid_y-70*cos(th_hour); 

setcolor(RED); 

line(mid_x,mid_y,end_x,end_y); //用红色线画出时针

//计算出分针坐标(分针长110)

end_x=mid_x+110*sin(th_min); 

end_y=mid_y-110*cos(th_min); 

setcolor(RED); 

line(mid_x,mid_y,end_x,end_y); //用红色画出分针

end_x=mid_x+140*sin(th_sec); 

end_y=mid_y-140*cos(th_sec); 

setcolor(RED); 

line(mid_x,mid_y,end_x,end_y); //同上,画出秒针,长为140

//画出钟盘上的刻度,刻度长20

line(140,240,160,240); //9点对应的大刻度

line(320,60,320,80); //12点对应的大刻度

line(500,240,480,240); //3点的刻度

line(320,420,320,400); //6点的刻度

line(410,395.7,400,378.4); //5点

line(475.7,330,458.4,320); //4点

line(475.7,150,458.4,160); //2点

line(410,84.3,400,101.6); //1点

line(230,84.3,240,101.6); //11点

line(164.3,150,181.6,160); //10点

line(164.3,330,181.6,320); //8点

line(230,395.7,240,378.4); //7点

sleep(BLUE); //这里应该是打错,停止一秒,应为sleep(1000)

cleardevice(); //清除屏幕上的显示

closegraph(); //关闭VGA屏幕,即返回文本方式

return 0; 

}

图形时钟用C语言怎么编?

#include graphics.h

#include conio.h

#include math.h

void Draw(int hour, int minute, int second)

{

     double a_hour, a_min, a_sec;       // 时、分、秒针的弧度值

     int x_hour, y_hour, x_min, y_min, x_sec, y_sec; // 时、分、秒针的末端位置

     int x_hour1,y_hour1,x_min1,y_min1,x_sec1,y_sec1;

     // 计算时、分、秒针的弧度值

     a_sec = second * 2 * PI / 60;

     a_min = minute * 2 * PI / 60 ;

     a_hour= hour * 2 * PI / 12 + a_min / 12;;

     // 计算时、分、秒针的首末端位置

     x_sec = 320 + (int)(120 * sin(a_sec));

     y_sec = 240 - (int)(120 * cos(a_sec));

     x_min = 320 + (int)(100 * sin(a_min));

     y_min = 240 - (int)(100 * cos(a_min));

     x_hour= 320 + (int)(70 * sin(a_hour));

     y_hour= 240 - (int)(70 * cos(a_hour));

     x_sec1= 320 - (int)(15   * sin(a_sec));

     y_sec1= 240 + (int)(15   * cos(a_sec));

     x_min1= 320 - (int)(10   * sin(a_min));

     y_min1= 240 + (int)(10   * cos(a_min));

     x_hour1= 320 - (int)(5 * sin(a_hour));

     y_hour1= 240 + (int)(5 * cos(a_hour));

     // 画时针

     setlinestyle(PS_SOLID, NULL, 7);

     setcolor(WHITE);

     line(x_hour1, y_hour1, x_hour, y_hour);

     // 画分针

     setlinestyle(PS_SOLID, NULL, 4);

     setcolor(LIGHTGRAY);

     line(x_min1, y_min1, x_min, y_min);

     // 画秒针

     setlinestyle(PS_SOLID, NULL, 2);

     setcolor(RED);

     line(x_sec1, y_sec1, x_sec, y_sec);

}

void main()

{

     initgraph(640, 480);    // 初始化 640 x 480 的绘图窗口

     // 绘制一个简单的表盘

     circle(320, 240, 2);

     circle(320, 240, 60);

     circle(320, 240, 160);

     outtextxy(296, 330, "   竹斌");

     int x,y;

     for(int i=0;i12;i++)

     {

         x=320+(int)(140*sin(30*i*2*PI/360));

         y=240-(int)(140*cos(30*i*2*PI/360));

switch(i)

         {

         case 0:outtextxy(x-5,y-5,"12");break;

         case 1:outtextxy(x-5,y-5,"1");break;

         case 2:outtextxy(x-5,y-5,"2");break;

         case 3:outtextxy(x-5,y-5,"3");break;

         case 4:outtextxy(x-5,y-5,"4");break;

         case 5:outtextxy(x-5,y-5,"5");break;

         case 6:outtextxy(x-5,y-5,"6");break;

         case 7:outtextxy(x-5,y-5,"7");break;

         case 8:outtextxy(x-5,y-5,"8");break;

         case 9:outtextxy(x-5,y-5,"9");break;

         case 10:outtextxy(x-5,y-5,"10");break;

         case 11:outtextxy(x-5,y-5,"11");break;

         }

     }

     // 设置 XOR 绘图模式

     setwritemode(R2_XORPEN); // 设置 XOR 绘图模式

     //画刻度

     int a,b,a1,b1,n=0;

     for(n=0;n60;n++)

     {

     a=320+(int)(160 * sin(n*2*PI/60));

     b=240-(int)(160 * cos(n*2*PI/60));

     a1=320+(int)(150 * sin(n*2*PI/60));

     b1=240-(int)(150 * cos(n*2*PI/60));

     if(n%5==0)

         setlinestyle(PS_SOLID,NULL,5);

     else

         setlinestyle(PS_SOLID,NULL,1);

     line(a1,b1,a,b);

     }

     // 绘制表针

     SYSTEMTIME ti;      // 定义变量保存当前时间

     while(!kbhit())      // 按任意键退出钟表程序

     {

          GetLocalTime(ti);         // 获取当前时间

          Draw(ti.wHour, ti.wMinute, ti.wSecond);    // 画表针

          Sleep(1000);          // 延时 1 秒

          Draw(ti.wHour, ti.wMinute, ti.wSecond);    // 擦表针(擦表针和画表针的过程是一样的)

     }

     closegraph();      // 关闭绘图窗口

}

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

这个也是我在别的地方找到的

很好的

#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;i60;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();

}