求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解答的
今天还是会追加分数的,
因为明天就要交了
所以很急
希望可以帮帮忙
谢谢

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

197239066@qq.com

谢谢了

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
画圆,划线,画图形。

为什么C和C++牛人多
起码,除了汇编语言,C和C++大概是唯一用来写操作系统的语言了,很多底层的驱动程序,操作系统内核级模块,只能用C和C++来开发,因此,一个C和C++程序员,他唯一不知道的,可能就是不知道自己以后会去写什么平台的什么程序,这要求他必须努力学习很多语言之外的知识,为下一份工作做好知识储备。�0�2�0�2�0...

哪位牛人帮解释一下,在单片机c语言编程中while(delay_time--)语句的作...
while(delay_time--)是当delay_temi变量为非0时循环行while中的语句,持行一次循环,delay_time减1,直到delay_time=1。如果while后没有语句,那就相当于一条等待语句。例如:while(delay_time--){ count++; \/\/注:count自加1,等于count=count+1;} 如果delay_time为正数,执行的结果就是count=(...

请哪位牛人告诉我怎样用C语言程序复原3阶魔方的
了解算法是复原3阶魔方的关键。下面提供了一种使用C语言程序实现的复原方法,适合解决有限阶魔方问题。首先,输入魔方阶数n,确保n为大于2的奇数。程序将根据输入的阶数,按特定规则生成魔方布局。接下来,程序会生成一个n*n*n的魔方布局数组a,并根据输入阶数,采用不同的生成规则。这里仅提供一个示例规...

C语言中如果double x=123.123000,但是我只想输出0.123 后面的0我不...
} 注意VC6下,double最多小数点后面可以有15位,再多了肯定都是0,上面程序设了20,肯定后面都是0,用于输出的话,转换成ch后,删除0字符,再输出,肯定没问题的。抛砖引玉,楼主参考,有问题,再hi我,继续探讨。

牛人指点:用c语言来实现A3或A5或A8算法
这好真苦难,c语言A2,A5,A8只的是什么啊

C语言main函数形参的问题,就是那个char *argv[]……求助牛人
鄙人不同意wo370506875 这位仁兄的回答,很明显,argv是主函数的参数,是形参,而且他的基类型是一个指向指针的指针,是一个变量,那么,他接受的应该是一个指针数组,也就是argv指向 调用这个c生成的.exe文件的那些命令字符,而那些命令字符又是字符串,so,++argv 相当于 从当前指向的字符串移向下一...

思考,为什么C和C++牛人多
1,全新的程序程序思维,C语言是面向过程的,而C++是面向对象的。2,C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;而C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API...

数值分析 C语言编程 求助!!谁是牛人来解决一下
include <math.h> define N 3 int main(){ int i,j;double a[N][N]={ {10,-1,-2},{-1,10,-2},{-1,-1,5}};double b[N]={7.2,8.3,4.2};double x[N]={0},tm;double xnew[N]={0};double max;int m=0;while(++m){ cout<<m;max=0;for(i=0;i<N;i++){...

哪位牛人帮我解释下C语言中使用scanf函数时的空白符问题,也就是在scan...
scanf(“ %”,&a);也就是说在输入a变量时,必须在输入a变量前,输入scanf格式里面有几个空格就必须输入几个空格符.

麻烦哪位牛人帮忙用C语言编个程序1 输入2,5,3,1,4 输出要求逆顺输出一...
如果有别的要求,可给我留言 include "stdio.h"define N 5 main(){ int a[N]={2,5,3,1,4};int i;for(i=N-1;i>=0;i--)printf("%d",a[i]);for(i=0;i<N;i++)printf("%d",a[i]);for(i=N-1;i>=0;i--)printf("%d",a[i]);printf("\\n");} 如果对你有所帮助...

相似回答