




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 中 北 大 学课程设计说明书学 院、系:软件学院专 业:软件工程学 生 姓 名:学 号:1221011319设 计 题 目:四边形计算 起 迄 日 期: 2013年10月11日2013年11月16日指 导 教 师:李华玲日期: 2013年11月16日1 设计目的 .2 任务概述 .3 模块划分 .4 主要函数说明及其N-S图 .5 程序运行数据及其结果 .6 程序设计心得 .7 附录(代码) .1 设计目的 (1)进一步巩固和复习C程序设计的基础知识; (2)培养学生结构化程序、模块化程序设计的方法和能力; (3)了解软件的编制过程及各环节的具体内容; (4) 提高程序调试技巧、软件设计能力
2、和代码规范化等素质;提高分析问题、解决问题以及实际运用能力。2 任务概述用C程序语言编写源程序来验证计算四边形,要求:1) 在屏幕上能够手动输入待计算的四边形各边边长,顶点、对角线上各点及延长线的交点的名称;2) 输入完成后通过选择后,可以通过编写的程序验证三角形RMN的面积是四边形ABCD面积的四分之一;3) 将验证结果显示在屏幕上。4) 验收时程序能够演示,自己单独做。3 模块划分主函数计算三角形面积的函数计算两直线交点的函数初步检测四边形的函数计算两点间距离大函数4 主要函数说明及其N-S图( 1)首先根据提示从键盘手动输入四个定点的坐标,调用“初步检测四边形函数”检查输入的点是否可用,
3、如果有重合在一起的点或AB与CD近乎平行,则异常结束。(2)其次,推算M、N两个“中点”的坐标,并且调用求交点函数计算BA与CD延长后的交点r的坐标。(3)接着,调用“计算三角形面积的函数”分别算出四边形abcd和三角形的mnr的面积。计算四边形abcd面积的时候,需要检测该四边形是否为凹四边形,如是,则异常结束,必要地,计算三角形面积的时候需要调用“计算两点间线段距离的函数”。(4)最后,计算四边形abcd和三角形的mnr的面积之比,并输出结果。开始定义 pname="ABCD",*p=pname, Point m,n,r,P4,*PP=P, double abcd,rm
4、n,abcd1!ok(P)Y N*p printf("input (x,y) of point %c:",*p)scanf("%lf%*c%lf",&PP->x,&PP->yp+pp+fprintf(stderr,"invalid input.nn")exit(1)m.x = (a.x+c.x)/2m.y = (a.y+c.y)/2n.x = (b.x+d.x)/2n.y = (b.y+d.y)/2r= pointOfIntersection()abcd = area_of_triangle(a,b,c)
5、+ area_of_triangle(a,d,c)abcd1= area_of_triangle(a,b,d) + area_of_triangle(b,d,c)fabs(abcd1-abcd)>EPSY Nfprintf(stderr,"凹四边形!不行!nn") exit(2)rmn = area_of_triangle(r,m,n)printf("as a resultnABCD:RMN=%4.2f:%4.2f=%4.2fn" ,abcd,rmn,abcd/rmn); 图1-1主函数main()定义side4,i,j定义tj=(i+1)%4t=
6、length(&pi,&pj)fabs(t)<EPS)YNsidei=treturn 0定义k1,k2for(i=0;i<4;i+)k1=(p1.y-p0.y)/(p1.x-p0.x)k2=(p3.y-p2.y)/(p3.x-p2.x)if(fabs(k2-k1)<EPS)Y Nreturn 0return 1图1-2初步检测四边形函数ok()、开始定义area,a,b,c,pa=length(&B,&C)b=length(&C,&Ac=length(&A,&B)p=(a+b+c)/2area=sqrt(p*(p
7、-a)*(p-b)*(p-c)return area图1-3计算三角形面积函数area_of_triangle()开始return sqrt(pow(A->x-B->x,2)+pow(A->y-B->y,2)图1-4计算两点间直线距离函数length()开始定义cdx,cdy,abx,aby,dax,day, del,du,dv;cdx = c.x-d.xcdy = c.y-d.yabx = a.x-b.xaby = a.y-b.y;dax = d.x-a.xday = d.y-a.ydel = cdx*aby-cdy*abx;du = dax*aby-day*abx;
8、dv = cdx*day-cdy*dax;du /= dedv /= delr.x = d.x-du*cdxr.y = d.y-du*cdyreture r图1-5计算交点坐标的函数pointOfIntersection ()5 程序运行数据及其结果 四边形与三角形面积之比4:1点重合AB与CD平行四边形是凹四边形6 程序设计心得 这次的课程设计实验是对我们进入大学以来学习C语言结果的一次考验,作为软件专业的学生来说,掌握软件开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 通过这次课程设计,不仅重温了C语言的知识,而且还强化了对C程序的
9、运行和测试。比如,当用到定义点的变量时,用到了结构体的定义和新类型的定义,知道了怎样用typedef来定义新的类型名,在编程过程中,用到了基本类型有int、char,用到常用运算符及其表达式,赋值,算术,逻辑,还有顺序结构。C语言程序有很多难点,例如数组、指针、结构体,但重点也是它们,只有经过多次应用,才能够牢牢掌握它们。 编好程序之后,要在电脑上运行,运行时,电脑会给你指出代码中的错误,有时候是一些标示符的错误应用,有时候是代码编写格式错误,反反复复,等到把程序调到能够运行了,你会发现,在这个过程中,有很多自己忽略的小知识点,自己把它改正,这就是经验,不仅复习了知识,还得到了提高,我觉得这就
10、是课程设计的目的。7 附录(代码) #include<stdio.h>#include<stdlib.h>#include<math.h>#define EPS 1e-10typedef struct double x; double y; Point;/*两点之间的直线距离*/double length(Point *A,Point *B) return sqrt(pow(A->x-B->x,2)+pow(A->y-B->y,2);double area_of_triangle(Point A,Point B,Point C) do
11、uble area,a,b,c,p; a=length(&B,&C); b=length(&C,&A); c=length(&A,&B); p=(a+b+c)/2; area=sqrt(p*(p-a)*(p-b)*(p-c); return area;/*初步检测四边形*/int ok(Point *p) double side4;/*4边长*/ int i,j; for(i=0; i<4; i+) double t; j=(i+1)%4; t=length(&pi,&pj); if(fabs(t)<EPS)retur
12、n 0; /*不允许有重合在一起的点*/ sidei=t; double k1,k2;/*斜率*/ k1=(p1.y-p0.y)/(p1.x-p0.x); k2=(p3.y-p2.y)/(p3.x-p2.x); if(fabs(k2-k1)<EPS) return 0; /*不允许AB与CD近乎平行*/ return 1;Point pointOfIntersection(Point a,Point c,Point d,Point b)Point r;double cdx,cdy,abx,aby,dax,day, del,du,dv;cdx = c.x-d.x;cdy = c.y-d.y
13、;abx = a.x-b.x;aby = a.y-b.y;dax = d.x-a.x;day = d.y-a.y;del = cdx*aby-cdy*abx;du = dax*aby-day*abx;dv = cdx*day-cdy*dax;du /= del;dv /= del;r.x = d.x-du*cdx;r.y = d.y-du*cdy;return r;/计算两直线焦点r#define a P0#define b P1#define c P2#define d P3main() char pname="ABCD",*p=pname; Point m,n,r,P4
14、,*PP=P; double abcd,rmn,abcd1; while(*p) printf("input (x,y) of point %c:",*p); scanf("%lf%*c%lf",&PP->x,&PP->y); p+; PP+; /*至此得到四边形的4个顶点的坐标*/ if(!ok(P)/*如果AB/CD则无法相交只好退出*/ fprintf(stderr,"invalid input.nn"); exit(1); /*异常结束1*/ /*推算M、N两个“中点”的坐标*/ m.x = (a.x+c.x)/2; m.y = (a.y+c.y)/2; n.x = (b.x+d.x)/2; n.y = (b.y+d.y)/2; r = pointOfIntersection(a,b,c,d);/调用求交点函数,并将求出的点赋值给r /*这里计算四边形ABCD的面积*/ abcd = area_of_triangle(a,b,c) + area_of_triangle(a,d,c); /*补充检测四边形,看它的凹凸性*/ abcd1= area_of_triangle(a,b,d) + area_of_triangle(b,d,c); if(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机信息处理工作技能试题及答案
- 行政法学与社会公共事务试题及答案
- 网络安全攻防案例分析试题及答案
- 2025年法学概论考试中的法律文件研究与试题及答案
- 经济政策评估的标准与方法试题及答案
- 2025年软件考试各类试题及答案
- 行政法学课程教学中的创新要素试题及答案
- 与同事建立良好关系的练习计划
- 高效人际关系的建立与维护计划
- 法学概论的法律环境构建与试题及答案
- 试卷交接签字单
- 调压器技术规范
- 学校生均占地面积
- 《康复医学》第四章 常见疾病的康复 第二节 肿瘤康复课件
- 2016年度高考全国3卷文综地理试题(解析版)
- SIPOC培训教材学习教案
- 2019年重庆江津小升初数学真题及答案
- 《菱形的判定》教学设计(共3页)
- 配电箱系统图
- 电缆井工程量计算
- 初中音乐--人声的分类--(1)pptppt课件
评论
0/150
提交评论