首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载 | ||
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试 MPA考试 | 中科院 |
||
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT 新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语 |
||
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证 华为认证 | Java认证 |
||
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格 报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师 人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平 驾驶员 | 网络编辑 |
||
卫生资格 | 执业医师 | 执业药师 | 执业护士 | ||
会计从业资格考试(会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师 注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师 |
||
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师 质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师 设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师 城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师 |
||
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏 |
第5章 函数
【考点一】 函数定义在标准C+ +中,函数的定义形式为:<返回类型><函数名>(<形参列表>){<函数体>}<函数名>一般是标识符,一个程序只有一个main函数,其他函数名可随意取(当然,必须避免使用C+ +的关键字),好的程序设计风格要求函数名最好是取有助于记忆的名字,如getchar函数,通过函数的名字可以知道函数的功能,这无疑会增加程序的可读性。<形参列表>是由逗号分隔的,分别说明函数的各个参数。形参将在函数被调用时从调用函数那里获得数据。在C+ +中,函数形参列表可以为空,即一个函数可以没有参数。但即使函数形参列表为空,括起函数参数的一对圆括号也不允许省略。<返回类型>又称函数类型,表示一个函数所计算(或运行)的结果值的类型。如果一个函数没有结果值,如函数仅用来更新(或设置)变量值、显示信息等,则该函数返回类型为void类型。一个没有返回值的函数类似于一些程序语言(如pascal语言)中的过程(procedure)。由一对花括号括起来的<函数体>是语句的序列,它定义了函数应执行的具体操作。需要注意的是,C+ +不允许函数定义嵌套,即在一个函数体内不能包含有其他函数的定义。
【考点二】 函数调用C+ +中函数调用的一般形式为:<函数名>(<实参表>)当调用一个函数时,其实参的个数、类型及排列次序必须与函数定义时的形参相一致,也就是说实参与形参应该一对一地匹配。当函数定义时没有形参,则函数调用时,<实参表>亦为空。依据对函数返回值的使用方式,函数的调用方法可分为以下几种:(1)语句调用,这通常用于不带返回值的函数。这种情况下,被调用函数作为一个独立的语句出现在程序中。(2)表达式调用。将被调用函数作为表达式的一部分来进行调用。它适用于被调用函数带有返回值的情况。(3)参数调用。被调用函数作为另一个函数的一个参数进行调用。
【考点三】 函数原型在C+ +中,函数在使用之前要预先声明。这种声明在标准C+ +中称为函数原型(function prototype),函数原型给出了函数名、返回类型以及在调用函数时必须提供的参数的个数和类型。函数原型的语法为:<返回类型><函数名>(<形参列表>);(注意在函数原型后要有分号)实际上函数原型说明有两种形式:(1)直接使用函数定义的头部,并在后面加上一个分号。(2)在函数原型说明中省略参数列表中的形参变量名,仅给出函数名、函数类型、参数个数及次序。注意:在C+ +中,在调用任何函数之前,必须确保它已有原型说明。【考点四】 函数返回类型根据函数是否带有参数以及函数是否有返回值,可以将函数分为如下四类。
1.带参数的有返回值函数定义形式为:<返回类型><函数名>(<参数列表>){<语句序列>}
2.不带参数的有返回值函数定义形式为:<返回类型><函数名>(){<语句序列>}
3.带参数的无返回值函数定义形式为:void<函数名>(<参数列表>){<语句序列>}
4.不带参数的无返回值函数定义形式为:void<函数名>(){<语句序列>}
【考点五】 函数参数C+ +中,函数之间传递参数有传值和传地址两种传递方式。此外,C+ +还提供了默认参数机制,可以简化复杂函数的调用。
1.参数的传递方式(1)传值传值是将实参值的副本传递(拷贝)给被调用函数的形参。它是C+ +的默认参数传递方式,在此之前的多数函数参数传递都是传值。由于传值方式是将实参的值复制到形参中,因此实参和形参是两个不同的变量,有各自的存储空间,可以把函数形参看作是函数的局部变量。传值的最大好处是函数调用不会改变调用函数实参变量的内容,可避免不必要的副作用。(2)传地址有时我们确实需要通过函数调用来改变实参变量的值,或通过函数调用返回多个值(return语句只能返回一个值),这时仅靠传值方式是不能达到目的。
2.默认参数在C+ +中,可以为参数指定默认值,在函数调用时没有指定与形参相对应的实参时就自动使用默认值。默认参数可以简化复杂函数的调用。默认参数通常在函数名第一次出现在程序中的时候,如在函数原型中,指定默认参数值。指定默认参数的方式从语法上看与变量初始化相似。
【考点六】 函数重载如果能用同一个函数名字在不同类型上做相类似的操作就会方便很多,这种情况即为函数重载。其实这一技术早已用于C+ +的基本运算符。例如加法操作只有一个运算符+,但它却可以用来做整型数、浮点数和指针的加法运算。将这一思想推广到函数,即为函数重载。 【考点七】 内联函数C+ +引入内联(inline)函数的原因是用它来取代C中的预处理宏函数。内联函数和宏函数的区别在于,宏函数是由预处理器对宏进行替换,而内联函数是通过编译器来实现的,因此内联函数是真正的函数,只是在调用的时候,内联函数像宏函数一样的展开,所以它没有一般函数的参数压栈和退栈操作,减少了调用开销,因此,内联函数比普通函数有更高的执行效率。在C+ +中使用inline关键字来定义内联函数。inline关键字放在函数定义中函数类型之前。不过,编译器会将在类的说明部分定义的任何函数都认定为内联函数,即使它们没有用inline说明。
【考点八】 递归函数如果一个函数在其函数体内直接或间接地调用了自己,该函数就称为递归函数。递归是解决某些复杂问题的十分有效的方法。递归适用以下的一般场合。(1)数据的定义形式按递归定义。(2)数据之间的关系(即数据结构)按递归定义,如树的遍历,图的搜索等。(3)问题解法按递归算法实现,例如回溯法等。使用递归需要注意以下几点:(1)用递归编写代码往往较为简洁,但要牺牲一定的效率。因为系统处理递归函数时都是通过压栈/退栈的方式实现的。(2)无论哪种递归调用,都必须有递归出口,即结束递归调用的条件。(3)编写递归函数时需要进行递归分析,既要保证正确使用了递归语句,还要保证完成了相应的操作。
希望与更多计算机等级考试的网友交流,请进入计算机等级考试论坛
更多信息请访问:考试吧计算机等级考试栏目
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |