求C语言代码解释!!!望高手指点。。。

#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define IMAGE_SIZE 10
void draw_image(int x,int y);
void putstar(void);
main()
{
int driver=DETECT;
int mode,color;
void *pt_addr;
int x,y,maxy,maxx,midy,midx,i;
unsigned size;
initgraph(&driver,&mode,"");
maxx=getmaxx();
maxy=getmaxy();
midx=maxx/2;
x=0;
midy=y=maxy/2;
settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(midx,400,"AROUND THE WORLD");
setbkcolor(BLACK);
setcolor(RED);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
ellipse(midx,midy,130,50,160,30);
draw_image(x,y);
size=imagesize(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE);
pt_addr=malloc(size);
getimage(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE,pt_addr);
putstar();
setcolor(WHITE);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
rectangle(0,0,maxx,maxy);
while (!kbhit())
{
putstar();
setcolor(RED);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
ellipse(midx,midy,130,50,160,30);
setcolor(BLACK);
ellipse(midx,midy,130,50,160,30);
for (i=0;i<=13;i++)
{
setcolor(i%2==0 ? LIGHTBLUE:BLACK);
ellipse(midx,midy,0,360,100-8*i,100);
setcolor(LIGHTBLUE);
ellipse(midx,midy,0,360,100,100-8*i);
}
putimage(x,y-IMAGE_SIZE,pt_addr,XOR_PUT);
x=x>=maxx?0:x+6;
putimage(x,y-IMAGE_SIZE,pt_addr,COPY_PUT);
}
free(pt_addr);
closegraph();
return;
}
void draw_image(int x,int y)
{
int arw[11];
arw[0]=x+10; arw[1]=y-10;
arw[2]=x+34; arw[3]=y-6;
arw[4]=x+34; arw[5]=y+6;
arw[6]=x+10; arw[7]=y+10;
arw[8]=x+10; arw[9]=y-10;
moveto(x+10,y-4);
setcolor(14);
setfillstyle(1,4);
linerel(-3*10,-2*8);
moveto(x+10,y+4);
linerel(-3*10,+2*8);
moveto(x+10,y);
linerel(-3*10,0);
setcolor(3);
setfillstyle(1,LIGHTBLUE);
fillpoly(4,arw);
}
void putstar(void)
{
int seed=1858;
int i,dotx,doty,h,w,color,maxcolor;
maxcolor=getmaxcolor();
w=getmaxx();
h=getmaxy();
srand(seed);
for(i=0;i<250;++i)
{
dotx=i+random(w-1);
doty=1+random(h-1);
color=random(maxcolor);
setcolor(color);
putpixel(dotx,doty,color);
circle(dotx+1,doty+1,1);
}
srand(seed);
}

#include<graphics.h> //引用头文件 不写会影响一些函数的使用
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define IMAGE_SIZE 10 //宏定义 在下面的代码中出现 IMAGE_SIZE 就用10 代替就可以
void draw_image(int x,int y); //函数声明 下面有具体函数定义 没声明 就不可以用这个函数
void putstar(void); //同上
main() //主函数
{
int driver=DETECT;
int mode,color;
void *pt_addr;
int x,y,maxy,maxx,midy,midx,i;
unsigned size;
initgraph(&driver,&mode,"");
maxx=getmaxx(); //调用函数
maxy=getmaxy();
midx=maxx/2;
x=0;
midy=y=maxy/2;
settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(midx,400,"AROUND THE WORLD");
setbkcolor(BLACK);
setcolor(RED);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
ellipse(midx,midy,130,50,160,30);
draw_image(x,y);
size=imagesize(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE);
pt_addr=malloc(size);
getimage(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE,pt_addr);
putstar();
setcolor(WHITE);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
rectangle(0,0,maxx,maxy);
while (!kbhit())
{
putstar();
setcolor(RED);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
ellipse(midx,midy,130,50,160,30);
setcolor(BLACK);
ellipse(midx,midy,130,50,160,30);
for (i=0;i<=13;i++)
{
setcolor(i%2==0 ? LIGHTBLUE:BLACK);
ellipse(midx,midy,0,360,100-8*i,100);
setcolor(LIGHTBLUE);
ellipse(midx,midy,0,360,100,100-8*i);
}
putimage(x,y-IMAGE_SIZE,pt_addr,XOR_PUT);
x=x>=maxx?0:x+6;
putimage(x,y-IMAGE_SIZE,pt_addr,COPY_PUT);
}
free(pt_addr);
closegraph();
return;
}
void draw_image(int x,int y) //函数定义 构造一个函数 传入两个参数 利用两个参数求出数组 arw10个元素
{
int arw[11];
arw[0]=x+10; arw[1]=y-10;
arw[2]=x+34; arw[3]=y-6;
arw[4]=x+34; arw[5]=y+6;
arw[6]=x+10; arw[7]=y+10;
arw[8]=x+10; arw[9]=y-10;
moveto(x+10,y-4); //这个函数在这个程序里没有定义过却直接使用 所以可能在头文件中定义过
setcolor(14); //同上
setfillstyle(1,4); //同上
linerel(-3*10,-2*8); //同上
moveto(x+10,y+4); //同上
linerel(-3*10,+2*8); //同上
moveto(x+10,y); //同上
linerel(-3*10,0); //同上
setcolor(3); //同上
setfillstyle(1,LIGHTBLUE);//同上
fillpoly(4,arw); //同上
}
void putstar(void) //定义一个函数
{
int seed=1858; //随机种子 用于随机函数中
int i,dotx,doty,h,w,color,maxcolor;
maxcolor=getmaxcolor();
w=getmaxx();
h=getmaxy();
srand(seed); //调用随机函数 使其产生每次都不一样的结果
for(i=0;i<250;++i)
{
dotx=i+random(w-1);
doty=1+random(h-1);
color=random(maxcolor);
setcolor(color);
putpixel(dotx,doty,color);
circle(dotx+1,doty+1,1);
}
srand(seed);
}
希望对你有帮助追问

希望主函数解释得详细点,我是一个初学者,还有那些什么的头文件都没见过。。。

追答

额 初学者开这个太难了 里面含有很多复杂的东西 建议先把c语言掌握好 再看复杂的代码
头文件就是用来专门定义一些常用的函数、参数。在一些工程中常常会写一些头文件,这样提高效率 ,头文件和普通代码没什么区别 就是创建时选择了头文件 还是main函数的区别 其实都是代码的

追问

这是开卷考试,可以课后做,还望您指点啊。。。尽量详细点。。我加点分 我学得不好,上课没认真听,55555555

追答

可我不是学你那专业的啊 有的东西我可能也不懂啊 我只学过c语言 如果真要帮你 我们私聊吧
问题有点复杂啊 加我好友

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-09
知道是否满足你的要求。

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

#define DATATYPE int //DATATYPE 应该用相应的数据的类型代替
#define MAX_COUNT 100 //定义 Stack 的最大容量,这里为100,可以更改

struct StackNode
{
DATATYPE data;
StackNode *next;
};

struct Stack
{
int count;
StackNode *top;
}; //漏了一个分号,应该是不小心

void initStack(Stack *s)
{
s->top=NULL;
s->count=0;
}

int StackEmpty(Stack *s)
{
return s->top==NULL;//不知道具体功能是什么,猜测是判断stack是否是空的
//判断是否相等用 "=="
}

int StackFull(Stack *s)
{
return s->count == MAX_COUNT-1;//count不是全局变量,是stack的一个成员变量。
//这是定义了一个全局变量 MAX_COUNT,作为Stack的容量
}

void Push(Stack *s,DATATYPE data)
{
struct StackNode *newPtr;
newPtr=(struct StackNode *)malloc(sizeof(struct StackNode));
if(StackFull(s))
{
printf("OverFlow\n");
}

newPtr->data=data;
newPtr->next=s->top;
s->top=newPtr;

s->count++;
}

DATATYPE Pop(Stack *s)//不知道dataout干什么用的,是要存储pop出来的内容吗?
{
DATATYPE dataout;
if(StackEmpty(s))
{
printf("UnderFlow\n");
}
struct StackNode *dltPtr;
dltPtr=s->top;
dataout=dltPtr->data;
s->top=dltPtr->next;
s->count--;
return dataout;
}

void DestroyStack(Stack *s)
{
struct StackNode * temp;
while(s->top!=NULL)
{
temp=s->top;
s->top=temp->next;
free(temp);
}
s->count=0;
}

int main()
{
Stack *s = NULL;
int a[10],i;
initStack(s);

printf("Please input the data:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");

printf("Before the reverse:\n");
for(i=0;i<9;i++)
printf("%d ",a[i]);
printf("\n");

i=0;
while(a[i]!=0)
{
Push(s,a[i]);
i++;
}

printf("\n");
printf("After the reverse:\n");
while(!StackEmpty(s))
{
DATATYPE e = Pop(s);
printf("%d",e);
}

DestroyStack(s);

getchar();//应该是getchar()
return 0;
}
第2个回答  2011-04-09
我晕~~~其实你上网查一下一些自己不会的语法,然后理解一下就会了,不用那么麻烦的,而且就算是帮你都解释了对你也没什么用,因为很快就会忘了,特别是‘如果你是应付考试的话’
第3个回答  2011-04-08
你是要全部加注释吗?追问

嗯哪,谢谢啊

追答

这有点像C语言教程上面的内容,讲如果实现画图吧?

追问

嗯,是啊,是计算机图形学,还望您指点啊。。。

相似回答