31函数基础知识Word文档格式.docx
- 文档编号:19531191
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:10
- 大小:45KB
31函数基础知识Word文档格式.docx
《31函数基础知识Word文档格式.docx》由会员分享,可在线阅读,更多相关《31函数基础知识Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
课程知识点讲解
函数的定义方法[20分钟]
引入:
在设计复杂的应用程序时,把整个程序划分为若干功能较为单一的程序模块,然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来,这种策略被称为模块化程序设计方法。
主题:
C++语言中,函数是程序的基本组成单位,因此可以很方便地用函数作为程序模块来实现模块化程序设计。
使用函数,不仅可以实现程序的模块化,程序设计的简单和直观,提高了程序的易读性和可维护性,而且还可以把程序中常用到的一些算法或计算编成通用函数,以供调用,这样既减轻程序员编码的工作量,又确保了程序的正确性和一致性,即提高了程序编码的重用性。
而正确使用函数,则需解决三个方面的问题:
函数能完成什么操作、函数能对什么数据进行操作以及函数操作完毕能获得什么成果。
这就是函数的三要素:
功能、参数和返回值。
在C++中同样是通过定义来确定函数三个要素。
函数的一般格式:
<
类型标识符>
<
函数名>
(<
形式参数表>
)
{
变量声明部分>
函数功能部分>
}
上述定义中:
(1)函数名是函数的标识符;
(2)类型标识符指明函数执行完后,返回的结果的数据类型;
(3)形式参数表又称形参变量表,指明被处理数据的类型与个数;
(4)函数体由一对花括号({……})之间的语句集构成,完成具体的数据处理工作。
在定义函数时应注意如下几点:
(1)应养成良好的编程风格,尽量做到函数名应“见名知义”。
(2)函数类型说明符必须是系统已有的或用户程序中自定义的数据类型。
若函数无返回值,要说明为void类型。
另外,C++编译器允许在返回值为标准整型时可省略类型说明符,但这会降低程序的清晰度,因此尽量不要这样做。
(3)在定义函数时,每个形参变量必须单独指明类型,而初学者最易出现如下的错误:
floatgetMax(floatnA,nB){……}
正确的形式应该是:
floatgetMax(floatnA,floatnB){……}
(4)可以定义空函数。
如:
voidnothing(){}
其主要作用是在调试主函数时,用其来替代未编制的函数进行调试,以验证程序整体逻辑是否正确。
[简述函数的定义方法]
示例讲解:
示例3.1.1试编写一求两实数中最大值的函数。
分析与解决:
见P120
[通过示例简单讲述函数的定义]
练习:
练习3.1.1编写一简单口令验证函数。
解决:
solution-code/E3-1-1.cpp
函数参数和函数的值[10分钟]
1.函数参数
由上述可知,大多数情况下,函数是带参数的。
如在函数定义时带了形参数,那么在调用函数时,就必须带参数。
主调函数和被调用函数之间主要通过参数和返回值来传递数据。
函数在定义时填入的参数称之为形式参数(formalparameter),简称形参,它们同函数内部定义的变量具有相同的作用。
形参的定义是在函数名之后和函数开始的花括号之前,它代表被操作的抽象数据。
形参是变量,在函数被调用时,系统给形参变量分配内存。
而函数在被主调函数调用时填入的参数,称之为实际参数(actualparameter),简称实参。
在调用时,实参会按一定的传递机制,将值传给形参变量。
可以通过下面的示例来进一步了解函数的形参和实参。
示例3.1.2调用函数的数据传递。
解答:
具体见P122
定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,只有在发生函数调用时,函数sum中的形参才被分配内存单元,以便接收从实参传来的数据。
在调用函数运行结束后,形参所占的内存单元将被释放;
在函数调用时提供的实参,可以是常量、变量或表达式。
在C++函数中实参变量对形参变量的数据传递是一种“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。
在调用函数时,系统会临时给形参分配存储单元。
请注意:
实参单元和形参单元是不同的存储单元。
调用结束后,形参单元被释放,实参单元仍保留并维持原值。
因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。
2.函数的返回值
通常,函数的调用可以使主调函数得到一个确定的函数值,这就是函数的返回值。
对于C++函数中的函数值来说,应注意如下几个方面:
(1)函数的返回值是通过函数中的return语句获得的。
Return语句将被调用函数中的一个确定值带回主调函数中去。
一个函数可以有多个return语句。
一旦程序执行到任何一条return语句就说明函数执行结束,并将结果返回到主调函数中。
(2)函数值的类型,即函数返回值的类型。
如函数有返回值,那么这个值应属于一个确定的类型,这需要在定义函数时指定函数值的类型。
如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准,即函数类型决定返回值的类型。
函数的调用[20分钟]
函数在正确定义之后就可以通过调用实现函数功能。
要实现函数的正确调用,应当首先了解函数的调用原理和过程。
下图是函数调用原理和过程示意图,其中的t表示时间。
当主程序执行函数调用时,它自已的执行暂时中断,执行控制权转到被调用函数,使该函数开始执行。
直到函数执行完毕,函数返回使执行控制权回到主程序,主程序才从中断点之后继续下去。
调用其他函数的代码部分称为“主程序”。
也有人将两者分别称为“主调函数”和“被调函数”。
由此可见,主程序和被调函数的关系是相对的,因为一个函数里还可能调用另一函数,使调用形成一种层次性。
读者应理解在函数调用过程中程序执行的控制转移关系。
1.函数调用一般形式
上述分析可以了解函数的一般调用原理和过程,但如何在C++程序中实现函数的调用,则需要解决两方面的问题:
一是正确传递参数,使实参表与形参表匹配;
二是正确接收返回值,从而获得函数的运算结果。
故在C++程序中函数调用的一般格式为:
(<
实参表>
);
如果调用无参函数,则“实参表列”可以没有,但括号不能省略。
如果实参表列包含多个实参,则各参数间用逗号隔开。
实参与形参的个数应相等,类型也应匹配。
实参与形参按顺序对应,一对一地传递数据。
但应注意,如果实参表列包含多个实参,对实参求值的顺序并不是确定的。
2.函数调用的方式
按函数在语句中的作用来分,可以有以下3种函数调用方式:
(1)函数语句
把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定的操作。
(2)函数表达式
函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。
(3)函数参数
函数调用作为一个函数的实参。
3.函数的声明
在C++中是允许函数间相互调用的。
但必须满足下面这些条件:
(1)被调用函数必须是已经存在的函数(是库函数或者是用户自定义函数);
(2)如果使用库函数,还应该在文件头部用#include命令将有关头文件“包含”到本程序文件中来。
(3)如果是用户自定义函数,而该函数与主调函数在同一个程序文件中,且位于主调函数之后,则必须在调用此函数之前声明被调用函数。
所谓函数声明(declare),就是在函数尚未定义的情况下,事先将该函数的有关信息告知编译系统,以便编译器能正常进行。
示例3.1.3编制程序,从键盘输入某员工本月的工资,调用函数计算其个人所得税。
具体见P126
函数的定义和声明不是同一件事情。
定义是对函数功能的确立,包括指定函数名、函数类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。
而声明的作用则是把函数的名称、函数的类型以及形参列表的个数、类型和顺序告知编译系统,以便在编译时,据此对照检查。
从程序中可以看到函数的声明与定义中的第1行(函数定义的首部)基本相同,只是声明时后面加了个分号,而定义则是函数体。
其实,在函数声明时可以不写形参名,而只需要给出形参的类型。
这种函数声明称为函数原型(functionprototype)。
它是C++的一个重要特点。
它的主要作用是:
根据函数原型在程序编译阶段对调用函数的合法性进行检查。
也就是说,编译器只对调用函数时提供的实参类型进行检查,而不会对实参变量名进行检查,即不要求形参变量名与实参变量名相同,只要求对应的形参变量与实参变量的类型相同或相兼容。
通常函数原型有两种形式:
(1)函数类型函数名(参数类型1,参数类型2…);
(2)函数类型函数名(参数类型1参数名1,参数类型2参数名2…);
第
(1)种形式是基本的形式。
有时为了便于阅读程序,在函数原型中加上参数名就形成了第
(2)种形式,但编译系统并不检查参数名。
函数在声明的位置可以在调用函数所在的函数体中,也可在函数体之外。
如果函数声明放在函数体的外部,则应当放在所有函数定义之前,这样就避免了各个主调函数对其的重复声明。
[详细讲述函数的调用过程]
函数的嵌套调用[10分钟]
在C++中是允许嵌套调用的,但是不允许对函数作嵌套定义,也就是在一个函数中不能完整地包含另一个函数,但是可以在函数中声明和调用另外的函数。
在C++中的同一个程序中每一个函数的定义都是互相平行和独立的。
嵌套调用函数,是在调用函数的过程中,又调用另一个函数。
任务解决[20分钟]
任务:
通过前面章节的学习,完成了HNS软件学院专用财务计算器软件的实现任务。
为保证软件质量,决定对该软件的设计和编码进行评审。
其结果认为该程序具有:
设计不利于任务分解、代码利用率不高,存在重复代码、程序结构和层次不够清晰等缺点。
造成以上缺陷的主要原因是模块没有细分,所有的功能程序都堆砌在主函数中不利于代码的重用和维护。
为此,决定指派您运用所学的函数知识,完成该软件的重构,即将不同的功能程序段封装到不同的函数中。
其主要任务如下:
1.完成财务计算模块子菜单和住房公积金计算功能模块重构;
2.完成算术计算模块子菜单和求平方功能模块重构。
具体见P130-133
精练[45分钟]
[课后完成]
请您根据本节所学的知识编写相应的程序解决项目中的任务2。
分析:
参照演示部分,将计算器算术计算模块的进行重构。
将其分成两个函数:
1.算术计算模块子菜单
主要为用户提供一个简易的操作菜单功能,该功能对应函数的定义为:
voidarithmeticMenu()
因为该函数只是实现一个菜单功能故将其定义为无参无返回值型的。
2.平方运算函数
主要是实现平方运算的功能,其算法和实现可参照第2章相关内容。
因其功能的独立性,故将其独立成一函数,该函数的定义如下:
voidsquare();
3.结果显示函数
可以直接调用本节演示部分的显示函数。
具体见P3-1.cpp
小结[2分钟]
通过本节学习,使我们主要学习了如下内容:
1.函数和函数的定义
函数是能完成特定数据处理功能的程序模块,它是由:
返回值类型、函数名和参数表三要素组成。
在程序中使用函数的主要具有下面一些优点:
(1)实现任务分解,将复杂的综合任务分解为若干个简单的子任务,每个子任务由一个函数完成,体现了模块程序设计思想;
(2)同类任务由一个函数完成,提高代码效率;
(3)函数使程序结构清晰、层次分明,提高了程序的结构化程度。
2.函数调用
要实现函数的正确调用应注意两方面的问题:
一是正确传递参数,使实际参数表与形式参数表匹配;
二是正确接返回值。
函数调用有3种不同的方式:
(1)函数语句;
(2)函数表达式;
(3)函数参数。
3.函数的嵌套调用
C++中是允许函数嵌套调用的,但不允许嵌套定义函数,也就是说,在一个函数中不能完整地包含另一个函数,但是可以在函数中声明和调用另外的函数。
函数间是相互平行和独立的。
考核点
考核点1:
函数的定义
考核点2:
函数的调用
作业答案
1:
函数的三要素是返回值类型、函数名和参数表。
2:
函数类型是指:
函数返回值的类型。
3:
函数形式参数的实质是一个(c)。
A).表达式b).常量c).变量d).指针
4:
以下各函数中,返回值不是int类型值的函数有(CD)
A)intf1(charch)B)intf2(inta)
C)f3(doubled)D)charf4(boolflag)
5:
编写函数,求整数m,n的最小公倍数。
并编写主函数对其调用(提示:
最小公倍数=(m×
n)/最小公约数)。
答:
solution-code/3-1-T5.cpp
6:
编写函数,从键盘输入一整数x,并判别其是否为素数。
只能被1和自已整除的整数称为素数,如:
3,5…)。
solution-code/3-1-T6.cpp
扩展练习
学生问题汇总
(注:
汇总学生在学习过程中容易出现的问题)
教学后记
在此写上个人在授课过程中所遇到的教案中所没有涉及到的特殊问题及其解决方法或解决方案,也可以总结自己的授课体会,课程体系、教材的不足等。
授课教师(签名):
授课时间:
授课班级:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 31 函数 基础知识
![提示](https://static.bdocx.com/images/bang_tan.gif)