c语言课程设计--飘动的红旗.doc_第1页
c语言课程设计--飘动的红旗.doc_第2页
c语言课程设计--飘动的红旗.doc_第3页
c语言课程设计--飘动的红旗.doc_第4页
c语言课程设计--飘动的红旗.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西安建筑科技大学大作业(论文) 成绩 西安建筑科技大学本 科 课 程 设 计 报 题 目: 红旗图案的程序设计 学生姓名: 学 号: 院 (系): 专 业: 指导教师: 20101年 01 月01 日课程设计任务书专业班级: 学生姓名: 指导教师: 一、大作业(论文)题目红旗图案的程序设计二、本次大作业(论文)应达到的目的本次课程设计的目的是运用计算机语言设计通信录管理系统,通过此次课程设计,加深学生对本课程基本知识的理解,提高综合运用知识的能力;掌握本课程的主要内容、工程设计或撰写小论文的步骤和方法;以提高学生独立分析问题、解决问题的能力,逐步增强实际工程训练。三、本次大作业(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等) 要求: 要求学生在认真复习教材的基础上,查阅相关资料、认真阅读相关的设计要求,独立按时完成任务;课程设计的说明书、论文要求简洁、通顺、计算正确,程序完整、清楚、规范。主要内容: 1、 了解c语言图形处理函数的图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数等。2、 重点考察抓取系统时间模块的使用。四、应收集的资料及主要参考文献: C程序设计 谭浩强 清华大学出版社C语言课程设计 梁旭 谷晓琳 黄明 电子工业出版社C语言课程设计郭翠英 中国水利水电出版社五、审核批准意见教研室主任(签字) 论文题目 红旗图案制作设计总说明 红旗图案的设计,集中了c语言的精华,它不仅涉及到正弦函数,还有图形的设计,最主要的是动态图形的设计,需要查询大量资料。 在该程序设计中,我们一开始,从基本的做起,先用“*”设计出一个矩形图样,发现与我们想要的效果差距太大,于是查资料设计一个迎风飘展的红旗!我们从c语言程序设计的一本书中了解到,通过编程可以输出任意你想要的图形!,这就需要掌握图形函数:arc函数(画弧线),drawpoly函数(化多边形)等等,当然它还可以让图形充满色彩!如,getbkcolor函数(获取当前北疆颜色),getcolor函数(获取当前绘图颜色)。 掌握这些之后,通过参考其他图形设计程序的方式我们最终设计出来。我们一个个单个设计。我们五个人分工明确,一个人用line函数画矩形,一个用getbkcolor函数和getcolor函数编写一个程序,输出一个圆,他的背景是白色的,里面是红色的,其他几个人寻找让正弦函数图像输出的程序最后,结合所有简单程序参考资料,设计出一个红旗图案。 在红旗图案制作当中,特别需要注意的是#define宏定义的使用 1. void InitDy(void)float ang;/*定义正弦曲线变化时所对应的角度*/int i;for (i=0;iWAVE_WID;i+)ang=(float)i/WAVE_WID*M_PI*2;/*角度的表达式*/Dyi=WAVE_HI*sin(ang);/*数组定义旗面浪的微小变量*/2.这一段是利用正弦函数制造出红旗波动,相当困难。背景颜色和旗面得设置void DrawFlag(int offset)int x,y,dy; int a,b,c,d;int i,l;setbkcolor(BACKCOLOR);/*设置背景颜色*/cleardevice();setcolor(FLAGCOLOR);/*设置旗面颜色*/for (i=0;iFLAG_WID;i+)x=FLAG_X+i;dy=Dy(i+offset)%WAVE_WID;y=FLAG_Y+dy;line(x,y,x,y+FLAG_HI);/*使用画直线函数画旗面*/3.在实现函数功能的过程中,我们运用了宏定义,循环语句,函数的调用。付: 宏定义定义红旗左上角的点坐标(FLAG_X, FLAG_Y),红旗旗面的宽(FLAG_WID)、高(FLAG_HI),飘动时红旗旗面浪的宽(WAVE_WID)、高(WAVE_HI),背景、旗面、旗杆的颜色(BACKCOLOR,FLAGCOLOR、SRTICKCOLOR)。具体的程序详见“红旗图案设计程序” 目 录1课程设计任务书22.论文题目33.红旗图案设计程序64.详细设计7 4.1函数模块7 4.1.1 宏定义8 1.不带参数的宏定义8 2.带参数的宏定义8 4.1.2 line()画线函数9 4.1.3 void()空函数9 4.1.4 画正弦函数10 4.1.5 graphics.h10 4.1.6 setcolor函数11 4.1.7 setbkcolor函数12 4.1.8 initgraph函数12 4.1.9 setactivepageh函数13 4.1.10 setvisualpage函数13 4.1.11 cleardevice函数13 4.1.12 closegraph函数134.2流程图模块14 4.2.1画红旗的流程图14 4.2.2画红旗旗杆的流程图15 4.2.3 正弦函数图象控制红旗波动流程图 164.3程序分析174.4调试分析175 总结186 参考文献19 3红旗图案设计程序程序如下:#include #include #include /*包含头文件*/#define FLAG_X 10#define FLAG_Y 50#define FLAG_WID 300#define FLAG_HI 180#define WAVE_WID 100#define WAVE_HI 5#define BACKCOLOR CYAN#define FLAGCOLOR RED#define STRICKCOLOR BLUE /*运用宏定义定义所用字符串*/int DyWAVE_WID;void InitDy(void)float ang; /*定义正弦曲线变化时所对应的角度*/int i;for (i=0;iWAVE_WID;i+)ang=(float)i/WAVE_WID*M_PI*2; /*角度的表达式*/Dyi=WAVE_HI*sin(ang); /*数组定义旗面浪的微小变量*/void DrawFlag(int offset) int x,y,dy, a,b,c,d; int i,l;setbkcolor(BACKCOLOR); /*设置背景颜色*/cleardevice();setcolor(FLAGCOLOR); /*设置旗面颜色*/for (i=0;iFLAG_WID;i+) 画红旗的程序x=FLAG_X+i;dy=Dy(i+offset)%WAVE_WID;y=FLAG_Y+dy;line(x,y,x,y+FLAG_HI); /*使用画直线函数画旗面*/setcolor(STRICKCOLOR); /*设置旗杆颜色*/for(l=0;l=WAVE_WID) off-=WAVE_WID; closegraph(); /*退出图形状态*/ 4.详细设计 4.1函数模块4.1.1宏定义 宏定义:宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译 1. 不带参数的宏定义: 宏定义又称为宏代换、宏替换,简称“宏”。 格式: #define标识符 字符串其中的标识符就是所谓的符号常量,也称为“宏名”。预处理工作也叫做宏展开:将宏名替换为字符串。 掌握宏概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。 即在对相关命令或语句的含义和功能作具体分析之前就要换: 例:#define PI3.1415926把程序中出现的PI全部换成3.1415926 说明: (1)宏名一般用大写 (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义 (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。 (4)宏定义末尾不加分号; (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。 (6)可以用#undef命令终止宏定义的作用域. (7)宏定义可以嵌套 (8)字符串 中永远不包含宏 (9)宏定义不分配内存,变量定义分配内存。 2带参数的宏定义: 除了一般的字符串替换,还要做参数代换 格式: #define 宏名(参数表) 字符串 例如:#define S(a,b) a*b area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2; 类似于函数调用,有一个哑实结合的过程: (1)实参如果是表达式容易出问题 #define S(r) r*r area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b; 正确的宏定义是#define S(r) (r)*(r) (2)宏名和参数的括号间不能有空格 (3)宏替换只作替换,不做计算,不做表达式求解 (4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存 (5)宏的哑实结合不存在类型,也没有类型转换。 (6)函数只有一个返回值,利用宏则可以设法得到多个值 (7)宏展开使源程序变长,函数调用不会 (8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值) 4.1.2 line()画线函数Line()画线函数:功能: 函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。 用法: 该函数调用方式为void line(int startx,int starty,int endx,int endy); 说明: 参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。 此函数相应的头文件为graphics.h 返回值: 无 4.1.3 void()空函数void含义void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,定义一个void变量没有意义,不妨试着定义: void a; 这行语句编译时会出错,提示“illegal use of type void”。不过,即使void a的编译不会出错,它也没有任何实际意义。 void真正发挥的作用在于: (1) 对函数返回的限定; (2) 对函数参数的限定。 4.1.4 画正弦函数#include #include void main()double y;int x,m;for(y=1;y=0;y-=0.1)m=asin(y)*10;for(x=1;xm;x+)printf( );printf(*);for(;x31-m;x+)printf( );printf(*n);for(y=0;y=1;y+=0.1)m=asin(y)*10;for(x=1;x33+m;x+)printf( );printf(*);for(;x64-m;x+)printf( );printf(*n); 4.1.5 graphics.h 是TC里面的图形库,如果要用的话应该用TC来编译,VC+有他自己的另外图形库。分为:像素函数、直线和线型函数、多边形函数、填充函数等。直线和线型函数有三个画直线的函数,即line(),lineto(),linerel()。这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。 有两种线宽及几种线型可供选择,也可以自己定义线图样。下面分别介绍直线和线型函数。 4.1.6 setcolor函数setcolor-C库函数 图形屏幕函数 说明 函数原型:void setcolor(int color) 功能:将当前图形屏幕的当前笔画颜色置为color.附表:有关屏幕颜色的符号常数表符号常数 数值 含义 符号常数 数值 含义BLACK 0 黑色 DARKGRAY 8 深灰BLUE 1 兰色 LIGHTBLUE 9 深兰GREEN 2 绿色 LIGHTGREEN 10 淡绿CYAN 3 青色 LIGHTCYAN 11 淡青RED 4 红色 LIGHTRED 12 淡红MAGENTA 5 洋红 LIGHTMAGENTA 13 淡洋红BROWN 6 棕色 YELLOW 14 黄色LIGHTGRAY 7 淡灰 WHITE 15 白色该程序画的是一个边框为红色的矩形:#include#includeint main(void)int graphdriver=DETECT,graphmode;int color;initgraph(&graphdriver,&graphmode, );color=RED;sectcolor(color);line (250,150,350,250);line (350,150,250,250);rectangle (250,150,350,250);getch();closegraph();return 0; 4.1.7 setbkcolor函数函数功能该函数用指定的颜色值来设置当前的背景色,如果指定的颜色值超出了当前设备的表示范围,则设置为最近似的、设备可以表示的颜色。 函数原型COLORREF SetBkColor( HDC hdc, COLORREF crColor ); 参数说明hdc: 设置上下文句柄 crColor: 标识新的背景颜色值。如果想要获得COLORREF的值,请使用RGB宏。 返回值如果函数成功,返回值是原背景色的COLORREF值。如果函数失败,则返回CLR_INVALID。想要获得更多信息,请调用GetLastError函数。 C语言函数 initgraph(&gdriver, &gmode, );int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, ); 作用:装入图形驱动,设置屏幕模式为图形模式第一个参数为指定的图形驱动程序第二个为图形驱动模式,如分辨率,调色板等第三个为驱动程序位置 4.1.8 initgraph函数函数名: initgraph() 功 能: 初始化图形系统 函数原型: void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver);graphdriver是上涨指向图形驱动序号变量的指针;graphmode是在graphdriver选定后,指向图形显示模式序号变量的指针。pathtodriver表示存放图形驱动文件的路径。 4.1.9 setactivepageh函数 函数名:setactivepage 功 能: 设置图形输出活动页 用 法: void far setactivepage(int pagenum); 4.1.10 setvisualpage函数函数名: setvisualpage 功 能: 设置可见图形页号 用 法: void far setvisualpage(int pagenum) 4.1.11 cleardevice函数函数名: cleardevice 功 能: 清除图形屏幕内容,并将当前点位置设置为远点(0,0),但是其他的图形系统设置保持不变,如:线型充填模式等。如果设置了试图区,则试图去的设置不变,当前点位置设置在视图区的左上方。用 法: void far cleardevice(void); 4.1.12 closegraph函数closegraph的内函数名: closegraph 功 能: 关闭图形系统 ,释放用于保存图形驱动程序和字体所占存。当一个程序需从图形模式下退出,而且回到文本模式下继续运行时,调用该函数。用 法: void far closegraph(void); 4.2流程图模块4.2. 1.画红旗的流程图: 开始I=1I=i+1iFLAG_WIDX=FLAG-X+idy=DY【(i+offset)%WAVE_WID】y=FLAG-Y+dyLine(x,y,x,y+FLAG-HI结束4.2.2画红旗旗杆的流程图开始 l=0;N l=WAVE_WID) /*图形波动*/off-=WAVE_WID; closegraph(); /*退出图形状态*/ 4.4调试分析#include #include #include #define FLAG_X 10 #define FLAG_Y 50 #define FLAG_WID 300 #define FLAG_HI 180 #define WAVE_WID 100 #define WAVE_HI 5 #define BACKCOLOR CYAN #define FLAGCOLOR RED int DyWAVE_WID; void InitDy(void) float ang; int i; for (i=0;iWAVE_WID;i+) ang=(float)i/WAVE_WID*M_PI*2; Dyi=WAVE_HI*sin(ang); void DrawFlag(int offset) int x,y,dy; int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论