中南大学c语言课程设计报告(共16页).doc
精选优质文档-倾情为你奉上学号中南大学C语言程序设计课程设计报告 题 目:数据的图形化处理 学 院: 专 业: 班 级: 姓 名: 指导老师: 2015年1月3日目录1 设计内容及要求31.1设计要求3 1.2程序设计流程图32 详细设计5 2.1详细设计52.2数据结构与程序评析72.3用法说明83 设计结果与分析83.1调试与测试83.2测试结果与分析84 小结(心得体会)115 附录121设计内容及要求1.1设计要求用c语言绘图函数绘制函数图像;要根据输入的信息,用c语言画出相应函数y=sin(x),y=cos(x),.;画出的点数为N个,即N个像素点;可以不画出坐标值,N的值要大于20。程序界面设计合理,色彩得体大方,显示正确,界面清晰、美观。1.2程序设计流程图开始输出可选函数列表设置背景色和线条色画出坐标轴关闭图像处理系统绘制基本初等函数标记坐标轴和原点设置文本属性结束 图1:总程序流程开始float i,x0,y0,x,y; int a,b; int gd=DETECT,gm; 结束getch();closegraph();case1 case2 .Putpixel(x,y,RED);break; defaultswitch for(b=0;b<=20;b+) initgraph(&gd,&gm,""); printf line settextstyle outtextxy 图2:总程序流程图2详细设计2.1详细设计(1)#include<stdio.h>调用系统提供的标准库函数 #include<math.h>调用math库文件里的函数 #include<conio.h>调用通过控制台进行数据输入和数据输出的 #include<graphics.h>调用图像处理函数(2)main() float i,x0,y0,x,y; int a,b; int gd=DETECT,gm;定义变量(3) for(b=0;b<=20;b+) 实现程序的多次循环使用(4)initgraph(&gd,&gm,"");初始化图形系统(5)printf("Choose a function to see its functional image!n"); printf("1.y=xn"); printf("2.y=sinxn"); printf("3.y=cosxn"); printf("4.y=exn"); printf("5.y=log(e)(x)n"); printf("6.y=x2n"); printf("7.y=tanxn"); printf("Number 1-7,just try them!n"); printf("Please enter number:");输出一个基本初等函数可选列表 scanf("%d",&a);输入一个整型变量(6)cleardevice();清除屏幕和图形缓冲区 setbkcolor(WHITE);设置背景色 setcolor(GREEN);设置前景颜色 line(100,350,100,180); line(95,190,100,180); line(100,180,105,190); line(40,250,500,250); line(495,245,500,250); line(500,250,495,255);画坐标轴和箭头 settextstyle(SANS_SERIF_FONT,HORIZ_DIR,1);设置字体 outtextxy(500,250,"x");标记x轴 outtextxy(110,180,"y");标记y轴 outtextxy(90,245,"o");标记原点(7)switch(a)实现多分支选择 case 1:第一种情况 for(x0=0;x0<=21;x0+=1) y0=x0;要画出的函数表达式 x=6*x0+100; x,y的坐标控制,使点落在屏幕适当位置 y=-6*y0+250; putpixel(x,y,RED);画点函数,画出红色像素点 break;跳出多分支选择结构 case 2:第二种情况 for(x0=0;x0<=10*3.14159;x0+=0.1) y0=50*sin(x0+2*3.14159);正弦函数 x=10*x0+100; y=-y0+250; putpixel(x,y,RED); break; case 3:第三种情况 for(x0=0;x0<=10*3.14159;x0+=0.1) y0=50*sin(x0+3.14159/2);余弦函数 x=10*x0+100; y=-y0+250; putpixel(x,y,RED); break;.其他常见函数 default:printf("Enter data error!n");否则输出数据错误提示 (8) getch();从控制台读取一个字符,但不显示在屏幕上,等待你按下任意键,再继续执行下面的语句 closegraph();关闭图形系统 2.2数据结构与程序评析(1) 对图形处理函数作比较全面的分析,即对程序要使用的编写方法功能,运行方式进行分析,并作出正确的解决方案。(2) 程序并不是很复杂,但程序的编写是一项困难的任务,完成此程序必须运用书中和网络上的很多知识,而且要有清晰的思路和较强的语言组织能力。(3) 程序的检查和系统的调用。当程序运行后,显示出规定好的函数图像。2.3用法说明(1) 用编辑程序把编制的源程序按照一定的书写格式送到计算机中。(2) 把送入的源程序翻译成机器语言,即用编译程序对源程序进行编译,并将符合语法规则的源程序语句翻译成计算机能识别的语言。(3) 使用计算机中的连接程序,把翻译好的计算机语言程序连接起来,并扶植成一个计算机能真正运行的程序。(4) 将修改后的程序运行,以后使用时双击相应exe文件即可。3 设计结果与分析3.1调试与测试调试方法:多次运行源程序,找出tc提示的错误,修改后再次运行,直至无错误时再对源程序进行简单优化。问题:源程序中变量数据类型错误,语句位置错误,导致编译时出现错误,执行不出结果。经分析后修改,程序成功运行。如果该程序没有在C语言环境下运行,那么程序运行的结果: BGI ERROR:Graphics not initialized!(use initgraoph) 这是因为编程的时候没有把图形的驱动和程序一起编译,程序在脱离C语言环境后找不到驱动。要使程序能够脱离C语言环境运行,就要使程序和图形驱动一起编译。在DOS命令提示符下运行下列命令: c:tcbgi>bgiobj egavga (把图形驱动编译成相应的库文件) c:tctclibgraphics.lib+tcbgiegavga (把图形驱动的库文件和系统库文件graphics.lib连接组成新的库文件) 在源程序的initgraph()函数前加入下列语句: registerbgidriver(EGAVGA_driver); (在程序中注册图形驱动)此问题得以解决。如没有遇到此结果,则不需要执行此操作。3.2测试结果与分析程序初始界面函数图像数据不符合要求时显示 程序运行成功,得到预期结果。4小结(心得体会) 刚开始做的时候我只懂得一些雷老师讲过的基本函数,对图形处理函数什么都不懂,更别说做了。不过参考了很多资料,在网站上查找,并思考理解了较长时间,才对图形处理函数有了基本的认识和把握,能实现一些简单应用,因为是自己亲自学习并制作的,并非抄袭,虽然遇到了不少的困难,但心里还是蛮有成就感的,希望把c语言学通的信心更足了。经过多次上机实践学习,我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它。我所懂得的更重要的是,程序设计需要大量的理解和应用,有些没有学过的知识不一定非要一字不差掌握,会理解运用才是重点,不能急于求成!计算机编程大大简化了我们生活中的很多复杂繁琐的工作,实现了简单化,自动化。这大大增加了我学习这门课程的兴趣。计算机的发展趋势越来越快,我相信计算机在将来能更好地为人类服务。我清楚地知道这次的程序还有很多可以优化的地方,没有最好,只有更好!因此我一定会积极地学习这门课程,充分发挥这门课程的作用,查找更多的可用资源,用来补偿我的不足。5附录参考文献【1】谭浩强 C语言程序设计(第四版)清华大学出版社【2】李丽娟,马淑萍 C语言程序设计(第二版)中国铁道出版社【3】王正仲 21天学通C语言人民邮电出版社【4】 凯尼格 C陷阱与缺陷人民邮电出版社源代码#include<stdio.h>#include<math.h>#include<conio.h>#include<graphics.h>main() float i,x0,y0,x,y; int a,b; int gd=DETECT,gm; for(b=0;b<=20;b+) initgraph(&gd,&gm,""); printf("Choose a function to see its functional image!n"); printf("1.y=xn"); printf("2.y=sinxn"); printf("3.y=cosxn"); printf("4.y=exn"); printf("5.y=log(e)(x)n"); printf("6.y=x2n"); printf("7.y=tanxn"); printf("Number 1-7,just try them!n"); printf("Please enter number:"); scanf("%d",&a); cleardevice(); setbkcolor(WHITE); setcolor(GREEN); line(100,350,100,180); line(95,190,100,180); line(100,180,105,190); line(40,250,500,250); line(495,245,500,250); line(500,250,495,255); settextstyle(SANS_SERIF_FONT,HORIZ_DIR,1); outtextxy(500,250,"x"); outtextxy(110,180,"y"); outtextxy(90,245,"o"); switch(a) case 1: for(x0=0;x0<=21;x0+=1) y0=x0; x=6*x0+100; y=-6*y0+250; putpixel(x,y,RED); break; case 2: for(x0=0;x0<=10*3.14159;x0+=0.1) y0=50*sin(x0+2*3.14159); x=10*x0+100; y=-y0+250; putpixel(x,y,RED); break; case 3: for(x0=0;x0<=10*3.14159;x0+=0.1) y0=50*sin(x0+3.14159/2); x=10*x0+100; y=-y0+250; putpixel(x,y,RED); break; case 4: for(x0=0;x0<=21;x0+=0.1) y0=pow(2.71828,x0); x=10*x0+100; y=-y0+245; putpixel(x,y,RED); break; case 5: for(x0=0.1;x0<=21;x0+=0.1) y0=log(x0)/log(1.1); x=10*x0+100; y=-y0+250; putpixel(x,y,RED); break; case 6: for(x0=0.1;x0<=21;x0+=0.1) y0=pow(x0,2); x=10*x0+100; y=-y0+250; putpixel(x,y,RED); break; case 7: for(x0=0.1;x0<=5*3.14159;x0+=0.05) y0=50*tan(x0); x=25*x0+100; y=-y0+250; putpixel(x,y,RED); break; default:printf("Enter data error!n"); getch(); closegraph(); 专心-专注-专业