五、过程(功能)抽象 一一函数 (基础部分)
五、过程(功能)抽象 --函数 (基础部分)
主要内容 ■基于过程抽象的程序设计 ■子程序 ■C++函数 ·变量的局部性(局部变量与全局变量) ·C++程序的多模块结构 标准库函数
主要内容 ◼ 基于过程抽象的程序设计 ◼ 子程序 ◼ C++函数 ◼ 变量的局部性(局部变量与全局变量) ◼ C++程序的多模块结构 ◼ 标准库函数
基于过程抽象的程序设计 人们在设计一个复杂的程序时,经常会用到功能分 解和复合两种手段: 。功能分解:把程序的功能分解成若干子功能,每个子功能 又可以分解成若干子功能,等等,直到最终分解出的子功 能相对简单、容易实现为止,从而形成了一种自顶向下 (top-down)、逐步精化(step-wise)的设计过程。 功能复合:先设计子功能,然后把已有子功能逐步组合成 更大的子功能,最后得到完整的系统功能,从而形成一种 自底向上(bottom-up)的设计过程
基于过程抽象的程序设计 ◼ 人们在设计一个复杂的程序时,经常会用到功能分 解和复合两种手段: • 功能分解:把程序的功能分解成若干子功能,每个子功能 又可以分解成若干子功能,等等,直到最终分解出的子功 能相对简单、容易实现为止,从而形成了一种自顶向下 (top-down)、逐步精化(step-wise)的设计过程。 • 功能复合:先设计子功能,然后把已有子功能逐步组合成 更大的子功能,最后得到完整的系统功能,从而形成一种 自底向上(bottom-up)的设计过程
System A B E 图4-1基于功能分解和复合的程序结构 功能分解和复合的程序设计基于了一种抽象机制-- 功能抽象(过程抽象):一个功能的使用者只需要 知道相应功能是什么(what to do),而不必知道 它是如何做的(how to do)
◼ 功能分解和复合的程序设计基于了一种抽象机制-- 功能抽象(过程抽象):一个功能的使用者只需要 知道相应功能是什么(what to do),而不必知道 它是如何做的(how to do)
子程序 ■ 子程序是取了名的一段程序代码,在程序中 通过名字来使用(调用)它们。 血子程序的作用: 。减少重复代码,节省劳动力 。实现过程抽象 封装和信息隐藏的作用 语言功能的扩充
子程序 ◼ 子程序是取了名的一段程序代码,在程序中 通过名字来使用(调用)它们。 ◼ 子程序的作用: • 减少重复代码,节省劳动力 • 实现过程抽象 • 封装和信息隐藏的作用 • 语言功能的扩充
子程序之间的数据传递 一个子程序所需要的数据往往要从调用者(也是 个子程序)那里获得,计算结果也需要返回给 调用者。 ■子程序之间的数据传递方式: ·全局变量:所有子程序都能访间到的变量。(不好!) 参数: ■形式参数(形参):用于被调用者接受数据 实在参数(实参):用于调用者提供数据 值传递:把实参的值复制一份给形参。 地址或引用传递:把实参的地址传给形参。 返回值机制:返回计算结果
子程序之间的数据传递 ◼ 一个子程序所需要的数据往往要从调用者(也是 一个子程序)那里获得,计算结果也需要返回给 调用者。 ◼ 子程序之间的数据传递方式: • 全局变量:所有子程序都能访问到的变量。(不好!) • 参数: ◼ 形式参数(形参):用于被调用者接受数据 ◼ 实在参数(实参):用于调用者提供数据 ◼ 值传递:把实参的值复制一份给形参。 ◼ 地址或引用传递:把实参的地址传给形参。 • 返回值机制:返回计算结果
C++函数 ■C++函数是用于实现子程序的语言成分 int factorial((intn)/求n的阶乘 int f=1; for (int i=2;i<=n;i++)f *i; return f; 111011 cout <factorial(4)<endl;
C++函数 ◼ C++函数是用于实现子程序的语言成分。 int factorial(int n) //求n的阶乘 { int f=1; for (int i=2; i<=n; i++) f *= i; return f; } ...... cout << factorial(4) << endl;
函数的定义 ■函数的定义格式为: () 。≤描述了函数返回值的类型, ■可以为任意的C++数据类型。 当返回值类型为void时,它表示函数没有返回值。 。用于标识函数的名字,用标识符表示。 描述函数的形式参数,由零个、一个或多 个形参说明(用逗号隔开)构成,形参说明的格式为:
函数的定义 ◼ 函数的定义格式为: () • 描述了函数返回值的类型, ◼ 可以为任意的C++数据类型。 ◼ 当返回值类型为void时,它表示函数没有返回值。 • 用于标识函数的名字,用标识符表示。 • 描述函数的形式参数,由零个、一个或多 个形参说明(用逗号隔开)构成,形参说明的格式为:
·为一个,用于实现相应函 数的功能。 函数体内可以包含return语句,格式为: ●return: ·return;/返回值类型为void 当函数体执行到return语句时,函数立即返回到调用 者。如果有返回值,则把返回值带回给调用者。 如果return中的的类型与函数不一致,则进行隐式类型转换,基本原则为:把 转成 对于返回值类型为Void的函数,函数体中也可以没有 return语句,执行完最后一个语句返回。 注意:在函数体中不能用goto语句转出函数体
• 为一个,用于实现相应函 数的功能。 ◼ 函数体内可以包含return语句,格式为: • return ; • return; //返回值类型为void ◼ 当函数体执行到return语句时,函数立即返回到调用 者。如果有返回值,则把返回值带回给调用者。 ◼ 如果return中的的类型与函数 不一致,则进行隐式类型转换,基本原则为:把 转成 。 ◼ 对于返回值类型为void的函数,函数体中也可以没有 return语句,执行完最后一个语句返回。 ◼ 注意:在函数体中不能用goto语句转出函数体
函数定义的例子 double power(double x,intn)/求x的n次幂 if (x =0)return 0; double product=1.0; if(n>=0) while (n 0) { product *x; n-- else while (n 0) { product /x; n++: } return product;
double power(double x, int n) //求x的n次幂 { if (x == 0) return 0; double product=1.0; if (n >= 0) while (n > 0) { product *= x; n--; } else while (n < 0) { product /= x; n++; } return product; } 函数定义的例子