求C语言牛人解释一下

#include<graphics.h>
#include<math.h>
#include<dos.h>
#define pi 3.1415926
#define 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;
#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y)
void init()
{int i,l,x1,x2,y1,y2;
setbkcolor(0);
circle(300,240,200);
circle(300,240,205);
circle(300,240,5);
circle(300,240,10);
line(295,60,300,80);
line(295,80,300,60);
line(302,60,302,80);
line(304,60,304,80);
line(301,60,305,60);
line(301,80,305,80);
line(468,230,468,250);
line(473,230,473,250);
line(478,230,478,250);
line(467,230,479,230);
line(467,250,479,250);
line(294,400,297,420);
line(297,420,300,400);
line(303,400,303,420);
line(302,400,304,400);
line(302,420,304,420);
line(125,230,135,250);
line(125,250,135,230);
line(122,230,122,250);
line(121,230,123,230);
line(121,250,123,250);
for(i=0;i<60;i++)
{if(i%5==0) l=15;
else l=5;
x1=200*cos(i*6*pi/180)+300;
y1=200*sin(i*6*pi/180)+240;
x2=(200-l)*cos(i*6*pi/180)+300;
y2=(200-l)*sin(i*6*pi/180)+240;
line(x1,y1,x2,y2);
}
}
main()
{
int x,y;
int gd=VGA,gm=2;
unsigned char h,m,s;
struct time t[1];
initgraph(&gd,&gm,"d:\\tc");
init();
setwritemode(1);
gettime(t);
h=t[0].ti_hour;
m=t[0].ti_min;
s=t[0].ti_sec;
setcolor(7);
d(150,h,30);
setcolor(14);
d(170,m,6);
setcolor(4);
d(190,s,6);
while(!kbhit())
{while(t[0].ti_sec==s)
gettime(t);
sound(400);
delay(70);
sound(200);
delay(30);
nosound();
setcolor(4);
d(190,s,6);
s=t[0].ti_sec;
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);
sound(1000);
delay(240);
nosound();
delay(140);
sound(2000);
delay(240);
nosound();
settextstyle(0,1,1);
outtextxy(300,420,"XII");
}
}
getch();
closegraph();
}

我在网上下了个C语言的程序代码
但是不明白每个语句的作用
希望能有大侠解释一下
好的话会追加分数
谢谢
呵呵
我是帮我同学问的
昨天那个就是2L解答的
今天还是会追加分数的,
因为明天就要交了
所以很急
希望可以帮帮忙
谢谢

貌似我同学的那个
也是冒险岛乐乐回答的
先谢谢了啊

[email protected]

谢谢了

V飘渺V上次那个解释里面有个地方有问题,又改写了一下。有邮箱的话留下我重新传给你。
#include<graphics.h>
#include<math.h>
#include<dos.h>
#define pi 3.1415926
#define 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;
#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y)

void init()/* 画图函数 */
{int i,l,x1,x2,y1,y2;
setbkcolor(0); /* 设置背景色为黑色(颜色数值为0) */
circle(300,240,200);/* 画圆,圆中心(300,240),半径200,之所以如此是因为屏幕尺寸为640x480,这样设置坐标可以使圆靠近屏幕中心 */
circle(300,240,205); /* 再画一个同心圆,半径205,产生具有立体感的时钟表盘 */
circle(300,240,5); /* 画中心的两个小圆,半径分别为5,10 */
circle(300,240,10); /* 本来画出的圆变成了椭圆,这是因为显示器不是正方形(640x480),x,y方向不同有压缩比,有时可设比例因子k=480/640变换成接近圆形输出 */
line(295,60,300,80);/*以下画图形'XII',均为用小线段绘制,下同 */
line(295,80,300,60);
line(302,60,302,80);
line(304,60,304,80);
line(301,60,305,60);
line(301,80,305,80);
line(468,230,468,250);/*以下画图形'III' */
line(473,230,473,250);
line(478,230,478,250);
line(467,230,479,230);
line(467,250,479,250);
line(294,400,297,420);/*以下画图形'VI' */
line(297,420,300,400);
line(303,400,303,420);
line(302,400,304,400);
line(302,420,304,420);
line(125,230,135,250);/*以下画图形'IX' */
line(125,250,135,230);
line(122,230,122,250);
line(121,230,123,230);
line(121,250,123,250);
for(i=0;i<60;i++)/* 画表盘上上的60个小刻度,长度为5,每个刻度代表1分钟 */
{if(i%5==0) l=15;/* 每第5个刻度代表整点小时,长度为1 */
else l=5;
x1=200*cos(i*6*pi/180)+300;/* 利用圆的参数方程形式确定各刻度的起点坐标 */
y1=200*sin(i*6*pi/180)+240;
x2=(200-l)*cos(i*6*pi/180)+300;/* 同理确定终点坐标 */
y2=(200-l)*sin(i*6*pi/180)+240;
line(x1,y1,x2,y2);/* 从起点到终点画线,表示各个刻度 */
}
}
main()
{
int x,y;
int gd=VGA,gm=2;/* 采用VGA驱动方式,显示模式为2(VGAHI 分辨率640×480 16色) */
unsigned char h,m,s;/* 定义字符时,分,秒,个人感觉这里应该定义成int型而非char型 */
struct time t[1]; /* 定义t[1]为time结构体类型 */
initgraph(&gd,&gm,"d:\\tc"); /* 初始化,设置屏幕为图形工作模式,参数“d:\\tc”指定驱动程序存放的位置是d:\tc文件夹 */
init();/* 调用画图函数 */
setwritemode(1);/* 设置图形方式下画线的输出模式,这里为方式1(异或方式) */
gettime(t);/* 调用获得dos形式的当前时间并存入t所指向的结构体struct time中 */
h=t[0].ti_hour;/* 小时数给h */
m=t[0].ti_min; /* 分钟数给m */
s=t[0].ti_sec; /* 秒给s */
setcolor(7); /* 设置绘图色为淡灰色LIGHTGRAY(颜色数值为7) */
d(150,h,30);/* 用淡灰色画时钟的时针,h在变化故时针会随之变化位置,时针线段起点为表盘的中心(300,240) */
setcolor(14);/* 设置绘图色为黄色YELLOW(颜色数值为14) */
d(170,m,6); /* 用黄色画时钟的分针,m在变化故分针会随之变化位置,分针线段起点也为表盘的中心(300,240) */
setcolor(4);/* 设置绘图色为红色RED(颜色数值为4) */
d(190,s,6); /* 用红色画时钟的秒针,s在变化故秒针会随之变化位置,秒针线段起点也为表盘的中心(300,240) */
while(!kbhit())/* 按任一键结束如下循环 */
{while(t[0].ti_sec==s)/* 如果换算得到的时间秒等于整秒数s */
gettime(t);/* 重新调用函数gettime获得系统时间 */
sound(400);/* 调用发声函数使扬声器发频率400Hz(人耳听力范围20-20000Hz)声音 */
delay(70); /* 延时70毫秒 */
sound(200);/* 再发频率200Hz声音 */
delay(30);/* 延时30毫秒 */
nosound();/* 关闭扬声器 */
setcolor(4); /* 设置绘图色为红色RED(颜色数值为4) */
d(190,s,6); /* 重新画秒针 */
s=t[0].ti_sec;/* gettime获得系统时间经换算秒数给s */
d(190,s,6);/* 再画秒针,秒针每一秒位置变化一次 */
if (t[0].ti_min!=m)/* 如果gettime获得系统时间计算得出的时间分和前面的m不同,说明秒针已记满60,时间分应加1以和系统时间同步 */
{/* 分种数值增加位置必然变化 */
setcolor(14);/* 再设置画图颜色,画分针原来位置 */
d(170,m,6);
m=t[0].ti_min;/* 同时把当前实际时间分给m */
d(170,m,6); /* 画当前分针位置 */
}
if (t[0].ti_hour!=h)/* 如果gettime获得系统时间计算得出的时间小时和前面的h不同,说明分针已记满60,时间小时应加1以和系统时间同步 */
{ setcolor(7);/* 设置绘图色画时针原来位置 */
d(150,h,30);
h=t[0].ti_hour;/* 同时把当前实际时间小时给h */
d(150,h,30); /* 画时针当前位置 */
sound(1000);/* 发频率1000Hz声音 */
delay(240);/* 延时240毫秒 */
nosound(); /* 关闭扬声器 */
delay(140);/* 延时140毫秒 */
sound(2000);/* 发频率2000Hz声音 */
delay(240); /* 延时240毫秒 */
nosound(); /* 关闭扬声器 */
settextstyle(0,1,1);/* 图形方式下设置当前要显示的文本属性 */
outtextxy(300,420,"XII");/* 从坐标(300,420)开始输出显示文本XII,由于上面已经画出了XII,所以这句和上面一句均多余,应该去掉 */
}
}
getch();
closegraph();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-14
冒泡排序是:相邻两数两两比较,进行相邻大小的交换,共进行N-1次,每轮
进行N-1-i次.核心程序段为:
for(i=0;i<N-1;i++)
{
for(j=0;j<N-i-1;j++)
if(a[j]>a[j+1])
{temp=a[j];a[j]=a[j+1];a[j+1]=temp}
}
选折排序是:首数与后数进行两两相比,按大小进行交换,共进行N-1次,每轮进行N-1次,每轮进行从i+1开始N-1为止。核心程序段为:
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N-1;j++)
if(a[i]>a[j])
{temp=a[i];a[i]=a[j];a[j]=temp}
}
注意了与冒泡排序的核心段的区别在于:
(1)交换的两个对象:冒泡是
a[j]>a[j+1]
选折是
a[i]>a[j]
(2)轮次的变化:
冒泡是
for(j=0;j<N-i-1;j++)
选折是
for(j=i+1;j<N-1;j++)
冒泡的形式是:a[n]与啊a[n+1]比较交换
选折的形式则是:
第一次
a[0]与以后的比较交换
第二次
a[1]与以后的比较交换
........
第n次是a[n]与以后的比较交换
第2个回答  2009-02-25
哇,代码好吓人!
第3个回答  2009-02-25
画圆,划线,画图形。
相似回答