73绘制2条相交直线.docx
- 文档编号:4726576
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:13
- 大小:65.34KB
73绘制2条相交直线.docx
《73绘制2条相交直线.docx》由会员分享,可在线阅读,更多相关《73绘制2条相交直线.docx(13页珍藏版)》请在冰豆网上搜索。
73绘制2条相交直线
沈阳航空工业学院
课程设计
学号200704033073
班级7403302
姓名喻艳平
指导教师王晓岩
2009年3月5日
沈阳航空工业学院
课程设计任务书
院系:
航宇系专业:
飞行器设计与工程班级:
7403302
学号:
200704033073题目:
绘制2条相交直线
一、课程设计时间
2009年2月24日至2009年2月28日,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
已知有两条直线。
其中L1经过的2点坐标分别为(2,0.5),(8,-8.5);L2经过的2点坐标分别为(2.5,3),(8.5,7)。
请在屏幕上画出此两条直线。
若它们相交,则求交点坐标。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“输入坐标”、“绘制直线”、“求解交点坐标”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、成绩:
六、教师评语:
目录
一、需求分析4
二、程序流程图5
三.核心技术的实现方法及程序段8
四、个人总结11
五、参考文献12
六、源程序13
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,它们的功能分别是:
输入四个点画一条直线;输入八个点画两条直线;画直线函数,可画一条或两条直线;找两条直线的交点函数。
在这些函数当中,后三个函数的实现严格按照题目的要求,而前一个函数属于附加功能。
其中有主函数main;菜单列表函数menu;输入坐标函数add和bdd;数据处理绘制图形函数print;数据处理求交点函数address.
1.主函数:
满足菜单的要求并实现循环。
2.菜单列表函数:
展示界面便于操作。
3.输入坐标函数:
输入4个或者8个坐标。
4.数据处理求交点函数:
实现按照输入的坐标求出直线和交点。
5.数据处理绘制图形函数:
把所得到的1条或者2条直线画到屏幕上。
6.图形初始化函数:
把坐标转化为图形输出在屏幕上。
二、程序流程图
1.程序总体流程图:
2、具体功能框图
(1)菜单列表函数main()
输出“printlineandfindthesamesystem”
输出具体要选择函数的选项,菜单中有五种选择
用户可以选择一个函数进入
进入选择的函数,实现特定的功能
结束
Exit(0)
执行print函数()
选5
选3
输入坐标赋给a1,b1,c1,d1,a2
将a1,b1,c1,d1,a2分别赋给xx1,yy1,xx2,yy2
Switch
(2)输入坐标函数(add)
(3)输入坐标函数(bdd)
输入坐标给a1,b1,c1,d1,a2,b2,c2,d2
将a1,b1,c1,d1,a2,b2,c2,d2赋给x1,y1,x2,y2,xx1,yy1,xx2,yy2
选5
选3
Switch
执行print函数()
Exit(0)
(4)画直线函数(print)
(5)求坐标函数(address)
三.核心技术的实现方法及程序段
本程序有两个核心一是数据处理交点;一是数据处理绘制图形。
1、数据处理求交点
解方程组
(1)y1=k1*x1+n1
(2)y2=k2*x2+n2
其中k1,k2是斜率,n1,n2是截距。
voidaddress()/*pleaseinputeightnumberswecandrawtwolines,andwecanfindthetwolines'
sameaddress*/
{
floatn1,n2,k1,k2,x,y;
floata1,b1,c1,d1,a2,b2,c2,d2;
printf("pleaseinputeightnumbers,apartwithblack\n");
scanf("%f,%f,%f,%f,%f,%f,%f,%f",&a1,&b1,&c1,&d1,&a2,&b2,&c2,d2);
n1=(b1*c1-a1*d1)/(c1-a1);
k1=(d1-b1)/(c1-a1);/*y=kx+n,combinewithtwowecangetthesameaddress*/
n2=(b2*c2-a2*d2)/(c2-a2);
k2=(d2-b2)/(c2-a2);
if(k1==k2)
{
printf("thetwolineareparallel\n");/*ifk1==k2,thetwoareparallel*/
}
else
{
x=(n2-n1)/(k1-k2);/*wecanaskxandy*/
y=(n1*k2-n2*k1)/(k2-k1);
printf("thesameaddresis\n");
printf("%f,%f",x,y);
}
}
2、数据处理绘制图形函数(draw)
主要目的是输入4个点画一条直线或者输入8个点画两条直线.二者都通过print函数画出.
其原理如下:
先令:
x1=0,y1=0,x2=0,y2=0,xx1=0,yy1=0,xx2=0,yy2=0,xxx1=0,yyy1=0,xxx2=0,,yyy2=0.
用函数line(x1,y1,x2,y2),line(xx1,yy1,xx2,yy2),line(xxx1,yy
y1,xxx2,,yyy2)画直线.当画一条直线时,其余两直线为两点,当画二条直线时,其余一直线为一点.点都不可见.达到目的.
voidprint()/*afterinputfouroreightnumbers,press,wecanseeoneortwoline/lines*/
{
intdriver,mode;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"");
line(x1,y1,x2,y2);
line(xx1,yy1,xx2,yy2);/*drawthelines,itisthreelines,butonelinecannotsee*/
line(xxx1,yyy1,xxx2,yyy2);
getch();
restorecrtmode();
}
四、个人总结
我在这次实践中,学习和体会了许多的东西,其中有运行程序的喜悦,还有为程序而烦恼的痛苦,在没有课设之前,认为它不会太难,直到真正的实践中才知道它是如此的难。
它让我了解了自身C语言的不足,也对C语言的知识有了进一步的了解,在C语言编程的问题上产生了极大的兴趣,也深知了C语言的作用及其重要性,以后,将更加努力学习这方面的内容。
通过这次理论与实践相结合的锻炼后,让我体会到了实践与理论是不同的,在实践中你可能要遇到一些困难,但是困难并不可怕,但是我们要勇于面对它,坚信我们会成功,永不言弃,只有这样才会成功,才能走好以后的路。
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
floatx1=0,y1=0,x2=0,y2=0,xx1=0,yy1=0,xx2=0,yy2=0,xxx1=0,yyy1=0,xxx2=0,yyy2=0;
/*definex1=0,y1=0,x2=0,y2=0,xx1=0,yy1=0,xx2=0,yy2=0,xxx1=0,yyy1=0,xxx2=0,yyy2=0
itcanuseinallsystem*/
voidmenu();
voidadd();
voidbdd();/*list*/
voidprint();
voidaddress();
voidmain()
{
intn;
while
(1)
{
menu();
printf("\npleaseenteranumberyouwanttogo,thenmakesure\n");
scanf("%d",&n);
switch(n)
{
case1:
add();break;
case2:
bdd();break;/*choiceonenumber,wecangototheplacewewanttogo.*/
case3:
print();break;
case4:
address();break;
case5:
exit(0);
default:
printf("error,pleasepressthenumberintheitem\n");
}
}
}
voidmenu()
{
printf("\n*******printlineandfindthesamesystem*****\n");
printf("\n1:
addfournumber");
printf("\n2:
addeightnumber");
printf("\n3:
printtheline");/*itisthemenu*/
printf("\n4:
findthesame");
printf("\n5:
exit\n");
}
voidbdd()/*itcanbeusedtodrawtwolines*/
{
floata1,b1,c1,d1,a2,b2,c2,d2;
printf("pleaseinputeightnumbers,apartwithblack\n");
scanf("%f,%f,%f,%f,%f,%f,%f,%f",&a1,&b1,&c1,&d1,&a2,&b2,&c2,d2);
x1=a1;y1=b1;x2=c1;y2=d1;xx1=a2;yy1=b2;xx2=c2;yy2=d2;
}
voidadd()
{
floata1,b1,c1,d1,a2;
printf("pleaseinputfournumbers,apartwithblack\n");
scanf("%f,%f,%f,%f",&a1,&b1,&c1,&d1);/*itcanbeusedtodrawoneline*/
xx1=a1;yy1=b1;xx2=c1;yy2=d1;
}
voidprint()/*afterinputfouroreightnumbers,press,wecanseeoneortwoline/lines*/
{
intdriver,mode;
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"");
line(x1,y1,x2,y2);
line(xx1,yy1,xx2,yy2);/*drawthelines,itisthreelines,butonelinecannotsee*/
line(xxx1,yyy1,xxx2,yyy2);
getch();
restorecrtmode();
}
voidaddress()/*pleaseinputeightnumberswecandrawtwolines,andwecanfindthetwolines'
sameaddress*/
{
floatn1,n2,k1,k2,x,y;
floata1,b1,c1,d1,a2,b2,c2,d2;
printf("pleaseinputeightnumbers,apartwithblack\n");
scanf("%f,%f,%f,%f,%f,%f,%f,%f",&a1,&b1,&c1,&d1,&a2,&b2,&c2,d2);
n1=(b1*c1-a1*d1)/(c1-a1);
k1=(d1-b1)/(c1-a1);/*y=kx+n,combinewithtwowecangetthesameaddress*/
n2=(b2*c2-a2*d2)/(c2-a2);
k2=(d2-b2)/(c2-a2);
if(k1==k2)
{
printf("thetwolineareparallel\n");/*ifk1==k2,thetwoareparallel*/
}
else
{
x=(n2-n1)/(k1-k2);/*wecanaskxandy*/
y=(n1*k2-n2*k1)/(k2-k1);
printf("thesameaddresis\n");
printf("%f,%f",x,y);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 73 绘制 相交 直线