绘制函数曲线 c语言 课程设计 报告.docx
《绘制函数曲线 c语言 课程设计 报告.docx》由会员分享,可在线阅读,更多相关《绘制函数曲线 c语言 课程设计 报告.docx(10页珍藏版)》请在冰豆网上搜索。
绘制函数曲线c语言课程设计报告
沈阳航空工业学院
课程设计
学号:
200604021109
班级:
6402104
姓名:
王穷杰
指导教师:
刘成
2007年9月17日
沈阳航空工业学院
课程设计任务书
院系:
电子工程系专业:
电子信息工程班级:
6402104班
学号:
200604021109课程设计题目:
绘制函数曲线
一、课程设计工作自2007年9月10日起至2007年9月14日止
二、课程设计内容:
用C语言编写软件完成以下任务:
在图形模式下,绘制一元二次函数ax2+bx+c.其中系数a,b,c,以及X的取值范围,均由用户从键盘输入。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“选择菜单”、“输入X区间”、“开始绘制”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩:
六、教师评语:
目录
程序设计题目1
题目分析1
总体设计1
模块设计2
关键技术分析2
完整的源程序3
总结:
7
程序设计题目:
绘制函数曲线。
具体要求如下:
在图形模式下,绘制一元二次函数ax2+bx+c。
其中系数a,b,c,以及x的取值范围,均由用户从键盘输入。
用户界面中的菜单至少应包括“输入系数”“输入x的曲间”“开始绘制”“退出”
题目分析:
经过对程序设计题目的分析可知,整个程序的设计实现大致分为:
绘制坐标,绘制图形。
在绘制坐标中,关键步骤是将笛卡儿坐标转化成屏幕坐标。
总体设计:
图1整体框架图:
模块设计
图2坐标转换:
fun3
initgraph(&graphdriver,&graphmode,"")
max_x=getmaxx();max_y=getmaxy()
绘制坐标
x1=max_x/2+xmin*coe_x,y1=max_y/2-(a*xmin*coe_x*xmin*coe_x+b*xmin*coe_x+c)*coe_y
moveto((int)x1,(int)y1)
for(x=xmin*coe_x;x<=xmax*coe_x;x++)
x2=max_x/2+x,y2=max_y/2-(a*x*x+b*x+c)*coe_y;lineto((int)x2,(int)y2);
关键技术分析
显示器设定:
intgraphdriver=DETECT,graphmode
图形初始化:
initgraph(&graphdriver,&graphmode,"")
求出屏幕的最大横,纵坐标大小:
max_x=getmaxx();max_y=getmaxy()
绘制坐标轴:
line(0,240,640,240);画直线
line(320,0,320,480);
line(640,240,635,235);
line(640,240,635,245);
line(320,0,315,5);
line(320,0,325,5);
outtextxy(320,240,"(0,0)");在固定点输出字符串
outtextxy(620,240,"x");
outtextxy(320,10,"y");
坐标之间的转换:
x1=max_x/2+xmin*coe_x,y1=max_y/2-(a*xmin*coe_x*xmin*coe_x+b*xmin*coe_x+c)*coe_y;
moveto((int)x1,(int)y1);
for(x=xmin*coe_x;x<=xmax*coe_x;x++)
{
x2=max_x/2+x,y2=max_y/2-(a*x*x+b*x+c)*coe_y;
lineto((int)x2,(int)y2)
目录选择功能的实现:
switch(n)
{
case1:
fun1();break;
case2:
fun2();break;
case3:
fun3();break;
case4:
exit(0);
default:
printf("\nerror\n")
图3数据的输入
完整的源程序
#include
#include
floata,b,c,xmin,xmax,max;/*定义全局变量*/
voidmenu()
{printf("\n************************************WELCOME***********
**************************\n");
printf("\n1.inputcoefficient");
printf("\n2.inputextent");
printf("\n3.drawfunctioncurve");
printf("\n4.quit");
printf("\n***************************************************
*****************************\n");
}
fun1()
{
printf("inputa,b,c\n");
scanf("%f,%f,%f",&a,&b,&c);/*输入系数a,b,c*/
}
fun2()/*输入x范围*/
{
printf("inputxmin,xmax\n");
scanf("%f,%f",&xmin,&xmax);
}
funmax()/*求出x轴最大范围*/
{
floatm,n;
if(xmin<0)
m=-xmin;
else
m=xmin;
if(xmax<0)
n=-xmax;
else
n=xmax;
if(m>=n)
max=m;
else
max=n;
}
floatfunx(floatmax_x)/*求出x轴对应系数*/
{
return(max_x/2/max);
}
floatfuny(floatmax_y)/*求出y轴对应系数*/
{
floatd;
d=max_y/2/(a*max*max+b*max+c);
if(d>0.6)
d=0.6;
if(d<0.0026)
d=0.0026;
return(d);
}
fun3()
{
intmax_x,max_y;
intgraphdriver=DETECT,graphmode;
floatx1,y1,x2,y2,x,coe_x,coe_y;
initgraph(&graphdriver,&graphmode,"");/*图形初始化*/
cleardevice();/*清屏*/
max_x=getmaxx();/*求出屏幕最大横坐标*/
max_y=getmaxy();/*求出屏幕最大横坐标*/
funmax();
coe_x=funx(max_x);
coe_y=funy(max_y);
line(0,240,640,240);/*画直线*/
line(320,0,320,480);
line(640,240,635,235);
line(640,240,635,245);
line(320,0,315,5);
line(320,0,325,5);
outtextxy(320,240,"(0,0)");/*在固定点输出字符串*/
outtextxy(620,240,"x");
outtextxy(320,10,"y");
x1=max_x/2+xmin*coe_x,y1=max_y/2-(a*xmin*coe_x*xmin*coe_x+b*xm
n*coe_x+c)*coe_y;
moveto((int)x1,(int)y1);
for(x=xmin*coe_x;x<=xmax*coe_x;x++)
{
x2=max_x/2+x,y2=max_y/2-(a*x*x+b*x+c)*coe_y;
lineto((int)x2,(int)y2);
}
getch();
closegraph();/*关闭图形函数*/
}
main()
{
intn;
menu();
while
(1)
{
scanf("%d",&n);
switch(n)
{case1:
fun1();break;
case2:
fun2();break;
case3:
fun3();break;
case4:
exit(0);
default:
printf("\nerror\n");
}
}
总结:
这次课程设计,加强了我对c语言的了解。
课程设计所面临的问题都是一些实际问题,在完成的过程中,解决实际问题的能力就很重要,还有一些是以前在课堂上没有学过的知识,这就要求我们去查一些资料,并学习。
虽然个人的程序不同,但还需要与别人的合作,因为我还有些不明白的知识,尤其是自学的知识,运用还不熟练,特别需要虚心的请教老师。
因此,老师在这次实践过程中给了我很大的帮助。
总之,这次课程设计带给我的不仅仅是完成后的喜悦,而是对我以后学习起到了很大的帮助。
今后的学习中,还会遇到很多没学过的知识,就要求我们去自主学习,去了解,去充实自己的知识,作一个有学识的人!