03张嘉欣.docx
《03张嘉欣.docx》由会员分享,可在线阅读,更多相关《03张嘉欣.docx(13页珍藏版)》请在冰豆网上搜索。
03张嘉欣
目录
一.设计题目……………………………………………………………2
二.题目内容的描述……………………………………………………2
三.应用程序功能的详细说明…………………………………………2
四.输入数据类型格式和内容限制……………………………………8
五.主要模块的算法描述………………………………………………9六.结束语………………………………………………………………11
七.程序的源代码清单…………………………………………………11
附录A.程序运行截图………………………………………………14
沈阳理工大学材料科学与工程学院
计算机程序训练任务书
姓名:
张嘉欣班级:
08050202学号:
03
一.设计题目:
在屏幕上绘制一个动态五角星
具体内容
(一)设计要求
在屏幕上绘制一个五角星,每按一次键盘转九十度。
用循环程序计算五角星的顶点,画直线完成。
五角星显示的位置、大小和转动的方向由键盘输入,并将输入的数据送文件保存。
按回车键程序结束。
(功能延伸:
改变数据文件的内容后,再根据数据文件里的数据绘制五角星)
(二)技术要求
1.按照给定题目独立设计程序,上机调试通过。
2.写出设计报告
提交报告的内容如下:
二.题目内容的描述
在屏幕上绘制一个五角星,每按一次键盘转九十度。
用循环程序计算五角星的顶点,画直线完成。
五角星显示的位置、大小和转动的方向由键盘输入,并将输入的数据送文件保存。
按回车键程序结束。
(功能延伸:
改变数据文件的内容后,再根据数据文件里的数据绘制五角星)
三.应用程序功能的详细说明
voidset_pentagon(int*xr,int*yr,int*r)/*insertpengaton*/
{
FILE*fp;
charfilename[20],ch;
printf("Inputthefile'sname:
");
gets(filename);
if((fp=fopen(filename,"w+"))==NULL)
{printf("fileopenerror.\n");
exit(0);
}
printf("pleaseinputthecharacterstothefile:
\n");
while((ch=getchar())!
='\n')
{fputc(ch,fp);
putchar(ch);
}
fclose(fp);
printf("\npleasesetthexryrandrforthepentagonyouhavetypedin:
\n");
scanf("%d",xr);
scanf("%d",yr);
scanf("%d",r);
}
这一段是文件的输入与输出。
其中(int*xr,int*yr,int*r)中*xr,*yr,*r是形参,传地址。
FILE*fp,fp是一个指向FILE类型结构体的指针变量,通过文件指针变量能够找到与他相关的变量。
gets(filename)表示在遇到空格或回车时,之前的内容都存在filename中。
“w+”(读写),为读写建立一个新的文本文件,if((fp=fopen(filename,"w+"))==NULL)是为了判断能否打开文件,NULL指空指针。
fputc(ch,fp)函数的作用是将ch的值输出到fp所指向的文件中去,输出成功则返回值为输出字符,如输入xr=200,yr=200,r=200。
putchar(ch)的功能是把ch输出在屏幕上。
printf("\npleasesetthexryrandrforthepentagonyouhavetypedin:
\n");
scanf("%d",xr);
scanf("%d",yr);
scanf("%d",r);这段的功能是输入xr,yr,r的值,存在xr,yr,r中;其中scanf中xr,yr,r无&,因为之前定义int*xr,int*yr,int*r已经传地址了。
voidshow(structpoint*p)/*showpentagon*/
{intn;
for(n=0;n<5;n++)
{if(n==0||n==3)
{setcolor
(2);
line(p[n].x,p[n].y,p[n+2].x,p[n+2].y);
}
else
{setcolor(4);
line(p[n].x,p[n].y,p[n+2].x,p[n+2].y);
}
}
}
这段是利用for循环两点画线形成五角星,利用if条件语句对旋转边及普通边上色。
其中for(n=0;n<5;n++);line(p[n].x,p[n].y,p[n+2].x,p[n+2].y);功能是两点连线画出五角星的各边。
main()
{intr,xr,yr;
intn,i;
intgd=VGA,gm=VGAHI;
intk1,k2;
inta;
其中intr,xr,yr;中(xr,yr)是圆心坐标,这个圆是五角星的外接圆,r为此圆半径。
intgd=VGA,gm=VGAHI;的功能是设置图形模式。
intk1,k2;输入键值(ASCII码)。
set_pentagon(&xr,&yr,&r);
printf("setturn1or2:
\n");
scanf("%d",&a);
主函数调用set_函数,其中turn1表示左转,turn2表示右转。
initgraph(&gd,&gm,"");
cleardevice();
if(a==1)i=1;/*turnleft*/
if(a==2)i=5;/*turnright*/
while
(1)
{cleardevice();
switch(i)/*4turnsofpentagon*/
{case1:
{for(n=0;n<7;n++)
{p[n].x=xr-r*sin(2*PI*n/5);
p[n].y=yr-r*cos(2*PI*n/5);
}
show(p);
if(a==2)i=5;break;
}
initgraph(&gd,&gm,"");初始化图形模式。
cleardevice();清屏。
if(a==1)i=1;表示左转。
if(a==2)i=5;表示右转。
switch(i)控制五角星的四个旋转方向。
{case1:
{for(n=0;n<7;n++)
{p[n].x=xr-r*sin(2*PI*n/5);
p[n].y=yr-r*cos(2*PI*n/5);
}
show(p);
if(a==2)i=5;break;
}
其中switch函数调用show函数,break跳出后重复执行switch函数。
k1=bioskey(0);
k1=k1&0xff;
if(k1==13)break;
if(a==1)i++;
if(a==2)i--;
}
closegraph();
其中k1=bioskey(0)表示等待键盘输入。
k1=k1&0xff
程序的输出:
Inputthefile'sname:
k
Pleaseinputthecharacterstothefile:
xr=200yr=200r=200
xr=200yr=200r=200
Pleasesetthexryrandrforthepentagonyouhavetypedin:
200200200
Setturn1or2:
1是左转,2是右转。
四.输入数据类型、格式和内容限制
Main()主函数
主函数中调用scanf()函数,实现数据的输入,并通过调用save(),实现文件的保存,通过调用drawcurve(),画出圆的外摆线,通过调用star()画出五角星,通过for循环不断改变传入star的值,实现五角星在外摆线是上的运动。
cleardevice()清屏函数
擦除整个图形屏幕并将光标移到原点
line()画线函数功能:
函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。
用法:
该函数调用方式为voidline(intstartx,intstarty,intendx,intendy);
说明:
参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。
此函数相应的头文件为graphics.h
返回值:
无
conio.h:
conio.h不是C标准库中的头文件。
conio是ConsoleInput/Outp(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。
graphics.h:
图形处理头文件。
#include数学运算函数
#include标准库函数
#include磁盘输出函数
#definePI3.1415926宏定义PI
输入数据类型包括整形常量。
格式和内容方面没有什么限制
五.主要模块的算法描述
以程序流程图的方式给出
set_pentagon
show
main
六.结束语
通过这一学期C语言的学习,是我对C语言有了一个重新的认识,但是有些问题还不是很懂,曾多次去图书馆针对此问题查询资料,再加上同学的指点,才完成本次作业。
本次计算机程序训练的题目是编辑动态五角星,转动完全由键盘控制。
我编写和调试的这个程序完成了动态五角星的旋转。
通过本次程序训练,使我对C语言有了更深刻的了解。
它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
这使我对C程序的学习产生了很大的兴趣。
C语言真是一个博大精深的语言,还需我们继续的学习,在以后的工作和学习中加以应用!
七.程序的源代码清单
#include
#include
#include
#include
#include
#definePI3.1415926
structpoint
{intx;
inty;
}p[7];
voidset_pentagon(int*xr,int*yr,int*r)
{
FILE*fp;
charfilename[20],ch;
printf("Inputthefile'sname:
");
gets(filename);
if((fp=fopen(filename,"w+"))==NULL)
{printf("fileopenerror.\n");
exit(0);
}
printf("pleaseinputthecharacterstothefile:
\n");
while((ch=getchar())!
='\n')
{fputc(ch,fp);
putchar(ch);
}
fclose(fp);
printf("\npleasesetthexryrandrforthepentagonyouhavetypedin:
\n");
scanf("%d",xr);
scanf("%d",yr);
scanf("%d",r);
}
voidshow(structpoint*p)
{intn;
for(n=0;n<5;n++)
{if(n==0||n==3)
{setcolor
(2);
line(p[n].x,p[n].y,p[n+2].x,p[n+2].y);
}
else
{setcolor(4);
line(p[n].x,p[n].y,p[n+2].x,p[n+2].y);
}
}
}
main()
{intr,xr,yr;
intn,i;
intgd=VGA,gm=VGAHI;
intk1,k2;
inta;
set_pentagon(&xr,&yr,&r);
printf("setturn1or2:
\n");
scanf("%d",&a);
initgraph(&gd,&gm,"");
cleardevice();
if(a==1)i=1;
if(a==2)i=5;
while
(1)
{cleardevice();
switch(i)
{case1:
{for(n=0;n<7;n++)
{p[n].x=xr-r*sin(2*PI*n/5);
p[n].y=yr-r*cos(2*PI*n/5);
}
show(p);
if(a==2)i=5;break;
}
case2:
{for(n=0;n<7;n++)
{p[n].x=xr-r*cos(2*PI*n/5);
p[n].y=yr-r*sin(2*PI*n/5);
}
show(p);break;
}
case3:
{for(n=0;n<7;n++)
{p[n].x=xr+r*sin(2*PI*n/5);
p[n].y=yr+r*cos(2*PI*n/5);
}
show(p);break;
}
case4:
{for(n=0;n<7;n++)
{p[n].x=xr+r*cos(2*PI*n/5);
p[n].y=yr+r*sin(2*PI*n/5);
}
show(p);
if(a==1)i=0;break;
}
case5:
{for(n=0;n<7;n++)
{p[n].x=xr-r*sin(2*PI*n/5);
p[n].y=yr-r*cos(2*PI*n/5);
}
show(p);break;
}
}
k1=bioskey(0);
k1=k1&0xff;
if(k1==13)break;
if(a==1)i++;
if(a==2)i--;
}
closegraph();
}
附录A.程序运行截图