吉林大学程序设计基础教材第五章-模块化程序设计--函数

上传人:宝路 文档编号:4490190 上传时间:2017-08-06 格式:PPT 页数:59 大小:1.37MB
返回 下载 相关 举报
吉林大学程序设计基础教材第五章-模块化程序设计--函数_第1页
第1页 / 共59页
吉林大学程序设计基础教材第五章-模块化程序设计--函数_第2页
第2页 / 共59页
吉林大学程序设计基础教材第五章-模块化程序设计--函数_第3页
第3页 / 共59页
吉林大学程序设计基础教材第五章-模块化程序设计--函数_第4页
第4页 / 共59页
吉林大学程序设计基础教材第五章-模块化程序设计--函数_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《吉林大学程序设计基础教材第五章-模块化程序设计--函数》由会员分享,可在线阅读,更多相关《吉林大学程序设计基础教材第五章-模块化程序设计--函数(59页珍藏版)》请在金锄头文库上搜索。

1、第五章 模块化程序设计函数,求给定三角形的外心模块化程序设计函数 程序设计实例,【例5.1】求给定三角形的外心,以e为例,求解垂直平分线,假设A点坐标为xa、yaB点坐标为xb、ybC点坐标为xc、ycAC边的中点E的坐标为xe、yeAC边的直线方程表示为 Y=a1*X+b1AB边的直线方程表示为Y=a2*X+b2AC边垂直平分线e的直线方程为Y=u1*X+v1AB边垂直平分线f的直线方程为Y=u2*X+v2,#include / 括入标准输入输出函数库头文件void main( ) / 主函数float xa,ya,xb,yb,xc,yc; /分别保存三角形三个顶点的X、Y方向坐标float

2、 xe,ye;/ AC边的中点E的坐标float xf,yf;/ AB边的中点F的坐标float a1 , b1; / AC边的直线方程系数float a2 , b2; / AB边的直线方程系数float u1 , v1; / AC边的垂直平分线的直线方程系数float u2 ,v2;/ AB边的垂直平分线的直线方程系数float xo,yo;/外心O的坐标/* 输入三个点的X、Y方向坐标 */printf(please input xa,ya,xb,yb,xc,yc:n);scanf(%f%f%f%f%f%f,&xa,&ya,&xb,&yb,&xc,&yc);,/* 求AC边垂直平分线e *

3、/xe=(xa+xc)/2; / 先求AC边的中点Eye=(ya+yc)/2;a1=(ya-yc)/(xa-xc); /再求过A、C两点的直线方程b1=ya-a1*xa; u1= -1/a1; / 求过E点的与AC垂直的直线的直线方程v1= ye-u1*xe;/* 求AB边垂直平分线f */xf=(xa+xb)/2; / 先求AB边的中点Eyf=(ya+yb)/2;a2=(ya-yb)/(xa-xb); /再求过A、B两点的直线方程b2=ya-a1*xa;u2= -1/a2; / 求过F点的与AC垂直的直线的直线方程v2= yf-u2*xf;/* 求e,f交点O */xo=(u2-u1)/(v

4、2-v1);yo=u1*xo+v1; /* 打印输出 */printf(“外心坐标:x=%10.3f y=%10.3f n”,xo,yo); ,计算过程一致,而参与运算的数据不同,【例5.2】用函数改写例5.1的程序,#include / 括入标准输入输出函数库头文件1/* 求垂直平分线:参数:两个顶点r、s的x、y坐标 */float aa; /全局变量,用于保存传递rs边的垂直平分线的直线方程斜率 2 float lines( float xr,float yr,float xs,float ys ) /3 float xt,yt; / 中点T的坐标4 float a , b; / 过r、

5、s两点的直线方程系数5 /* 先求中点T */ xt=(xr+xs)/2;/6 yt=(yr+ys)/2; /7 /* 再求过r、s两点的直线方程rs */ a=(yr-ys)/(xr-xs);/8 b=yr-a*xr; /9 /* 求过中点T的与rs垂直的直线方程 */ aa = -1/a; /计算斜率aa 10 return yt-aa*xt; /计算截距b,并带着b值返回11,void main( ) / 主函数 13 float xa,ya,xb,yb,xc,yc; /分别保存三角形三个顶点的X、Y坐标14 float u1 , v1; / AC边的垂直平分线的直线方程系数 15 fl

6、oat u2 ,v2;/ AB边的垂直平分线的直线方程系数 16 float xo,yo;/外心O的坐标 17 /* 输入三个点的X、Y方向坐标 346 360 416 108 116 212 */ printf(please input xa,ya,xb,yb,xc,yc:n); /18 scanf(%f%f%f%f%f%f,&xa,&ya,&xb,&yb,&xc,&yc);,/* 求AC边垂直平分线e */v1=lines( xa, ya, xc, yc );/ 截距20u1=aa;/ 斜率21/* 求AB边垂直平分线f */v2=lines( xa, ya, xb, yb );/ 截距2

7、2u2=aa;/ 斜率23/* 求e,f交点O */xo= -(v2-v1)/(u2-u1); /24yo=u1*xo+v1; /25/* 打印输出 */printf(“外心坐标:x=%10.3f y=%10.3f n”,xo,yo ); /26,子程序,自顶向下、逐步求精”程序设计技术的基础 从问题的整体(最顶层)出发,向下分解问题。逐层细分,得到整个问题的解决方法使用子程序技术分离了“做什么”与“怎么做”程序逻辑结构清晰,易写,易读,易懂。程序的设计,调试,维护变得容易,5.2 函数,【例5.2】程序执行过程函数概念的组成函数定义函数调用使用函数注意事项先定义该函数(标准库函数除外)类似于

8、数学中的函数定义。再在表达式中调用该函数数学中计算某函数的一个特定值。,5.2.1 函数定义(function-declaration),除标准库函数外, 程序中使用函数必须先定义,然后再用“函数调用”调用它。函数定义形式 类型说明符 标识符 ( 参数列表 ) 复合语句,float dis( float xr,float yr,float xs,float ys ) return sqrt( (xr-xs)*(xr-xs)+(yr-ys)*(yr-ys); ,函数类型,函数名字,形参列表,复合语句函数体,函数定义说明符,函数定义说明符 上述形式的第一行称“函数定义说明符”,形式如下 TT F

9、( 参数列表)具体指明以下点:函数的结果类型 由“类型说明符”( TT )标明;函数的名字 由类型说明符后的“标识符” ( F )标明;函数的形式参数个数和每个形式参数的特性 由“参数列表”标明。,函数类型函数的结果类型缺省 int 类型 结果类型不能是数组类型、函数类型 函数可以是无值的,即“无类型”void 参数列表(parameter-list)每个参数声明具体说明形式: 类型说明符 标识符参数列表形式 T id ,T id ,. ,T id,C允许使用无参函数,无参函数的参数列表为空,或使用“空类型”的类型说明符“void” TT F() TT F (void )复合语句(compou

10、nd-statement)由声明和语句列表组成声明部分具体的说明本函数内使用的其它量;语句部分规定在本函数中要执行的算法动作。函数定义的形式: TT F ( T id ,T id ,. ,T id ) .,int f(int x, int y, float z)int f(int x,y ; float z)int f(int x,y , float z),5.2.2 函数调用,调用过程首先顺序计算实参表中各实参值然后把这些值顺序传入形参表的各个形参中最后进入函数执行复合语句。一般形式F (U, U, ,U)F ( )例子lines( xa, ya, xc, yc )lines( xa, ya

11、, xb, yb )printf(“外心坐标:x=%10.3f y=%10.3f n”,xo,yo),主程序,调用函数,返回,结束,函数,参数结合规则静态上看,实参表中的实参与被调用函数中形参表的形参,按位置从左向右依次一一对应对应位置上的形实参间要赋值兼容各个实参的计算次序是依赖于实现的。参数结合动作计算实参表达式的值把实参的值按赋值转换规则,转换成形参的类型。如果不能完成该转换,则称函数参数不一致,产生错误把转换后的实参值送入形参,3,int f (int x, int y) return x*y;void main()int a=3, b=2,x=9;int c;c=f(a+b,a+x)

12、;printf(“%dn”, c);printf(“%dn”, x);,2,9,程序输出为:609,a,b,x,返回值,x,y,c,main,f,内存,5,12,60,60,0,x,y,v,z,u,main,f,内存,g,返回值,返回值,由左至右#include stdio.h int x,y ; int f( int z ) x=x+1 ; return (z*z); int g( int u , int v ) void main() x=0 ; g(x,f(2) ; ,0,2,1,4,4,0,x,y,v,z,u,main,f,内存,g,返回值,返回值,由右至左#include stdio.h int x,y ; int f( int z ) x=x+1 ; return (z*z); int g( int u , int v ) void main() x=0 ; g(x,f(2) ; ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号