c--程序设计教案.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 教案
- 资源描述:
-
海南软件职业技术学院《C++程序设计》教案 《C++程序设计》教案 海南软件职业技术学院 Hainan Software Profession Institute (2006-2007学年度第一学期) 教师姓名: 季 文 天 系 部: 软 件 工 程 系 授课专业: 软 件 技 术 授课班级: 05软件技术 3班 75 目录 课题01:Visual C++6.0开发环境 2 课题02:C++数据类型、表达式、语句 5 课题03: 数组 7 课题04: 结构类型 11 课题05:函数 13 课题06:函数参数 16 课题07:内联函数与递归函数 19 课题08:函数重载 21 课题09: 指针 23 课题10: 指针与数组、字符串指针 26 课题11: 指针与函数 28 课题12: 指针与动态分配内存 31 课题13: 引用 33 课题14: 类与对象 36 课题15: 类的静态成员及常量成员 39 课题16: 友元 43 课题17: 运算符重载 46 课题18: 继承与派生 49 课题19: 派生关系中的二义性处理 53 课题20: 虚基类 56 课题21: 多态性与虚函数 59 课题22: 模板 62 课题23: 文件、流及C++的流类库 66 课题24: 插入与提取运算符的重载 69 课题25: 磁盘文件I/O 70 课题01:Visual C++6.0开发环境 一、教学目标: 1.掌握Visual C++6.0开发工具的选单、工具栏、项目、工作区等概念 2.掌握使用VC编写控制台应用程序 3.掌握使用VC进行程序调试 二、教学重点: 1、掌握Visual C++6.0开发工具的选单、工具栏、项目、工作区等概念 三、教学难点: 1、使用VC编写控制台应用程序。 2、使用VC进行程序调试 四、课时安排: 2节课 五、教具准备: 多媒体教室 六、教学方法: 讲授 七、教学过程: (一)、复习导入 Visual C++是Microsoft公司推出的目前使用极为广泛的基于Windows平台的可视化开发环境。Visual C++ 6.0 是在以往版本不断更新的基础上形成的,由于其功能强大、灵活性好、完全可扩展以及具有强有力的Internet支持,在各种C++语言开发工具中脱颖而出,成为目前最为流行的C++语言集成开发环境。 (二)、讲授新课 1、开发环境概述 :板书或幻灯片演示下图 :Visual C++6.0开发环境包括: l 标题栏 l 工具栏 l 选单 l 项目工作区窗口 l 输出窗口 l 状态栏 l 文档窗 依次介绍各项功能,详细介绍选单、工具栏、项目工作区。 2、简单的控制台应用程序 使用Appwinzard创建一个控制台应用程序,使学生理解“工程”概念,熟悉项目的程序框架,以及如何添加程序代码、编译、运行。 以下面程序为例,讲述如何建立控制台应用程序: 【例Ex_Hello】 #include <stdafx.h> int main(int argc,char* argv[]) { cout<<”Hello world”; return 0; } 【运行结果】: 【例Ex_Hello】利用投影演示P18例Ex_Hello。 3、程序调试 在软件开发过程中,大部分的工作往往体现在程序的调试上。调试一般按这样的步骤进行: “修正语法错误—设置断点—启用调试器—控制程序运行—查看和修改变量的值” l 修正语法错误 调试最初的任务主要是修正一些语法错误,比如: n 未定义或不合法的标识符 n 数据类型或参数类型及个数不匹配。 l 设置断点 用C++调试的断点可以有以下类型: n 为之断点 n 数据断点 n 条件断点 l 启用调试器 Visual C++ 6.0创建的项目,系统会自动为项目创建Win32 Debug版本的默认配置,选择”build”选单---“start debug”---“Go”、”step into” 、 “Run to cursor”命令,就可以启动调试器了。 l 控制程序运行 可以通过”step into ,step over ,step out ,run to cursor”控制程序运行。 l 查看和修改变量的值 在程序调试的时候VC会自动显示”Watch”和”Variables”两个调试窗口,通过这两个窗口可以查看或修改当前运行程序的变量的值。 课题02:C++数据类型、表达式、语句 一、教学目标: 1.掌握C++程序结构、基本组成 2.掌握C++的基本数据类型、基本输入/输出 3.掌握C++运算符、表达式 4.掌握C++基本语句 二、教学重点: 1.C++程序结构、基本组成 2.C++基本数据类型、输入输出 三、教学难点: 1.C++运算符、表达式 2.C++基本语句 四、课时安排: 2节课 五、教具准备: 多媒体教室 六、教学方法: 讲授 七、教学过程: (一)、复习导入 C++是在20世纪80年代初期由贝尔实验室设计的一种在C语言的基础上增加了面向对象支持的语言,她是目前应用最为广泛的编程语言。今天我们来学习他的基本结构、数据类型、运算符和表达式、基本语句。 (二)、讲授新课 1、C++程序结构 一个C++程序往往由预处理命令、语句、函数、变量和对象、输入与输出以及注释几个部分组成。 l 预处理命令 包括:宏定义命令、文件包含命令和条件编译命令 l 语句 语句是组成程序的基本单元 l 函数 一个C++程序是由若干个函数组成。一个程序中有且仅有一个主函数main. l 变量和对象 C++是面向对象的语言,所以在C++中相比C语言多了对象,她是“类”的实例 l 输入输出 程序中总是少不了输入和输出语句。 l 注释 注释可以提高程序的可读性、帮助程序员理解,在程序运行中不执行。 在编写C++程序时,还要注意程序的书写风格,要注意缩进和注释。在编写程序时,标识符应该遵循以下原则: l 合法性 l 有效性 l 异读性 2、基本数据类型 C++数据类型分为基本数据类型、派生类型以及复合类型3类。基本数据类型包括: l char l int l float l double 以及上述类型的变种,包括 l short l long l signed l unsigned l void P29表2.1列出了C++的基本数据类型 根据数据在程序中的可变性,我们将数据分为: l 常量 n 整型常量 n 浮点型常量 n 字符常量 n 字符串常量 n 符号常量 l 变量 n 变量定义 n 变量的初始化 要注意一个未初始化的变量不是没有数值,而是取决于变量在系统中的存储形式,她可能是系统的默认值或无效值。 3、基本输入、输出 C++中是通过标准的输入流cin和标准输出流cout来实现数据的输入输出。 【举例:Ex_CoutEnd】 【举例:Ex_Algorism】 4、运算符和表达式 C++用来记述运算的符号称为运算符,按照操作数的个数可以分为: n 单目运算符 n 双目运算符 n 三目运算符 根据其功能可以分为: n 算术运算符 n 赋值运算符 n 关系运算符 n 逻辑运算符 n 位运算符 变量、常量通过一个或多个运算符组合起来就构成了表达式,比如有关系运算符构成的表达式成为关系表达式。 5、基本语句 C++提供了如表达式语句、复合语句、选择语句和循环语句等,满足了结构化程序设计所需要的3中基本结构。 n 选择语句 n 条件语句 if else n 开关语句 switch n 循环语句 n while n do … while n for 以上基本语句和C语言保持一致。 课题03: 数组 一、教学目标: 1.了解构造类型的意义 2.了解数组的概念 3.掌握一维数组、多维数组的定义 二、教学重点: 1.一维数组的定义 2.数组的基本操作 三、教学难点: 1.多维数组将维处理过程及多维数组的存储 2.字符串数组的使用 四、课时安排: 2节课 五、教具准备: 多媒体教室 六、教学方法: 讲授 七、教学过程: (一)、复习导入 在计算机所处理的数据中,最常见的,也是最需要由计算机高速处理的数据是成批出现的同一类型的数据,C++语言中把这类数据称为数组。例如: · 监测系统在一段时间内获得的检测、采样值,可能是int 型或float 型数 据的数组; · 一个管理系统的数据库,可能是一系列结构类型(记录)数据的序列; · 一幅电视图像,可能是其每个像素的颜色及灰度值(整型数)的二维阵列。 任何一种类型的一批数据,都可以组成数组,例如int 型,float 型,char 型数据可以组成数组;这些基本类型的派生类型(如long 型,double 型,unsigned char 型)的数据,枚举、结构、联合类型的数据,以至由用户或系统定义的类(类型)的对象,都可以组成数组。 (二)、讲授新课 1、一维数组 由n 个同一类型数据组成的一维序列,构成一维数组,一维数组的下标为0,⋯,n-1。 1.一维数组的说明 任何一种已知类型数据都可说明为数组,数组说明的格式为: <类型名><数组名>[<元素数>]={<初值表>} ; 类型名:可以是基本类型名,基本类型的派生类型名,类名,枚举类型名, 结构,联合类型名(也可以是枚举、结构联合的类型说明)。关于指针数组将在下节说明。还有数组类型的数组就是多维数组了,也将在下面介绍。 数组名:标识符,数组名有两个附加作用: (1)是表示数组元素的下标变量。如array[2]表示数组的第三个元素。 (2)它还是一个指向数组的首元指针。 元素数:一个正整数,指出数组的元素个数,或数组的大小(size)。元素数要用方括号“[]”括起来。方括号[]不可缺省,元素数则有时可缺省,这时必须赋初值,系统按所赋的初值个数确定数组的大小。 初值表:可缺省。是由花括号{,}括起来且用逗号‘,’分开的初始化常 量值。例如: int list [100],A[10][10] ,B[]={4,3,2}; char ch[26]; complex com[4]={(3.2,4.7),(0.0,0.0)}; 其中,数组list[100]未赋初值。 数组A[10][10]为一个二维数组,未赋初值。 数组B[]已赋初值,元素数为3。 数组com[4]是用户定义的complex 类型的数组,数组有4 个元素,其中前 两个元素已赋初值,初值分别为(3.2,4.7),(0.0, 0.0)。 2.数组的操作——下标变量 C++语言未提供对于数组整体进行操作的运算符和运算。对于数组的操作是 通过对于其元素,即下标变量进行的。下标变量的格式为: <数组名>[<下标>] 下标:整数,或整型表达式,其取值范围为0~n-1,n=数组元素总数,例 如: int A[4]; 共有四个下标变量:A[0],A[1],A[2],A[3]。 对于下标变量可进行下列操作。 (1)赋值。可以三种方式进行: ①初始化: int A[4]={1,2,3} ; 相当于一次为A[0],A[1],A[2] 赋值为1,2,3。 ②赋值语句: A[3]= 4* A[1] ; 相当于把4*2=8 赋值A[3]。 ③输入语句: cin>>A[0] ; 或 for(int i=0;i<4;i++) cin>>A[i]; 后者可通过键盘操作,为数组的四个元素依次赋值。 (2)一般运算。 下标变量可与同一类型的一般变量一样参加它所允许的运算。如: A[0]+= A[2]++; cout<<A[0]<<” ”<<A[1]*A[2]; 等等。 下标也可以是一个表达式,如: int A[4]={1,2,3,4}; A[3]=A[A[2]-A[1]]*4; 下标表达式应注意其值应保持在0~n-1 范围之内。 2、多维数组 若干同一类型的数据m 列n 行的矩阵,则可称为二维数组,二维数组亦可视为一维数组的数组。 int A[m][n]; 说明了一个二维数组,它有m×n 个元素,它也可以视为由n 个一维数组int A[m]组成的(一维)数组。类似地,还可以说明三维,四维数组,二维以上的数组统称为多维数组。 1.说明和初始化 多维数组的说明(以二维为例): <类型名><数组名>[<行数>][<列数>] 类型名:同前节说明。 数组名:同前节说明。 行数:正整数。 列数:正整数。 例如: char ch[2][3]; 该二维数组共有2 行3 列,元素个数为2*3= 6。 在二维数组中,为数组赋初值的方式有: int a[2][3]={{1,2,3},{4,5,6}}; 亦可写为: int a[2][3]={1,2,3,4,5,6}; 二者效果是一样的。系统将按逐行的次序顺序为各元素赋值。其次序为: a[0][0],a[0][1],a[0][2], a[1][0],a[1][1],a[1][2] 对于三维以上的高维数组,其赋值方法是一样的。 2.二维数组的操作 对于二维数组的操作,同样是通过对其元素即下标变量的操作来进行的。 操作中应注意: (1)注意下标表达式的取值范围: char A[m][n]; 则下标变量A[i][j]中i 的值应在0~m-1 之间,j 的值应在0~n-1 之间。 (2)当只有一个下标时: A[i](O <= i <= n-1) 表示的是一个一维数组,其元素个数为n,这些元素可用下标变量: A[i][0],A[i][1],⋯,A[i][n-1] 来表示。 (3)更高维的数组,其定义和操作类似。 3、 数组与字符串 从表面上看,一个字符串就是一个字符数组,但在C++语言中,二者并不完全相同,读者在涉及到字符串处理时,必须注意。字符串是一个以串尾符'\0'结尾的字符类型数组。从下面的例子可看出其区别: char string1[7]="China"; char string2[ ] = "China"; char string3[7]= { 'c','h','i','n','a' }; char string4[7]= { 'c','h','i' ,'n','a','\0'}; 这说明了四个字符型数组,它们是互不相同的。 课题04: 结构类型 一、教学目标: 1.了解结构类型的意义 2.掌握结构类型的定义及应用方法 3.掌握结构数组的使用方法 二、教学重点: 1.结构类型的定义 2.结构类型使用方法 三、教学难点: 1.结构数组的使用方法 四、课时安排: 2节课 五、教具准备: 多媒体教室 六、教学方法: 讲授 七、教学过程: (一)、复习导入 实际应用中往往需要把若干种不同类型的数据组合为一个导出类型,这就是结构类型。数组是把若干相同类型的数据放在一起,结构则是把若干不同的数据放在一起。例如,一个公司雇员的数据可能包括: char name[20]; enum {male,female}sex; float salary; char phone[11]; 那么我们如何处理这样的数据呢?下面就让我们来学习一种新的构造数据类型—结构体。 (二)、讲授新课 对公司雇员数据进行处理或检索时,把它们组成结构类型会更方便: struct Employee { char name[20]; enum {male,female}sex; float salary; char phone[11]; }; C++语言中的结构是作为类似于类的概念处理的,这一点将在以后学习中说明,在本章结构(以及联合)类型仅作为一种构造数据类型。 1、结构类型与结构变量说明 结构类型说明的格式为: struct <类型名> { <成员表>}; 类型名:标识符。 成员表:<类型> <成员1>;<类型> <成员2>;...<类型> <成员n>; 结构类型的变量说明的格式为: [struct] <结构类型名> <变量名表>; 变量说明中的关键字struct 可以省略(C 语言中不可),变量名表与一般 变量说明一样,其赋初始值的方法可从下面的例子中了解: struct Employee { char name[20]; enum {male,female}sex; float salary; char phone[11]; }; // 结构类型Employee 的定义 struct Employee gy1,gy2; // 变量gy1,gy2 的说明 Employee gy3,gy4={“John Smith”,male,2107.5,02223501234}; // 变量gy3,gy4(赋初值)的说明 结构类型及其变量的说明也可放在一起: struct Employee { char name[20]; enum {male,female}sex; float salary; char phone[11]; }gy1,gy2; 2、结构变量的引用和赋值 一个结构变量由若干分量组成,对结构分量的存取由圆点运算符“.”实现,例如,在上例中,雇员gy1 的姓名可表示为 gy1.name,其电话号码可表示为gy1.phone。因此,为结构变量赋值,除了在变量说明中赋初值(如为gy4 赋初值)的方法外,还可以用赋值语句或输入语句为结构分量赋值的方法: gy3.name = “Tom Green”; gy3.sex = male; cin >> gy3.salary; cin >> gy3.phone; 无论采用哪种方法为结构分量赋值,都必须保证类型一致。 C++语言还允许直接对结构变量赋值,下面的赋值语句也是允许的: gy1 = gy4; gy3 = gy4; 一般,数组变量不能这样直接赋值。 3、结构数组 结构类型的数据也可以组成数组,称为结构数组。结构数组在许多实际应用问题中的采用非常普遍,例如,通讯录,学生成绩单,商业销售记录,人事档案,资料登记表等等。下面的结构数组是一个公司的雇员档案: struct Employee { char name[20]; enum {male,female}sex; float salary; char phone[11]; }; Employee efile[100]; 数组的每一个分量是一个雇员的档案数据。 课题05:函数 一、教学目标: 1.了解函数的作用、意义 2.掌握函数的说明、调用、返回 3.掌握函数的使用方法 二、教学重点: 1.函数的说明 2.函数的调用 三、教学难点: 1.函数返回 四、课时安排: 2节课 五、教具准备: 多媒体教室 六、教学方法: 讲授 七、教学过程: (一)、复习导入 函数概念是C++语言中最重要的概念之一,函数设计是程序设计的主要部分或实质部分。函数在C++程序设计中的意义体现在四个方面。 (1)从历史上说,函数的思想来源于子程序,(如BASIC 语言中的子程序),把程序中反复出现的相同或相近的程序改写成子程序,可以大大缩短程序的长度。函数实际上是参数化的子程序。 (2)从结构化程序设计(SP)的观点来看,函数绝不仅仅是为了缩短程序长度,更重要的是通过函数设计,可以把整个程序要完成的整体的复杂的计算任务,分解为一个个较小的,相对简单的子任务。这种模块化的程序易设计,易阅读,易调试,易维护,较少出错。 (3)从运算的角度说,函数就是C++语言提供的由用户定义的运算。运算符是系统提供的运算,而函数是由用户自己定义的运算。 (4)作为面向对象程序设计(OOP)语言的C++,以类为核心,类由数据和方法组成,方法就是对数据的运算和处理,亦即类的函数成员。故函数设计同样是OOP 的重要组成部分。 (二)、讲授新课 1、函数的说明 C++程序允许两种函数说明语句的形式,我们把它们分别称为函数原型(或 函数声明)和函数定义。 [1].函数原型 函数原型(亦称函数声明)用来指出函数的名称,类型和参数,其格式为: [〈属性说明〉]〈类型〉〈函数名〉(〈参数表〉); 例如: int add (int a, int b); inline void swap (float & s, float & t); void print (char *) ; 属性说明:可缺省,一般可以是下面的关键字之一:inline,static,virtual, friend 等。 inline 表示该函数为内联函数; static 表示该函数为静态函数; virtual 表示该函数为虚函数; friend 表示该函数为某类(class)的友元函数。 其含义的细节在后面有关章节介绍。 类型:指函数的返回类型。C ++语言规定除了特别情形(main()函数和类的构造函数,析构函数)之外,所有函数都必须在说明中指出返回类型。一个函数可能有多个结果,不一定都用返回值的方式输出(还可通过全局变量,引用参数和指针等方式传出)计算结果,但函数调用作为一个表达式,该表达式的值则只能是函数的返回值。 函数名:一个标识符。 参数表:它可能为空,void 或〈类型〉〈参数名〉,〈类型〉〈参数名〉… 的 形式。 例如: main() print(void) cuberoot(float x) add(int a,int b) 其中,函数原型中的参数表可忽略参数名,如: int add(int, int) void swap(float &, float &) 它们与函数原型int add (int a, int b); void swap (float & s, float & t); 是等价 的,事实上在编译时,函数原型中的参数名是被忽略的,后者的参数表中的符 号`&`表示该参数为引用型参数,用以区别于一般的赋值型参数,其用法在下面 介绍。 [2].函数定义 函数定义与函数原型的主要区别是它还包括函数体,其格式为: [〈属性说明〉]〈类型〉〈函数名〉(〈参数表〉)〈函数体〉 属性说明,返回类型,函数名与函数原型一致,参数表中不可省略参数名。 函数体:由{和}括起来的复合语句即程序块。 program 5_1 的最后12 行就是一个函数定义。从函数说明语句的介绍,我们可以看到程序中各种语句的分类(说明语句,表达式语句,控制语句和复合语句)并不是一个简单的划分概念。函数定义本身是一种说明语句,但其函数体则是一个复合语句。而在函数体内部又可能包含说明语句,表达式语句,控制语句和复合语句。 总之,这种分类和区分是明确的,但它们之间又有互相包含的关系。 2、函数调用 函数调用是已定义函数的一次实际运行,(与某类型的一个变量和后文中某类的一个对象类似),函数调用是函数定义的一个“实例”。 函数说明中的参数称为形式参数(形参),函数调用中的参数称为实际参数(实参),函数调用一般出现在表达式中或独立形成一个函数调用语句,例如: xr=cuberoot(-q/2+a)+cuberoot(-q/2-a); swap (a, b); 函数调用的两要素是函数名和实参表: <函数名> (<实参表>) 实参表中的参数的类型、个数、顺序必须与函数说明的参数表(形参表)相一致。赋值型的实参可以是一个表达式。在上节program5_1 的main()中两次出现函数cuberoot(x)调用,其具体的调用实施过程如下: (1) 根据调用语句中的函数名(cuberoot)在整个程序中搜索同名函数定义; (2) 对实参数的参数个数,类型,顺序进行核对,判定是否与函数定义中的形参表对应一致,在上例中只有一个浮点型参数; (3) 根据参数的类型(值参数或引用参数)进行值参数的值传递或引用参数的换名,在上例中即是要把实参表达式的值计算出来赋给形参x; (4) 运行函数体代码; (5) 返回调用点,并返回所要求的函数值,即返回计算结果croot 的值。 3、函数的返回 函数的返回完成两项任务: (1) 把运行控制从函数体返回到函数调用点。在上例中就是在计算cuberoot (-q/2+a)之后再返回到语句xr = cuberoot () + cuberoot () 的计算过程中。 (2) 根据返回值要求,返回所需要的数据值。 函数的返回值有下面几种情形: 1.返回void 类型 如果函数无值返回,应说明为void 类型。例如: void print( ) { cout<<″Hello World !″}; void show( ) { cout<<″Wonderful C++!″}; 函数仅需完成打印和显示工作,不需返回任何数据,这类函数调用一般形成一 个函数调用语句。 未作类型说明的函数,系统认为是int 类型函数,应返回一整型值。 2.返回数值类型 最常见的函数是返回一个数值的函数。例如: int add(int a,int b); float cuberoot(float x); 这类函数的调用表达式可以出现在表达式语句中。 当函数要返回的数值不止一个时,情况比较复杂,一般它可以以结构或类的形式,也可以以结构,数组或对象指针类型方式实现,这样的实例在后面的章节可以见到。 3.返回引用类型 值返回方式是C 和Pascal 语言中唯一的返回方式,C++语言提供的引用返回概念是其特有的一种很强的功能,当函数定义中把该函数说明为某类型的引用类型时,该函数调用后返回的不单是值,而是包含返回值的变量(或对象)。由于返回引用与引用类型有关,所以这样的实例将在下节介绍。 课题06:函数参数 一、教学目标: 1.进一步了解函数的应用 2.了解函数参数 3.了解函数的值调用和引用调用 二、教学重点: 1.函数参数形式 三、教学难点: 1.函数值调用和引用调用 四、课时安排: 2节课 五、教具准备: 多媒体教室 六、教学方法: 讲授 七、教学过程: (一)、复习导入 函数的参数的设置和使用是函数设计中非常重要的部分。 (二)、讲授新课 1、函数参数 C++语言允许函数无参,有一个或多个参数,而且还支持不定个数参数的 函数。 (1) 无参函数:其函数说明为下列形式: void print(void); // 输出指定的数据 int getx(); // 输出变量x 的值 用void 或空表示无参。 (2) 一个或多个参数: 多数函数有一个或多个确定的个数、确定的类型和顺序的参数,例如: void sort(int n,char* array) {… };//对n 元整形数组array //进行排序 float max(float a,float b,float c) {… }; /* 求三个实数a,b,c 中最大者。*/ 等等。定义中应注意参数表的组成。因为在C++语言中,不同的函数是根据函 数名和参数表二者来区分的,只有二者完全一致才是同一函数。 (3) 不定个数参数: 有些应用问题中参数个数是变化的。例如设计一个电话计费函数,为了计 算通话费,不同的通话类型(如市话,长途,数据与通讯,BP 机等)有不同数 目的参数。 处理参数个数不定的情形,可有不同的途径。例如: void sort(int n,float * a); 这个函数可对n 长的浮点数组进行排序,n 是变化的;由于a 是数组的首 元指针,因此这个函数实际上是可以进行对任意多个浮点数排序的处理。 C++语言有的版本还提供一些库函数,支持处理形如: void abc(int i,… ); 的不定参数函数。 C++语言,允许参数表中包含无名参数,主要是为了区分函数,例如: int f(int a,int b){return a+b*b;} int f(int a,int b,int){return a*a+b;} 两个不同的函数同名,但由于第二个函数包含一无名参数,使得在调用时能够 被区分,f(x,y)是第一个函数的调用,f(x,y,0)是第二个函数的调用。 C++程序还允许为函数定义可缺省参数,这种函数调用时具有灵活性, 如: int sqrsum(int a,int b,int c=0){ return a*a+b*b+c*c; } 其中参数c 为可缺省参数,下面的调用方式都是合法的(x,y,z 为int 型变量): sqrsum(x,y,z) sqrsum(x+y,x-y) sqrsum(x,y) 参数表中可有任意多个参数指定为可缺省参数,但所有可缺省参数必须列 后。在调用该函数时,一般不允许部分缺省,即要么省去全部缺省参数,要么 一个也不省。 2、函数值调用和引用调用 C++语言在进行函数调用时,对参数的处理有两种方式,赋值型和引用型, 即值调用方式和引用调用方式。前者是普通的形式,在C 语言中只有这种方式; C++语言中增加了引用调用形式,这种形式与pascal 语言中的变量参数调用方 式相似。 1. 赋值调用方式 在执行函数调用时,在检查函数名及参数表之后,首先为值参数分配内存, 然后计算各对应的实参表达式,并把计算的值赋给刚刚创建的参数变量,进而 开始函数体的运行。 赋值形参:在函数定义的参数中,除了被说明为引用(&)的参数之外, 其余所有类型的形参都属于赋值形参。 凡是赋值形参,在函数的每次调用时,都必须为每一个赋值形参创建一个 新的参数变量。 实参表达式:另一方面,函数调用语句中,与赋值形参相对应的实参可以 是指定类型的常量、变量或表达式。在执行函数调用时应把该表达式的值计算 出来,作为初值赋给刚刚为赋值形参创建的参数变量。这是赋值调用方式名称 的由来。 2.引用调用方式 引用形参:函数定义的参数表中,名字前加上符号&的参数为引用形参。 例如: void swap(int& a,int& b){ int temp=a; a=b; b=temp; } 形参a,b 为引用形参,这时其函数原型可写为: void swap(int&,int&); 引用形参在调用过程中的参数传递机制不同于赋值形参。其要点是: (1)函数的调用语句中对应于引用形参的实参必须是同一类型的变量,非 变量的表达式则不允许。 (2)参数传递的内容不是实参的值,而是地址,其实际的效果是令对应的 引用形参在调用过程中,作为一个变量名指向作为实参的这个变量,与赋值形 参的不同在这里体现出来,在引用调用过程中并不创建新的参数变量! (3)在函数体程序块的运行中,引用形参的每次出现,由于它现在已经是 指向实参变量,因此相当于全用实参变量所代替。即起到了所谓的“换名”的 作用。 (4)在函数体程序运行结束,控制转回调用点时,该引用形参与实参变量 的对应关系也就终止了。但是在调用过程中对于这个实参变量的所有处理和操 作的结果,却保留下来。这一点也是区别于赋值调用的。 课题07:内联函数与递归函数 一、教学目标: 1.进一步掌握函数的应用 2.了解内联函数 3.掌握递归函数的使用 二、教学重点: 1.函数嵌套 2.内联函数 三、教学难点: 1.函数的递归调用 四、课时安排: 2节课 五、教具准备: 多媒体教室 六、教学方法: 讲授 七、教学过程: (一)、复习导入 (二)、讲授新课 1、内联函数 内联(inline)函数的设置是C++不同于C 的特征之一。 (1)在C++程序中符合下列条件的函数: ①函数说明前冠以“inline”关键字的函数; ②类内定义的函数成员,将在第七章介绍。 (2)在编译过程中,凡内联函数,系统把它的执行代码插入到该函数的每个调用点,从而使程序执行过程中,每次该函数调用时不需控制转移,但该函数代码可能有多个拷贝出现在目标程序中。也就是说,把多次调用的函数说明为内联函数,会使目标程序占用的空间加大,而运行时间得到节省。 (3)为了优化程序、提高程序的运行效率,一般把函数体短小而又频繁调用的函数说明为内联函数较好。 (4)利用编译预处理的宏定义方式,也可以实现类似于内联函数的功能。 不过,内联函数的方式更为方便和可靠。例如,下面几个内联函数定义可以用带参数的宏定义方式实现: inline int MAX (int a, int b) {if (a>b) return a; return b;} inline float ABS (float a) { return ( a>=0)? a: 0-a; } inline float PERCENT (float a, float b) {return 100.0 * a / b;} inline void SWAP (int a, int b) {int t; t=a; a=b; b=t; return;} inline bool ISODD (int x) {return (x %2 = = 1)?1: 0; } 对应的宏定义为: # define MAX (a,b) ((a>b)? a: b) // 求较大者 # define ABS (a) (( a >= 0 )? a: 0-a ) // 求绝对值 # define PERCENT (a,b) (100.0 * a / b ) // 求百分比 # define SWAP (t, a, b) {int t=a; a=b; b=t;} // 交换a,b 的值 # define ISODD (x) ((x %2 = = 1) 1: 0 ) // 判断x 是否为奇数 虽然这些带参数的宏定义的功能与对应的内联函数基本一致,但仍然是有差别的,宏定义中的参数和计算结果没有类型说明,编译时不可能进行类型检查,是不安全的,更无法区分赋值参数和引用参数,很容易出错。因此,C++语言的编程中,当某段计算短小而又经常被重复时,建议采用内联函数,少用宏定义实现。 2、函数嵌套 一个函数的函数体中包含一个或多个函数调用语句,即称为函数嵌套。嵌套的含义是,如果函数A 要调用函数B,也就是说,函数A 的定义要依赖于函数B 的定义。因此函数B 的定义或函数B 的原型必须出现在函数A 的定义语句之前。 为了保证返回后继续正常运行,函数调用过程开始时需要做更多的事情: 1) 建立被调用函数的栈空间; 2) 保存调用函数的运行状态和返回地址; 3) 传递参数; 4) 把程序控制转交给被调用函数。 3、函数的递归 递归函数的设计在程序设计中占有重要的地位。 函数A 在其函数体中直接包含它自己的调用语句,这种调用称为直接递归调用,函数A 称为(直接)递归函数。函数A 在其函数体中间接地包含对它自己的调用,例如A 调用函数B,但函数展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




c--程序设计教案.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/1981865.html