判断某个点与某条直线的关系

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程设计任务书题目:判断某个点与某条直线的关系一、课程设计时间20。二、课程设计内容用C语言编写软件完成以下任务:一条直线要么通过某个点,要么不通过。用C语言写程序,功能如下:从键盘先输入1条直线的2个坐标对,然后再输入任意1个坐标对,最后判断2者的关系,并给予适当的关系评价。三、课程设计要求程序质量:贯彻结构化的程序设计思想。至少有“输入决定直线的2个坐标对”、“输入任意1个坐标对”、“判断2者关系”、“退出”四个菜单。用户界面友好,功能明确,操作方便。代码应适当缩进,并给出必要的注释,以增强程序的可读性。代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。四、指导教师和学生签字指导教师:学生签名:五、成绩六、教师评语I目录一、需求分析.............................................1二、程序流程图.........................................2三、核心技术的实现说明及相应程序段.8四、个人总结............................................10五、参考文献............................................11六、完整源程序........................................111一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,他们的功能分别是:调用子函数,判断两数是否相等,带入预设函数判断点与直线关系。在这些函数当中,前三个函数的实现严格按照题目的要求,而后面的清屏函数属于附加功能。1、调用子函数通过switch来调用四个子函数;2、判断两数是否相等用if函数判断所输入的两点是否能组成直线;3、带入预设函数判断点与直线关系将待判断点带入预设函数,通过if判断此点是否在之前输入的两点所组成的直线上;除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。2二、程序流程图1、程序总体结构图图1程序总体结构图开始菜单输入组成直线的两点输入待判断点判断点直线关系清屏退出Switch选择3NY子函数(输入组成直线的两点)输入两点坐标x1y1,x2y2X1==x2&&y1==y2子函数(输入待判断点)所输入点不能组成直线4NY图2子函数工作细则输入待确定点子函数(判断点与直线关系)a=(y1-y2)/(x1-x2)b=(x1*y2-x2*y1)/(x1-x2)y0=a*x0+b此直线通过这个点此直线不通过这个点主函数52、调用子函数(1)主函数调用子函数(2)判断两数是否相等开始菜单Switch选择输入组成直线的两点输入待判断点判断点直线关系清屏退出子函数(输入组成直线的两点)6NY(3)带入预设函数判断点与直线关系输入两点坐标x1y1,x2y2X1==x2&&y1==y2所输入点不能组成直线子函数(输入待判断点)子函数(判断点与直线关系)7NY三、核心技术的实现说明及相应程序段本程序主要由四个自定义函数和一个主函数组成,其a=(y1-y2)/(x1-x2)b=(x1*y2-x2*y1)/(x1-x2)y0=a*x0+b此直线通过这个点此直线不通过这个点主函数8中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,主函数调用子函数,判断所输入点是否能形成直线,判断点与直线关系是程序的重点,下面分别进行说明。1、主函数调用子函数通过while(1)的真循环来进行switch的子函数调用,通过屏幕提示,来选择要进行的步骤,输入代码,通过switch……case……函数,来调用想运行的子函数。直到当输入代码5时,想退出,函数通过return跳出while循环,函数运行结束。voidmain(){charchoice;menu();choice=getch();while(1){switch(choice){case'1':m();break;case'2':n();break;case'3':p();break;case'4':q();break;case'5':return;}9choice=getch();}}2、判断两数是否相等当调用子函数m时,进行输入两点坐标,并判断所输入的两点是否能构成直线,若不能,则重新输入,若能,则继续进行下一步骤。子函数m通过do……while……语句来进行循环,在循环体中,用if函数进行判别,若x1==x2&&y1==y2成立,则显示“重新输入字样”,while判断为真,继续进行循环,直到x1==x2&&y1==y2值为0时,跳出,执行下一步骤。voidm(){puts(输入决定直线的2个坐标对:);do{scanf(%f%f%f%f,&x1,&y1,&x2,&y2);if(x1==x2&&y1==y2)puts(以上2个坐标对无法决定1条直线,请重新输入2个不相同的坐标对:);}while(x1==x2&&y1==y2);}3、带入预设函数判断点与直线关系当调用子函数p时,将输入的待判断点带入之前的两点所组成的直线中,判断是否在该直线上。通过事先编译10a=(y1-y2)/(x1-x2);b=(x1*y2-x2*y1)/(x1-x2);计算出直线方程的a与b,再用if函数来判断点是否在直线上。当a*x0+b==y0值为1时,显示“此直线通过这个点”当其值为0时,显示“此直线不通过这个点”voidp(){floata,b;a=(y1-y2)/(x1-x2);b=(x1*y2-x2*y1)/(x1-x2);if(a*x0+b==y0)puts(此直线通过这个点\n);elseputs(此直线不通过这个点\n);}四、个人总结一周的C语言课程设计结束了,在这短短的一周时间里,不仅复习了上学期C语言中的一些知识点,而且还学到了新的知识,所以我认为自己在此次课程设计中有了很大的收获与体会。我想这次课设的收获不仅仅是完成了题目要求,更多的是通过此次学习掌握了分析问题、解决问题的方法。本程序重点在于算法,通过此次课程设计我较熟练地掌握了如何将数学算法的表达准确的用C语句实现,我想,这为今后的学习及专业课的课程设计打下了良11好的基础。本次程序完全实现了题目中的要求,输入数据,开始计算,清屏,退出等功能。总之,要把学到的课本上的知识运用到实际中,实现其更高的价值。五、参考文献1谭浩强.C程序设计.北京:清华大学出版社,2005。2刘成,C语言程序设计实验指导与习题集,北京。六、完整源程序#includestdio.h#includeconio.h//其中定义了getch()函数。#includestdlib.h//其中定义了system()函数。floatx1=0,x2=0,x0=0,y1=0,y2=0,y0=0;voidmenu(){puts(请选择您要进行的工作的序号,然后进行输入:(123项请按顺序执行));puts(1请输入决定直线的2个坐标对:);puts(2请输入任意1个待判断的坐标对:);puts(3判断2者关系);puts(4清屏);puts(5退出);}voidm(){puts(输入决定直线的2个坐标对:);do{12scanf(%f%f%f%f,&x1,&y1,&x2,&y2);if(x1==x2&&y1==y2)/*判断两点是否能组成直线*/puts(以上2个坐标对无法决定1条直线,请重新输入2个不相同的坐标对:);}while(x1==x2&&y1==y2);/*当条件值为1时继续循环,值为0时跳出*/}voidn(){puts(输入1个待判断的坐标对:);scanf(%f%f,&x0,&y0);}voidp(){floata,b;a=(y1-y2)/(x1-x2);b=(x1*y2-x2*y1)/(x1-x2);/*计算出直线的ab值*/if(a*x0+b==y0)/*判断点是否在直线上,值为1时在。值为0时不在*/puts(此直线通过这个点\n);elseputs(此直线不通过这个点\n);}voidq(){system(cls);/*清屏*/menu();}voidmain(){charchoice;menu();choice=getch();while(1){switch(choice)/*通过switch选择要进行的步骤*/{case'1':m();break;case'2':n();break;13case'3':p();break;case'4':q();break;case'5':return;}choice=getch();}}

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功