




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 函数与运算符的重载 5.1 三次方程求根程序的设计 5.2 函数的说明与使用 5.3 函数的嵌套与递归 5.4 函数与运算符的重载 5.5 函数与C+程序结构 5.6 程序实例 1 5.1 三次方程求根程序的设计 - 计算三次方程x3+px+q=0的一个实根的公式为 xr= n为了从系数p、q 计算实根xr,把公式的计算分解为下面 几步: 1)令实数xrA+B ; 2)令实数A, B 分别为实数 R,S 的立方根: 3)令 R = -q/2 + a, S = -q/2a ; (5.2) 4)令 a = sqrt (q/2) *(q/2) + (q/3) * (q/3) * (q/3) ; 实际的计算过程为: 用(4)计算得到a ; 用(3)计算得到 R 和S ;求出 R 和 S 的立方根 A 和 B ;最后得到实根xr。 2 5.1 三次方程求根程序的设计 计算立方根的迭代公式 Float cuberoot(float x)/精确到小数点后6位 float root , croot; const float eps1e6; crootx ;do rootcroot; croot(2*rootx/(root*root)/3; while(fabs(crootroot)eps); return(croot); 3 5.1 三次方程求根程序的设计 # includeiostream.h /program5-1 # includemath.h float cuberoot(float); void main(void) float p, q, xr; coutInput parameters p,q: ; cinpq; float asqrt (q/2) *(q/2) + (q/3) * (q/3) * (q/3) ; xrcuberoot(q2a)cuberoot(q2a); coutendlThe real root of the equation isxr; float cuberoot(float x) 4 5.1 三次方程求根程序的设计 课本p129显示了不使用函数的程序。其中croot 的立方根的运 算进行了两次,所以该计算程序要重复两次, 当程序较长,或计 算次数更多时,采用“子程序”的方案可以大大缩短程序的长 度。 特别是当程序比较复杂时,可以使得程序显得清晰,在 program5_1 中,main()中不涉及计算立方根的细节,显得 简洁,而在cuberoot()中只解决一个浮点数的立方根的计算 ,也很清楚。 另外,还可以把立方根的计算与C+语言中的运算符和标准函数 对应起来,当在程序中对于cuberoot(y)给出了定义之后, 就可以在主函数或其它用户定义的函数中,像运算符或标准函 数那样使用了,如cuberoot(x)的使用与a+b, sin(x)的 使用没有什么区别。 5 5.2 函数的说明与使用 - 参看书p130的5.2节 C+程序允许两种函数说明语句的形式,我们把它们分别称 为函数原型(或函数声明)和函数定义。 n1函数原型 n函数原型(亦称函数声明)用来指出函数的名称,类型和 参数,其格式为: 属性说明类型函数名(参数表); int add (int a, int b); inline void swap (float void print (char *) ; 6 5.2.1 函数的说明 属性说明:可缺省,一般可以是下面的关键字之一:inline,static, virtual, friend 等。 inline 表示该函数为内联函数; static 表示该函数为静态函数; virtual 表示该函数为虚函数; friend 表示该函数为某类(class)的友元函数。 类型:指函数的返回类型。 函数名:一个标识符。 参数表:它可能为空,void 或类型参数名,类型参数 名 的形式。 main() ,print(void) , cuberoot(float x) , add(int a,int b) 7 5.2.1 函数的说明 n 2函数定义 n函数定义与函数原型的主要区别是它还包括函数 体,其格式为: 属性说明类型函数名(参数表 )函数体 属性说明,返回类型,函数名与函数原型一致, 参数表中不可省略参数名。 函数体:由和括起来的复合语句即程序块。 program 5_1 的最后12 行就是一个函数定义。 8 函数的分类方法 1 从使用角度分类 2 从函数形式分类 9 (1)从使用角度分类 从使用角度划分,可将函数分为:系统预定义 的标准库函数(如,sin,abs等),以及由用户自 定义的函数。 程序中可直接使用(调用)系统预定义的标准 库函数,但要求在调用前使用编译预处理指令 include将对应的头文件包含进来。 由用户自定义的函数与系统预定义的标准库函 数的不同点在于,自定义函数的函数名、参数个数 、函数返回值类型以及函数所实现的功能等都完全 由用户程序来规定(指定)。 10 (2)从函数形式分类 从函数形式划分,可分为无参函数与 有参函数两类。对无参函数来说,调用它们 时不需要提供实际参数;而对有参函数进行 调用时,必须提供所需个数的且具有相匹配 数据类型的实际参数。 11 无参函数的定义 。 无参函数定义的一般形式 () . 通常用于实现某种固定功能。例如: void printStar() . 就自定义了一个叫做printStar的无参函数,比 如可用它来实现打印出一行共10个“*”的固定功能 。 12 有参函数定义的一般形式 ( ) . 通过调用处提供的不同实参值来计算出其对应的函数值 、或实现某种与传递过来的那些不同值有关的某种功能。例 如: void printStar(int k) . 就自定义了一个叫做printStar的具有1个int型形参k的 函数,比如可用它来实现打印出一行共k个“*”的自定义功 能。 13 5.2.2 函数的调用 函数调用是已定义函数的一次实际运行,与某类型的一 个变量和后文中某类的一个对象类似,函数调用是函数定 义的一个“实例”。在C+程序中,除main函数外,其它 任一函数的执行都是通过在main函数中直接或间接地调 用该函数而引发的。调用一个函数就是去执行该函数之 函数体的过程。 对无参函数进行调用的一般形式为: () 例如:printStar(); 14 对有参函数进行调用的一般形式为 : ( ) 例如:printStar(26); 其中函数说明中的参数称为形式参数(形参) ,函数调用中的参数称为实际参数(实参)。实参 表在参数个数、参数顺序、以及参数类型等方面要 与被调函数的形参表之间有一个一一对应的相互匹 配关系。编译器将根据参数的顺序,来逐一实现实 参与对应形参的“结合”,而后执行一遍函数体( 而完成本次的函数调用)。 15 计算机对函数进行调用的执行顺序 以Program5-1为例 (1) 根据调用语句中的函数名(cuberoot)在整个程序中搜索同名函数定 义; (2) 对实参数的参数个数,类型,顺序进行核对,判定是否与函数定义 中的形参表对应一致,在上例中只有一个浮点型参数; (3) 根据参数的类型(值参数或引用参数)进行值参数的值传递或引 用参数的换名,在上例中即是要把实参表达式的值计算出来赋给形 参x; (4) 运行函数体代码; (5) 返回调用点,并返回所要求的函数值,即返回计算结果croot 的 值。 16 关于函数原型的一点说明 当函数调用从书写顺序上先于函数定义时, C+要求必须事先列出这一函数的函数原型。 (1)无参函数定义的函数原型 (); (2)有参函数定义的函数原型 ( ); 注意,与函数定义的一般形式相比,相当于 用分号代换了函数体,而成为其相应的函数原型 。 17 5.2.3 函数的返回 函数的返回完成两项任务: n (1) 把运行控制从函数体返回到函数 调用点。 在program5-1中就是在计算cuberoot ( -q/2+a) 之后再返回到语句 xr = cuberoot () + cuberoot () 的 计算过程中。 n(2) 根据返回值要求,返回所需要的数 据值。 18 5.2.3 函数的返回 n函数的返回值有下面几种情形: n1.返回void 类型 如果函数无值返回,应说明为void 类型。未作类型说明的函数,系 统认为是int 类型函数,应返回一整型值。 n2返回数值类型 最常见的函数是返回一个数值的函数。 例如: int add(int a,int b); 当函数要返回的数值不止一个时,情况比较复杂,一般它可以以结构 或类的形式,也可以以结构,数组或对象指针类型方式实现,这样的 实例在后面的章节可以见到。 n 3返回引用类型 值返回方式是C 和Pascal 语言中唯一的返回方式,C+语言提供的引 用返回概念是一种很强的功能,当函数定义中把该函数说明为某类型 的引用类型时,该函数调用后返回的不单是值,而是包含返回值的变 量(或对象)。由于返回引用与引用类型有关,所以这样的实例将在 下节介绍。 19 函数应用实例 1. 实例1 - 无须给出函数f的原型 设 f(x) = (x*x+x+1)/2-5.5。 (1)求z = (f(2.5)+2*f(6)/f(4.3),并显示结果z。 (2)对任意输入的一个实数a,求出f(a)并显示。 程序执行后的交互结果如下: z=4.90618 Input a=10 f(a)=50 20 程序编制: #include double f (double x) double y; y=(x*x+x+1)/2-5.5; return (y); /对非void类型的函数,必须有一个 /return语句,由它返回函数值 21 void main() double z,a; z=(f(2.5)+2*f(6)/f(4.3); /调用自定义函数f couta; cout; return ( ); 第一种格式的return用于立即从被调函数中返回, 当函 数类型为void时,应使用这种格式的返回语句。 当函数类型为非void型时,应使用第二或第三种格式的 return语句,此两种格式的语句效果完全相同(可将第二 种格式看成是第三种格式的省略形式),系统此时都将计 算出表达式的值,并“携带”该值立即从被调函数中返回 。 25 2. 实例2 - main在前而被调函数f 在后时,必须先列出函数f的原型 设 f(x) = (x*x+x+1)/2-5.5。 (1)求z = (f(2.5)+2*f(6)/f(4.3),并显示结果z。 (2)对任意输入的一个实数a,求出f(a)并显示。 程序执行后的交互结果如下: z=4.90618 Input a=10 f(a)=50 26 程序编制: #include double f (double x); /函数f的原型 void main() /同上,从略 double f (double x) /被调函数f的具体定义 /同上,从略 27 3. 实例3 - 无参函数,实现固定功能 编无参函数,void printStar(),它负责完成 固定功能:在同一行连续显示60个“*”。并编制 主函数main,对该函数实现调用,使程序执行后 的显示结果如下: the result of first call to printStar(): * the result of second call to printStar(): * 28 程序编制: #include void printStar() /自定义无参函数printStar for(int i=1; i void printStar(int k) /k为形参,由调用处的实参提供实际 值 for(int i=1; ik; printStar(k); /函数调用,带去输入的实参k 33 5. 实例5 - 二参函数 编二参函数,void printStar(int k, int n),它负责显示出k行“*”来,且每行 均显示连续的n个“*”。并编制主函数,对 该函数实现调用,使程序执行后的显示结果 样式如下: k,n=? 4 15 * * * * 34 程序编制: #include void printStar(int k, int n) /负责显示出k行*来,且每行均显示连续的n个* for(int i=1; ikn; printStar(k, n); /以输入的k与n为实参去调用printStar 36 6. 实例6 - 无参函数,全局变量 编无参函数,void printStar(),并结合使 用全局变量k与n,使每调用一次该函数,总显示 出k行“*”来,且每行均显示连续的n个“*”, 并编制主函数,对该函数实现调用,使程序执行 后的显示结果样式如下: k,n=? 3 20 * * * 37 程序编制: #include int k,n; /int型全局变量k,n /* 在所有函数之外(即在不属于任一函数定义的外 面)说明的变量为全局变量,其作用域即有效区域 为整个文件(或具有多个文件的整个程序,详细请 参看本章的5.7及5.8节)。 */ 38 void printStar() /无参函数printStar /其中所用的k与n都是全局变量 for(int i=1; ikn;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第二章 匀变速直线运动的研究 教学设计-2024-2025学年高一上学期物理人教版(2019)必修第一册
- 2025年全国起重指挥作业人员Q1证考试题库(含答案)
- Unit 1 Welcome to the unit 说课稿-2024-2025学年译林版(2024)七年级英语下册
- 常州工业二轮考试题型及答案
- 常德事业单位考试真题及答案
- 向量大题目及答案
- 先态生态实验题目及答案
- 曹县二年级期末考试题及答案
- 沧州初中联考试卷真题及答案
- 2025短期贷款人民币借款合同(官方范本)
- 2025年秋季新学期第一次全体教师大会上校长讲话:四重人生境界一颗育人初心-新学期致每位教书人
- 精英人才管理办法
- 2023年经济法基础第四章税法概述及货物和劳务税法律制度课件讲义
- 摩托训练考试题及答案
- 蚊虫消杀培训课件
- 秋季行车安全课件
- 贝尔面瘫个案护理
- 急性主动脉综合征非外科强化治疗中国专家共识解读 2
- 检测机构强制性标准规范执行措施
- 2025年驻村帮扶培训课件
- 产品生命周期管理制度
评论
0/150
提交评论