C++学习 【4.2】 利用函数实现指定的功能---函数的调用
2016-01-26 00:00
507 查看
摘要: 学习《C++程序设计》(第二版) 谭浩强 主编 第四章 关于函数的调用
4.4 函数的调用
4.5 函数的嵌套调用
4.6 函数的递归调用
学习《C++程序设计》(第二版) 谭浩强 主编 第四章 关于函数的调用
4.4 函数的调用
4.5 函数的嵌套调用
4.6 函数的递归调用
4.4 函数的调用
函数名(【实参表列】)
如果实参表列包括多个实参,对实参求值的顺序并不是确定的
很多C++系统(例如vc++和GCC)是按从右至左的顺序求解的。
函数语句:把函数单独作为一个语句,并不要求函数返回一个值,指示要求函数完成一定的操作。
函数表达式:函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。
函数参数:函数调用作为一个函数的实参。
函数定义:对函数功能的确立,包括制定函数名,函数类型,形参及其类型,函数体等,它是一个完整的独立的函数单位。
其实,在函数声明中也可以不写参数名,而只写形参的类型
使用函数原型是C和C++的一个重要特点。
它的作用主要是:根据函数原型在程序编译阶段对调用函数的合法性进行全面的检查
函数原型的一般形式为;
函数类型 函数名(参数类型1,参数类型2)
函数类型 函数名(参数类型1,参数名1,参数类型2,参数名2)
第一种形式是最基本的形式,为了方便阅读,也允许在函数原型上加上参数名,但编译系统并不检查参数名,因此参数名是什么都无所谓。
有经验的程序编制人员一般都把main函数写在最前面,这样对整个程序的结构和作用一目了然,统揽全局,然后再具体了解各函数的细节。
此外,用函数原型来声明函数,还能减少编写程序时可能出现的错误。因为函数声明的位置一般和函数调用的位置比较近。
函数声明的位置可以在调用函数所在的函数中,也可以在函数外。
如果函数声明在函数的外部,在所有函数定义之前,(这就是对函数的外部声明),则在各个主调函数中不必对所调用的函数再做声明,作用域将是整个文件。
4.5 函数的嵌套调用
C++不允许对函数作嵌套定义,也就是说在一个函数中不能完整地包含另一个函数。
在一个程序中每一个函数的定义多事互相平行和独立的。
C++虽不能嵌套定义函数,但是可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。
4.6 函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用(recursive)调用。
C++ 允许函数的递归调用。
程序中不应该出现这种无休止的递归调用,而只应该出现有限次数的、有终止的递归调用,这可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。
包含递归调用的函数称为递归函数。
一个递归的问题可以分为回溯和递推两个阶段。
如果要求递归过程不是无限制进行下去,必须具有一个结束递归过程的条件。
递推法的特点是从一个已知的事实出发,按一定规律推出下一个事实,再从这个新的已知的事实出发,再向下推出一个新的事实,这和递归是不同的。
许多问题既可以用递归方法来处理,也可以用非递归方法来处理。
在实现递归时,在空间和时间上开销比较大,但符合人们的思路,程序容易理解。
人们可以不去考虑实现递归的过程细节,只须写出递归公式和递归结束条件(边界条件),则可很容易写出递归函数。
4.4 函数的调用
4.5 函数的嵌套调用
4.6 函数的递归调用
学习《C++程序设计》(第二版) 谭浩强 主编 第四章 关于函数的调用
4.4 函数的调用
4.5 函数的嵌套调用
4.6 函数的递归调用
4.4 函数的调用
函数调用的一般形式
调用函数的一般形式为:函数名(【实参表列】)
如果实参表列包括多个实参,对实参求值的顺序并不是确定的
很多C++系统(例如vc++和GCC)是按从右至左的顺序求解的。
函数调用的方式
按函数在语句中的作用来分,可以有3种函数调用方式:函数语句:把函数单独作为一个语句,并不要求函数返回一个值,指示要求函数完成一定的操作。
函数表达式:函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。
函数参数:函数调用作为一个函数的实参。
对被调用函数的声明和函数原型
函数声明:就是在函数尚未定义的情况下, 事先将该函数的有关信息通知编译系统,以便编译能正常运行。函数定义:对函数功能的确立,包括制定函数名,函数类型,形参及其类型,函数体等,它是一个完整的独立的函数单位。
其实,在函数声明中也可以不写参数名,而只写形参的类型
使用函数原型是C和C++的一个重要特点。
它的作用主要是:根据函数原型在程序编译阶段对调用函数的合法性进行全面的检查
函数原型的一般形式为;
函数类型 函数名(参数类型1,参数类型2)
函数类型 函数名(参数类型1,参数名1,参数类型2,参数名2)
第一种形式是最基本的形式,为了方便阅读,也允许在函数原型上加上参数名,但编译系统并不检查参数名,因此参数名是什么都无所谓。
有经验的程序编制人员一般都把main函数写在最前面,这样对整个程序的结构和作用一目了然,统揽全局,然后再具体了解各函数的细节。
此外,用函数原型来声明函数,还能减少编写程序时可能出现的错误。因为函数声明的位置一般和函数调用的位置比较近。
函数声明的位置可以在调用函数所在的函数中,也可以在函数外。
如果函数声明在函数的外部,在所有函数定义之前,(这就是对函数的外部声明),则在各个主调函数中不必对所调用的函数再做声明,作用域将是整个文件。
4.5 函数的嵌套调用
C++不允许对函数作嵌套定义,也就是说在一个函数中不能完整地包含另一个函数。在一个程序中每一个函数的定义多事互相平行和独立的。
C++虽不能嵌套定义函数,但是可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。
4.6 函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用(recursive)调用。C++ 允许函数的递归调用。
程序中不应该出现这种无休止的递归调用,而只应该出现有限次数的、有终止的递归调用,这可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。
包含递归调用的函数称为递归函数。
一个递归的问题可以分为回溯和递推两个阶段。
如果要求递归过程不是无限制进行下去,必须具有一个结束递归过程的条件。
递推法的特点是从一个已知的事实出发,按一定规律推出下一个事实,再从这个新的已知的事实出发,再向下推出一个新的事实,这和递归是不同的。
许多问题既可以用递归方法来处理,也可以用非递归方法来处理。
在实现递归时,在空间和时间上开销比较大,但符合人们的思路,程序容易理解。
人们可以不去考虑实现递归的过程细节,只须写出递归公式和递归结束条件(边界条件),则可很容易写出递归函数。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C++联合体转换成C#结构的实现方法
- C#中的尾递归与Continuation详解
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结