C语言集中上机.docx
《C语言集中上机.docx》由会员分享,可在线阅读,更多相关《C语言集中上机.docx(11页珍藏版)》请在冰豆网上搜索。
C语言集中上机
集中上机实习报告
指导教师:
李红娟
姓名:
尚霄
学号:
2014211806
班级:
0401413
时间:
5.27
一:
实验目的
加深对授课内容的理解,能自然地,熟练地掌握一些语法规定。
熟悉所用的计算机系统的操作方法,熟悉语言程序开发的环境。
最终通过程序运行结果为电脑屏幕显示模拟时钟,并正常运行显示表针时间。
二:
实验题目
模拟时钟转动程序
要求:
能模拟机械钟表行走,还要准确地利用数字显示日期和时间,在屏幕上显示一个活动时钟,按任意键时程序退出。
三:
流程图
四:
运行环境
操作系统:
Windows7
C语言开发环境:
vc6.0
五:
模块描述
1:
指针式时钟
表盘为圆形,圆上有刻度线,有大小不同的刻度线以便观察时间。
源代码:
#include
#include
#include
#include
#include
#include
#include
#definePI3.14159
voidDraw(inthour,intminute,intsecond)
{
doublea_hour,a_min,a_sec;//时、分、秒针的弧度值
intx_hour,y_hour,x_min,y_min,x_sec,y_sec;//时、分、秒针的末端位置
a_sec=second*2*PI/60;//计算时、分、秒针的弧度值
a_min=minute*2*PI/60+a_sec/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));
setlinestyle(PS_SOLID,0,NULL,10);//设置时针的线宽度和类型
setcolor(LIGHTMAGENTA);//设置颜色
line(320,240,x_hour,y_hour);//画时针
setlinestyle(PS_SOLID,0,NULL,6);
setcolor(LIGHTMAGENTA);
line(320,240,x_min,y_min);//画分针
setlinestyle(PS_SOLID,0,NULL,2);
setcolor(WHITE);
line(320,240,x_sec,y_sec);//画秒针
}
voidmain()
{
inti,l,x1,x2,y1,y2;
initgraph(640,480);//初始化640x480的绘图窗口
circle(320,240,2);//绘制一个简单的表盘
circle(320,240,160);
for(i=0;i<60;i++)//划钟点上的短线
{
if(i%5==0)
l=15;
else
l=5;
x1=160*sin(i*6*PI/180)+320;
y1=160*cos(i*6*PI/180)+240;
x2=(160-l)*sin(i*6*PI/180)+320;
y2=(160-l)*cos(i*6*PI/180)+240;
line(x1,y1,x2,y2);
}
setwritemode(R2_XORPEN);//设置XOR绘图模式
SYSTEMTIMEti;//定义变量保存当前系统时间
while(!
kbhit())//按任意键退出程序
{
GetLocalTime(&ti);//获取当前时间
Draw(ti.wHour,ti.wMinute,ti.wSecond);//画表针
Sleep(1000);//延时1秒
Draw(ti.wHour,ti.wMinute,ti.wSecond);//擦表针
}
closegraph();
}
功能截图:
2:
数字式时针
以数字和英文和形式准确表示出系统时间
源代码:
#include
#include
voidmain()
{
time_trawtime;
structtm*timeinfo;
time(&rawtime);
timeinfo=localtime(&rawtime);
printf("%s",asctime(timeinfo));
}
功能截图:
五:
源代码及结果
#include
#include
#include
#include
#include
#include
#include
#definePI3.14159
#defineN20
voidDraw(inthour,intminute,intsecond)
{
doublea_hour,a_min,a_sec;//时、分、秒针的弧度值
intx_hour,y_hour,x_min,y_min,x_sec,y_sec;//时、分、秒针的末端位置
a_sec=second*2*PI/60;//计算时、分、秒针的弧度值
a_min=minute*2*PI/60+a_sec/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));
setlinestyle(PS_SOLID,0,NULL,10);//设置时针的线宽度和类型
setcolor(LIGHTMAGENTA);//设置颜色
line(320,240,x_hour,y_hour);//画时针
setlinestyle(PS_SOLID,0,NULL,6);
setcolor(LIGHTMAGENTA);
line(320,240,x_min,y_min);//画分针
setlinestyle(PS_SOLID,0,NULL,2);
setcolor(WHITE);
line(320,240,x_sec,y_sec);//画秒针
}
voidmain()
{
inti,l,x1,x2,y1,y2;
chars[N];
time_trawtime;
structtm*timeinfo;
initgraph(640,480);//初始化640x480的绘图窗口
circle(320,240,2);//绘制一个简单的表盘
circle(320,240,160);
for(i=0;i<60;i++)//划钟点上的短线
{
if(i%5==0)
l=15;
else
l=5;
x1=160*sin(i*6*PI/180)+320;
y1=160*cos(i*6*PI/180)+240;
x2=(160-l)*sin(i*6*PI/180)+320;
y2=(160-l)*cos(i*6*PI/180)+240;
line(x1,y1,x2,y2);
}
setwritemode(R2_XORPEN);//设置XOR绘图模式
SYSTEMTIMEti;//定义变量保存当前系统时间
while(!
kbhit())//按任意键退出程序
{
time(&rawtime);
timeinfo=localtime(&rawtime);//得到一个指向时间字符串的指针
memcpy(s,asctime(timeinfo),sizeof(s));//把指向字符串的指针中的字符存到字符数组中
s[strlen(s)-2]=0;//把数组最后一个字符删掉
setcolor(LIGHTMAGENTA);
outtextxy(250,300,s);
GetLocalTime(&ti);//获取当前时间
Draw(ti.wHour,ti.wMinute,ti.wSecond);//画表针
Sleep(1000);//延时1秒
Draw(ti.wHour,ti.wMinute,ti.wSecond);//擦表针
}
closegraph();//关闭窗口
}
六:
遇到的困难和心得体会
虽然学了一个学期的C语言,但自从选了这个课题以后我就深深的认识到了自己的不足。
首先,这个课题所要求的类型我们以前都没有学过。
请教过一些人,知道要先自学图形库和时间函数,就在网上自己找资料来看。
后来了解到vc6.0中并没有图形库,曾一度想放弃。
但后来经过学长的帮忙下在vc6.0中装了easyx的图形库,然后XX学习了图形库的使用和系统时间的获取,终于把结果给弄出来了。
通过这个课题的实验是我认识到自己的不足之处,但同时也让我感受到了编写程序的枯燥和结果出来的欣喜,也体会到了做一件事不仅需要激情更需要坚持与细心。
在编译过程中也出现了很多困难不知道从何下手,就求教学长学姐和XX,让我学会了寻求帮助。
也深知要想学好一门课程必须要踏踏实实,掌握好基础才能在后面的路程中走得越远!