动态函数图像演示-C语言课程设计实验报告(含源码).doc_第1页
动态函数图像演示-C语言课程设计实验报告(含源码).doc_第2页
动态函数图像演示-C语言课程设计实验报告(含源码).doc_第3页
动态函数图像演示-C语言课程设计实验报告(含源码).doc_第4页
动态函数图像演示-C语言课程设计实验报告(含源码).doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

C语言课程设计实验报告 题 目:动态函数图像演示 学 院:软件学院 指 导 老 师: 学 号: 姓 名: 2012年9月3号9月17日 一、实验题目及要求 画出函数y=a*x2+b*x+c 的曲线图形 (1)设置对话框确定函数参数 (2)设置对话框确定曲线的粗细 (3)设置对话框确定曲线的颜色 (4)画出一个小人沿着曲线轨迹移动,并画出曲线图形 (5)将画出的图形保存为jpg格式,并要求可以用其他看图软件打开 二、程序主要流程 (1)建立首界面(即为进入或退出画图软件) (2)设定对话框依次确定函数参数,曲线粗细,曲线颜色 (3)初始化画图系统画出坐标系与曲线 (4)建立动态画图函数 (5)建立保存与打开图形的函数 三、在程序中遇到的困难及解决方案 在构建首界面时运用了通过读取键盘值来控制光标的移动达到进入或退出看图软件。在使用键盘值时, 由老师给出的资料可以得知,为键盘头文件,bioskey(1)=0为读取键盘值,并且得到了 key_up 72 key_esc 1 Key_enter 28 key_down 80为获取到的键盘值。 例: int get_key() /*设定键盘控制*/ union REGS rg; rg.h.ah=0; int86(0x16,&rg,&rg); return rg.h.ah; getchar(); 在设置第一个对话框时,从TC-2.0函数软件查询中搜查到了 window为建立字符模式下的矩形字符窗口, textbackground为设置字符模式下的背景颜色,textcolor为设置字符模式下的字符颜色,由此解决了在 字符模式下对话框背景及字符的颜色设置,gotoxy为将当前字符屏幕的光标位置移动到x,y坐标位置, gettext为保存矩形屏幕上的字符,puttext为将gettext函数保存的字符恢复到屏幕上,由此解决了在合 适的位置上输入字符的问题。上述函数名均在头文件中。画图像时由老师给出的资料了中解到 gdriver = DETECT;registerbgidriver(EGAVGA_driver);initgraph(&gdriver, &gmode,);为注册已连接 的图形驱动器程序和初始化图形系统,并且其头文件为。画曲线时,主要思路为通过画出一 个个点来组成曲线图形,用到的函数名称为circle(画圆圈)。设置动态图画时用到了 头文件以及 函数名delay。在编写保存和打开图像时遇到了困难,通过询问老师和上网查资料找到了解决办法。 例: void save() /*储存图形函数*/ int i,j; /*i,j代表像素所在坐标*/ FILE *fp; /*声明一个文件地址*/ char fileName20; /*filename代表文件名被储存的所在数组*/ window(1,1,80,80); gotoxy(1,1); /*将当前字符屏幕的光标位置移动到(1,1)坐标*/ printf(52 Input The File Name.dat To Be Saved:); /*输入要被保存图像所在的文件名并储存*/ scanf(%s,fileName); window(1,1,80,80); if(fp=fopen(fileName,w+)=NULL) /*以读写的方式打开文件*/ outtextxy(260,455,Failed to open file!); /* 图形模式下在x,y坐标位置显示一行字符串*/ exit(0); outtextxy(500,455,saving.); for(i=5;i630;i+) /*保存像素到文件*/ for(j=30;j=445;j+) fputc(getpixel(i,j),fp); fclose(fp); window(1,1,80,80); outtextxy(500,455,Save Over!); 3、 心得体会 经过了为期一周的c语言课程设计后,我学到了很多知识。以前总是注重理论知识,并没有能够很好的掌握这门课程。本次课设让我们进行实际操作的同时还巩固了上一学期的知识,而且还加深了对c语言的熟练掌握。但在这期间也遇到了困难,懂得了自己掌握的知识还不能够灵活运用。课设让我明白了自己的不足之处:缺乏实践经验。所以要平时应该多多动手,锻炼思维能力,积累自己的编码经验,为以后打好坚实的基础。 四、课设结果及总结 执行程序后,结果无误。画图程序可通过对话框来控制函数参数,曲线的粗细,曲线的颜色。并画出了动态的函数图像,而且能够将图像储存到文件中和打开图像文件。在完成课设时,通过查阅资料了解到了很多以前没有接触过的函数名,学习到了很多新的知识,而且已经可以熟练的应用它们来编写程序。但在编写程过程中,出现了编写程序思路不清晰的不足之处,我会在以后的学习中加强这方面的能力。 五、程序代码及注释 #include #include #include /*textcolor,clrscr,wherex.y等的头文件*/#include #include /*键盘*/#include /*时间函数*/#define key_down 80 /*键盘值*/#define key_up 72 #define key_esc 1 #define key_enter 28int get_key(); /*获取键盘值函数*/int width = 500, height = 500; /*图形坐标系的大小*/int left = 20, top = 20;void save(); /*保存图像函数*/void load(); /*打开图像函数*/void main() int m,n,radius,form,hue,key,y; /*m,n 分别代表linestyle数组中的元素次序和元素在屏幕中的纵坐标*/ /*radius代表所画曲线的粗细*/ /* form代表所画曲线的形式*/ /* hue代表曲线的颜色*/ /* key代表键盘值*/ /* y代表首页界面中字符屏幕的纵坐标*/ int gdriver, gmode, i, j,num,time; /*griver,gmode代表初始化图形系统中的变量*/ /*i,j代表构建坐标系时表格的宽度与高度*/ /*num代表坐标系中的坐标刻度*/ /*time代表坐标刻度的纵轴刻度*/ float abc,ord,zong,hen,heng; /*abc代表画曲线时依次取得的自变量的值*/ /*ord代表所画曲线的应变量*/ /*zong,heng代表曲线的顶点坐标*/ char buf20*20*4; /*buf代表缓冲区的存储量*/ char*homepage=Enter,Exit; / *首界面的“进入”与“退出*/ char*menu=Parameter , Thickness Of Curve, Color; /*各个对话框的内容*/ char *argument= value of a , value of b , value of c ; /*在第一个对话框中输入函数参数的值*/ char *factor=a,b,c; /* 函数参数的储存地址*/ /* char *linestyle=SOLID_LINE = 0,DOTTED_LINE = 1,CENTER_LINE = 2,DASHED_LINE = 3,USERBIT_LINE = 4; /*在第二个对话框中输入所画曲线的形式*/ char *color=black,blue,green,bluish green,brown,purple,daris yellow, /*在第三 gray; /*第三个个对话框中输入曲线的颜色*/ textbackground(3); /*构建首界面*/ /* textcolor(0); /*设置字符模式下的字符颜色*/ clrscr(); gotoxy(18,10); printf(THE SOFTWARE OF PICTURE); gotoxy(30,14); printf(%s,homepage0); gotoxy(30,16); printf(%s,homepage1); gettext(10,8,60,16,buf); /*保存矩形屏幕上的字符*/ key=0; while(1) while(bioskey(1)=0); /*读取键盘值*/ key=get_key(); /*获取键盘值*/ if(key=key_enter&y=16) exit(0); /*在首界面中选择“Exit”程序退出*/ if(key=key_up|key=key_down) /*设定键盘控制光标的移动得意实现对“Enter”或Exit的选择*/ y=wherey(); /*得到字符模式下窗口光标的y坐标数值*/ if(key=key_up) /*实现up键盘控制光标上移的功能*/ y=y=14? y-2:14; if(key=key_down) /*实现down键盘控制光标下移的功能*/ y=y=16? y+2:16; puttext(10,8,60,16,buf); /*将gettext函数保存的字符恢复到屏幕上*/ gotoxy(30,y); /*将当前字符屏幕的光标位置移动到(30,y)坐标*/ if(y=14) textbackground(0); /*设置字符模式下的背景颜色*/ textcolor(6); /*设置字符模式下的字符颜色*/ gotoxy(30,y); cprintf(%s,homepage0); if(y=16) textbackground(0); textcolor(6); gotoxy(30,y); cprintf(%s,homepage1); if(key=key_enter&y=14) /*实现选择“Enter”进入程序的功能*/ window(1,1,80,25); /*建立字符模式下的矩形字符窗口*/ clrscr(); textbackground(14); textcolor(0); clrscr(); window(12,6,70,20); printf(Please Input The %s,menu0); /*关于函数参数的对话框*/ gotoxy(10,4); /*将当前字符屏幕的光标位置移动到(10,4)坐标*/ printf(*); for(m=0,n=6;m3;m+,n+) /*实现依次输入函数参数a,b,c的值并储存的功能*/ gotoxy(12,n); printf(52 %s : ,argumentm); scanf(%d,factorm); gotoxy(10,10); /*将当前字符屏幕的光标位置移动到(10,10)坐标*/ printf(*); gotoxy(14,14); /*将当前字符屏幕的光标位置移动到(14,14)坐标*/ printf(5 The Function Of Curve : Y=%d*X2+%d*X+%d ,*factor0,*factor1,*factor2); /*显示出函数的表达式*/ getch(); clrscr(); window(12,6,70,20); printf(Please Input The %s,menu1); /*关于曲线形式的对话框*/ gotoxy(10,4); /*将当前字符屏幕的光标位置移动到(10,4)坐标*/ printf(*); for(m=0,n=6;m5;m+,n+) /*实现依次输出曲线形式的选项*/ gotoxy(12,n); printf(52 %s ,linestylem); gotoxy(10,12); /*将当前字符屏幕的光标位置移动到(10,12)坐标*/ printf(*); gotoxy(14,14); printf(5 The Linestyle Of Curve : ); /*实现输入曲线形式并储存的功能*/ scanf(%d,&form); if(form=4) clrscr(); window(12,6,70,20); printf(Please Intput The Thickness); /*关于曲线粗细的对话框*/ gotoxy(10,4); printf(*); gotoxy(12,6); printf(52 norm_width = 1); gotoxy(12,8); printf(52 thick_width = 3); gotoxy(10,10); printf(*); gotoxy(19,14); printf(5 The Thickness Of Curve : ); / *实现输入曲线粗细并储存的功能*/ scanf(%d,&radius); clrscr(); window(12,6,70,20); printf(Please Input The %s,menu2); /*关于曲线颜色的对话框*/ gotoxy(10,4); /*将当前字符屏幕的光标位置移动到(10,4)坐标*/ printf(*); for(m=0,n=6;m6;n+) /*输出曲线颜色的选项*/ gotoxy(12,n); printf(52 %d - %s,m,colorm); printf( 52 %d - %s,m+1,colorm+1); m=m+2; gotoxy(12,9); printf(52 6 - %s,color6); printf( 52 7 - %s,color7); gotoxy(10,11); printf(*); gotoxy(19,14); printf(5 The Colors Num Of Curve : ); /*实现输入曲线颜色并储存的功能*/ scanf(%d,&hue); gdriver = DETECT; registerbgidriver(EGAVGA_driver); /*注册已连接的图形驱动器程序*/ initgraph(&gdriver, &gmode, ); /*初始化图形系统*/ setcolor(1); /*设置前景颜色*/ for (i = left; i = height * 2; i += 10) /*建立坐标系*/ line(i, top, i, width * 2); for (i = top; i 0;num-) /*设定横坐标轴上的负数刻度*/ printf(-%d,num); for(num=0;num0;time+,num-) /*设定纵坐标轴上的刻度*/ gotoxy(39,time); printf(%dn,num); gotoxy(39,25); printf(-1); for(abc=0;abc37;) /*绘制函数表达式所表示的曲线*/ ord=-(*factor0)*abc*abc-(*factor1)*abc-(*factor2); /*代表函数表达式*/ zong=(*factor1)/(*factor0)*0.5; /*代表曲线的顶点坐标*/ hen=4*(*factor0)*(*factor2)-(*factor1)*(*factor1); heng=hen/(*factor0)*0.25; setcolor(hue); if(form=4) /*实现按照函数表达式逐个画点构成曲线的功能*/ circle(300-abc)-(zong*16),(ord*0.2)+360-(heng*14),radius); circle(abc+300)-(zong*16),(ord*0.2)+360-(heng*14),radius); if(form!=4) form=form*0.5; circle(300-abc)-(zong*16),(ord*0.2)+360-(heng*14),form); circle(abc+300)-(zong*16),(ord*0.2)+360-(heng*14),form); abc=abc+0.02; delay(100); /*实现曲线动态效果的功能*/ save(); /*实现储存图像的功能*/ getch(); system(cls); load(); /*实现打开图像的功能*/ getch(); closegraph; /*关闭图形工作方式*/ exit(0); int get_key() /*设定键盘控制*/ union REGS rg; rg.h.ah=0; int86(0x16,&rg,&rg); return rg.h.ah; getchar();void save() /*储存图形函数*/ int i,j; /*i,j代表像素所在坐标*/ FILE *fp; /*声明一个文件地址*/ char fileName20; /*filename代表文件名被储存的所在数组*/ window(1,1,80,80); gotoxy(1,1); /*将当前字符屏幕的光标位置移动到(1,1)坐标*/ printf(52 Input The File Name.dat To Be Saved:); /*输入要被保存图像所在的文件名并储存*/ scanf(%s,fileName); window(1,1,80,80); if(fp=fopen(fileName,w+)=NULL) /*以读写的方式打开文件*/ ou

温馨提示

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

评论

0/150

提交评论