C++学习教程及习题 第三章

更新时间:2023-11-10 22:40:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

教学目标

●了解如何由函数模块化地构造程序 ●能够生成新函数

●了解函数之间传递信息的机制 ●介绍使用随机数产生器的模拟技术 ●了解标识符如何限于特定程序区域 ●如何编写和使用调用自己的函数 3.1 简介

解决实际问题的大多数程序都比前几章介绍的程序要大得多。经验表明,要开发和维护大程序,最好的办法是从更容易管理的小块和小组件开始。这种方法称为“分而治之,各个击破”(divideand conquer)。本章介绍C++语言中的许多关键特性,可以帮助设计、实现、操作和维护大程序。 3.2 C++程序组件

C++中的模块称为函数(function)和类(class)。C++程序一般是将程序员编写的新函数与C++标准库(standard library)中提供的预装函数组合而成的,通常是将程序员编写的新类与各种类库中提供的预装类组合而成的。本章主要介绍函数,第6章开始将详细介绍类。

C++标准库提供了丰富的函数集合,可以进行常用数学计算、字符串操作、字符操作、输人/输出、错误检查和许多其他有用的操作。这就使程序员的工作更加轻松,因为这些函数提供了程序员需要的许多功能。C++标准库函数是在C++编程环境中提供的。

编程技巧3.1

要熟悉C++标准库提供的类和函数集合。 软件工程视点3.1

不要事事从头做起。要尽可能利用C++标准库提供的函数而不是生成新函数,从而减少程序开发时间。 可移植性提示3.1

利用C++标准库提供的函教能使程序可移植性更强。 性能提示3.1

不要改写现有库程序以使其更有效,这些过程的性能通常已经是最优的。 程序员可以通过编写函数定义程序中多处使用的特定任务,这些通常称为程序员定义的函数(prograrmmer-defined function)。定义函数的语句通常只写一次,这些语句是其他函数无法访问的。

通过函数调用(function call)来调用(invoke,即让其完成指定任务)函数。函数调用指定函数名和提供被调用函数完成工作所需的信息<作为参数L可以把这种形式与管理的层次形式相比,老板(调用函数或调用者)要求工人(被调用函数)完成任务并在任务完成之后返回(即报告)结果。老板函数并不知道工人函数如何完成工作。工人又可能调用其他工人函数,这是老板所不知道的。稍后会介绍这种隐蔽实现细节如何促进良好的软件工程。田3.1显示了main函数以层次方式和几个工人函数通信。注意workerl是worker4和worker5的老板函数。函数之间的关系也可能与图中所示的层次结构有所不同。

---------------------- 3.3 数学函数库

数学函数库使程序员可以进行某些常见数学计算。我们这里用各种数学库函数介绍函数概念。本书稍后会介绍c++标准库中的许多其他函数。

调用函数时,通常写上函数名,然后是一对括号,括号中写上函数参数(或逗号分隔的参数表)。例如程序员可以用下列语句计算和打印900.0的平方根: cout << sqrt(900.O);

执行这个语句时,数学库函数sqrt计算括号中所包含数字(900.0)的平方根。数字900.0是sqrt函数的参数。上述语句打印30。sqrtd函数取double类型参数,返回double类型结果。数学函数库中的所有函数都返回double类型结果。要使用数学库函数,需要在程序中包含math.h头文件(这个头文件在新的C++标准库中称为cmath)。

常见编程错误3.1

使用数学库孙数而不包括math.h文件是个语法错误。程序中使用的每个标准库函数都应包括标准头文件。

函数参数可取常量、变量或表达式。如果c1=13.0、d=3.0和f=4.0,则下列语句:

cout << sqrt (cl + d * f);

计算并打印13.0+3.0*4.0=25.0的平方根,即5(因为C++通常对没有小数部分的浮点数不打印小数点和后面的零)。

图3.2总结了一些数学库函数。图中变量x和y为double类型。 ------------------------------------------------------------------------------

函数 说明 举例 ------------------------------------------------------------------------------

ceil(x) 将x取整为不小于x的最小整数 ceil(9.2)=10.0

ceil(-9.8)=-9.0

cos(x) x(弧度)的余弦 cos(0.0)=1.0 exp(x) 指数函数

ex exp(1.0)=2.71828

exp(2.0)=7.38906

fabs(x) x的绝对值 x>0,abs(x)=x x=0,abs(x)=0.0 x<0,abs(x)=-x floor(x) 将x取整为不大于x的最大整数 floor(9.2)=9.0

floor(-9.8)=-10.0

fmod(x,y) x/y的浮点数余

数 fmod(13.657,2.333)=1.992 log(x) x的自然对数(底数为e) log(2.718282)=1.0

log(7.389056)=2.0

log10(x) x的对数(底数为10) log(10.0)=1.0 log(100.0)=2.0 pow(x,y) x的y次方(xy) pow(2,7)=128 pow(9,.5)=3 sin(x) x(弧度)的正弦 sin(0.0)=0 sqrt(x) x的平方

根 sqrt(900.0)=30.0

sqrt(9.0)=3.0 tan(x) x(弧度的正切 tan(0.0)=0 ------------------------------------------------------------------------------- 3.4 函数

函数使程序员可以将程序模块化。函数定义中声明的所有变量都是局部变量(local variable),只在所在的函数中有效。大多数函数有一系列参数,提供函数之间沟通信息的方式。函数参数也是局部变量。 软件工程视点3.2

在包含多个函数的程序中,main应实现为一组函数调用,这些函数进行大量的程序工作。

将程序函数化的目的有几个,“分而治之、各个击破”的方法使程序开发更容易管理。另一个目的是软件复用性(software reusability),用现有函数作为

基本组件,生成新程序。软件复用性是面向对象编程的主要因素。有了好的函数命名和定义,程序就可以由完成特定任务的标准化函数生成,而不必用自定义的代码生成。第三个目的是避免程序中的重复代码,将代码打包成函数使该代码可以从程序中的多个位置执行,只要调用函数即可。

软件工程视点3.1

每个函数只限于完成一个定义良好的任务,函数名应有效地表达这个任务,这样可以提高软件复用性。 软件工程视点3.4

如果无法用简单名称表达函数的作用,则可能是定义的函数要完成的任务太分散。通常应把这种函数分 解为几个更小的函数。 3.5 函数定义

前面介绍的每个程序都有一个main函数,调用标准库函数完成工作。现在要考虑程序员如何编写自定义函数。

考虑一个程序,用自定义函数,square计算整数1到10的平方(如图3.3)。 1 // Fig. 3.3: fig03_03.cpp

2 // Creating and using a progra~er-defined function 3 #include 4

5 int square( int ); // function prototype(函数原型) 6

7 int main( ) ( S

9 for ( in x = 1; x <= 10; x++ ) 10 cout<< square( x ) << \11

12 cout << endl;

本文来源:https://www.bwwdw.com/article/l50v.html

Top