32 变量作用域和常用函数.docx
- 文档编号:6400499
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:13
- 大小:35.21KB
32 变量作用域和常用函数.docx
《32 变量作用域和常用函数.docx》由会员分享,可在线阅读,更多相关《32 变量作用域和常用函数.docx(13页珍藏版)》请在冰豆网上搜索。
32变量作用域和常用函数
《3.2变量作用域和常用函数》
1.目标概述[3分钟]2
2.回顾[5分钟]2
3.课程知识点讲解2
3.1.局部变量[10分钟]2
3.2.全局变量[15分钟]3
3.3.变量的存储类型[20分钟]4
3.4.常用算术运算库函数[20分钟]5
3.5.任务解决[15分钟]7
4.精练[45分钟]7
5.小结[2分钟]8
6.技能提升[90分钟]9
7.考核点10
8.作业答案10
9.扩展练习11
10.学生问题汇总11
11.教学后记11
本节目标
⏹本节中将讲述如下主要内容:
✧全局变量和局部变量
✧动态存储方式与静态存储方式
✧常用算术运算库函数
⏹通过教学使学生掌握全局变量和局部变量、存储方式以及常用算数运算库函数。
本节重点
⏹全局变量和局部变量
⏹动态存储方式与静态存储方式
⏹常用算术运算库函数
本节难点
⏹动态存储方式与静态存储方式
授课课时
⏹4课时
教法建议
目标概述[3分钟]
本节主要讲述全局变量和局部变量、存储方式以及常用算数运算库函数。
提出本节的任务。
回顾[5分钟]
回顾上一节的相关内容。
课程知识点讲解
局部变量[10分钟]
引入:
在函数内部定义的变量就是局部变量(localvariable),某些地方将其称为自动变量。
主题:
局部变量只在声明它的范围内有效。
换言之,局部变量在自己的代码模块之外是不可知的。
切记:
模块以左花括号开始,以右花括号结束。
局部变量的这种性质保证了数据的相对独立性,这在大多数情况下正是程序所需要的。
在此前所用到的变量都是局部变量,包括函数的形参也是局部变量。
通常定义局部变量最常见的程序块是函数。
对于局部变量,要了解的最重要的东西是:
它们仅存在于被定义的当前执行代码块中,即局部变量在进入模块时生成,在退出模块时消亡。
(1)主函数main中定义的变量nI,nJ只能在主函数中有效,不会因为是在主函数中定义而使其在整个程序中都有效,同样主函数也不能直接使用其它函数中定义的变量。
(2)不同函数中可以使用相同的变量名,只是它们所代表的对象是不同的,且互不干扰,如上面程序中main函数和someFunc函数都定义了变量名为nB和nC的变量,它们在内存中是占用不同的存储单元,是不会混淆的。
(3)C++允许在函数内的复合语句中定义变量,但这些变量只能在本复合语句中有效。
(4)函数的形参是局部变量。
如上面程序中的someFunc函数中的形参nA只能在本函数中有效。
(5)函数声明中出现的参数名,其作用范围只在本行的括号内。
编译器对函数声明中的变量名是忽略的。
综上所述,局部变量随着它们被定义的模块的进出口而建立或释放,它们存储的信息在程序块执行结束后就丢失了,这点对有关函数访问是特别重要的。
当访问某一函数时,它的局部变量被建立,当函数返回时,局部变量就被销毁。
这就是说,局部变量的值不能在两次调用之间保持。
[简述局部变量]
全局变量[15分钟]
引入:
在函数内部定义的变量是局部变量,而在函数外部定义的变量称为全局变量(globalvariable,也称全称变量)。
主题:
它与局部变量不同,全局变量贯穿整个程序,并且可被任何一个模块使用。
全局变量在程序的整个执行期间保持有效,可以被函数中的任何表达式访问。
通常我们将全局变量定义的最佳位置放在程序的顶部。
示例讲解:
示例3.2.1编制一函数,实现键盘输入一个整数N,求1…N之间奇数之和及其平均值,并编写主函数对其进行调用。
分析与解答:
具体见P139
使用全局变量可以增加函数间的数据联系,但是引入全局变量会使函数的通用性降低,因为在执行函数时要受到外部变量的影响。
每个函数运行时都可能改变全局变量的值,无法清楚地判断出每个瞬时各个全局变量的值。
因此,建议不必要时不要使用全局变量。
另外,如果在同一源程序文件中,当全局变量与局部变量同名时,则在局部变量的作用范围内,全局变量被屏蔽,即不起作用。
所谓的变量作用域(scope)是指变量的有效范围。
C++中共有4种不同的作用域:
文件作用域(filescope)、函数作用域(functionscope)、块作用域(blockscope)和函数原型作用域(functionprototypescope)。
其中文件作用域是全局的,其余为局部的。
[通过示例详细讲述全局变量的使用]
变量的存储类型[20分钟]
引入:
主题:
1.动态存储方式与静态存储方式
变量有两个特性即:
作用域和存储期(storageduration,也称生命期)。
上面介绍的是从空间的角度来分析的,分为局部变量和全局变量。
而变量的存储期则是从变量值存在的时间角度来分析的。
所谓的存储期就是变量在内存中的存在期间。
存储期可以分为静态存储期(staticstorageduration)和动态存储期(dynamicstorageduration)。
这是由变量的静态存储方式和动态存储方式决定的。
所谓静态存储方式就是在程序运行期间,系统对变量分配固定的存储空间。
而动态存储方式则是在程序运行期间,系统对变量动态地分配存储空间。
计算机在运行程序时会为其分配一块内存空间,这块存储空间可以分为三部分,即:
(1)程序区
(2)静态存储区
(3)动态存储区
如图所示。
程序在运行时,首先将程序加载到程序区中,然后将数据存放在静态存储区和动态存储区中。
静态存储区存放全局变量,是在程序开始执行时给全局变量分配存储单元,程序执行完操作系统才回收这些空间。
它们在程序执行过程中占据了固定的存储单元,而不会动态地分配和回收。
而动态存储区主要存放:
①函数形式参数。
它是调用函数时才给形参分配存储空间。
②函数中的自动变量。
③函数调用时的现场保护和返回地址等。
这些数据,在函数调用时分配动态存储空间,函数结束时释放这些空间。
在程序执行过程中,这种分配和释放是动态的,如果程序中两次调用同一函数,则要进行两次分配和释放,但两次分配给的存储空间地址可能是不相同的。
在C++中变量有数据类型的属性,还有存储类别(storageclass)的属性。
存储类别是指数据在内存中存储的方法。
存储方法分为静态存储和动态存储两大类。
C++中包含4种存储类别:
自动的(auto)、静态的(static)、寄存器的(register)和外部的(extern)。
2.自动变量
在函数中定义局部变量时,如果不用static加以声明,编译系统就会动态为它们分配存储空间。
函数的形参和在函数中定义的变量都属于自动变量。
所谓的自动变量(autovariable)就是在函数调用开始时或执行复合语句时为变量动态分配存储单元,当执行完毕就释放的变量。
通常在定义变量时,加上关键字auto指示该变量为自动变量。
3.用static声明的静态变量
静态变量是固定分配存储单元不变的变量。
在定义时,通常用关键字static来加以修饰。
C++中有两种静态变量:
(1)静态局部变量(staticlocalvariable),这种变量是在函数调用结束后不消失而保留原值,即存储单元不释放,在下回调用时,该变量的保留上一次函数调用结束时的值。
示例讲解:
示例3.2.2编制函数,利用静态局部变量,求1到10的累加和。
分析与解答:
具体见P144
(2)静态外部变量,是指加上static声明、只能用于本文件的外部变量。
当需要对一些全局变量的使用范围限制在本文件时,就可以达到目的。
这样可以使各程序文件的变量名互不干扰。
这就为程序的模块化、通用性提供了方便。
4.用register声明寄存器变量
通常,变量的值是存放在内存中。
当程序需要那个变量的值时,由控制器发出指令将其值从内存中送出到CPU中的运算器。
当指令执行完,如需要存储,则在从运算器将数据存回到内存。
如果有些变量的使用频繁,为了节约对变量对应的存储单元的读写将要花很多时间。
为提高执行效率,C++允许将局部变量的值放在CPU的寄存器中,而不必在计算时到内存中去取。
这种变量称为寄存器变量。
有关键字register作声明。
[详细讲述存储方式]
常用算术运算库函数[20分钟]
引入:
标准C++中提供了各种各样、使用方便的库函数,特点是算术运算方面的函数。
主题:
标准C++将这些库函数按其类型分类到不同的函数库中,对库函数的声明则存入在头文件中。
程序要实现对这些库函数的调用,就必须将相应的头文件包含用预处理命令――#include到程序中,如要使用算术类库函数,则在程序中用预处理命令将cmath头文件包含到程序中。
#include
1.幂函数
函数名:
pow
功 能:
:
指数函数(x的y次方)
用 法:
:
double pow(double x, double y);
示例讲解:
示例3.2.3计算表达式y=2x2+4x+8
分析与解答:
具体见P146
2.退出函数
函数名:
exit
功 能:
终止程序
用 法:
voidexit(intstatus);
说明:
通常用于需要终止程序的运行,退出时所带的参数表示程序运行结束的状态。
通常调用该函数时带入实参值为0表示正常退出,如为非正常结束程序则带入的实参值则为非零值。
3.取绝对值函数
函数名:
abs
功 能:
求整数的绝对值
用 法:
intabs(inti);
示例讲解:
示例3.2.4编制程序,实现求N的绝对值。
分析与解答:
具体见P147
4.指数函数
函数名:
exp
功 能:
指数函数
用 法:
doubleexp(doublex);
示例讲解:
示例3.2.5编制程序,实现计算表达式:
ex。
分析与解答:
具体见P147
5.平方根函数
功 能:
计算平方根
用 法:
doublesqrt(doublex);
如计算表达式y=
,则在程序中可以用如下表达式实现:
doublefY;
fY=sqrt(3.0);//计算平方根
6.自然对数函数
函数名:
log
功 能:
对数函数ln(x)
用 法:
doublelog(doublex);
7.对数函数
函数名:
log10
功 能:
对数函数log
用 法:
doublelog10(doublex);
8.随机产生器
函数名:
rand
功 能:
随机数发生器
用 法:
voidrand(void);
示例讲解:
示例3.2.6编制程序,随机生成10个0到9的整数。
分析与解答:
具体见P148
[简述一些常用算术运算库函数]
任务解决[15分钟]
任务:
通过前面章节的学习,完成了HNS软件学院专用财务计算器软件的实现任务。
但是这个计算器软件仅是一个原型系统,在交付财务处相关人员使用后,发现原型系统在功能上还存在一些不足。
主要表现在算术运算过于简单不能满足复杂的算术计算希望增加:
对数运算、幂函数运算、开平方等运算。
而在财务计算上则希望增加一个统一设置财务计算参数的功能,如:
住房公积金缴费比率,现在是计算每名员工都需要输入一次,希望改成只需要统一设置一次就可以了。
因此,为改进该计算器软件现指派您运用本节所学的全局变量和常用算术运算函数解决上述所提出的问题。
您的主要任务如下:
1.利用全局变量实现财务计算参数设置功能,并改进现有财务计算模块功能;
2.利用常用算术库函数加强计算器中的算术运算。
分析与解决:
具体见P149-153
精练[45分钟]
[课后完成]
任务:
请您根据本节所学的知识编写相应的程序解决项目中的任务2。
分析:
由于前面章节时,设计算术运算模块时没有考虑到会需要复杂的算术计算工作,所以将功能设计得比较简单。
现在根据客户的要求增强这方面的功能。
通过本节的学习,我们能为计算器增加如下功能:
(1)平方根运算
(2)对数运算
(3)幂运算
因此,您要实现这些功能就必须算术运算模块增加或修改如下函数:
(1)算术计算模块子菜单
主要为是修改原的菜单项,增加上述新的计算功能项,函数名为:
voidarithmeticMenu()
该函数的功能可参照3.1节中的精练部分。
(2)平方根运算函数;
它是运用算术计算库中sqrt()函数来实现平方根运算。
其函数名可定义为:
voidcalcSqrt();
(3)对数运算函数
它是运用算术计算库中log10()函数来实现对数运算。
其函数名可定义为:
voidcalcLog();
(4)幂运算函数
它是运用算术计算库中pow()函数来实现幂运算。
其函数名可定义为:
voidcalcPow();
解决:
具体见P3-2.cpp
小结[2分钟]
通过本节学习,我们主要学习了如下主要内容:
1.变量作用域
所谓的变量作用域就是变量的有效范围。
根据变量作用域的不同,C++中将变量分成:
局部变量和全局变量。
局部变量是指程序段或函数内部定义的变量,其有效范围也仅限于本程序段或函数内部。
而全局变量则是在程序外部定义,其有效范围贯穿整个程序文件。
2.变量的存储类别
变量的存储类别是指变量在内存中的生命期类别,而生命期是指变量在内存中的存在时间。
C++中的变量有两种存储期:
(1)动态存储方式
动态存储方式是在程序运行期间,系统对变量动态地分配存储空间。
这种存储类型的变量是在定义该变量的程序块或函数开始执行时才由编译器动态地分配存储单元,一旦程序执行完毕,将释放这些变量的存储单元。
这种类型的变量主要包括:
函数形参、自动变量和函数调用时的现场保护和返回地址等。
(2)静态存储期
静态存储方式就是在程序运行期间,系统对变量分配固定的存储空间。
这种变量是在程序开始执行时给全局变量分配存储单元,程序执行完退出时由操作系统回收这些空间。
它们在程序执行过程中占据了固定的存储单元,而不会动态地分配和回收。
主要是包括:
静态变量、外部变量等。
3.常用的数学函数
在C++中提供了丰富的、功能强大的库函数。
为使学生进一步了解C++语言丰富的库函数,因此在本节中向大家介绍了部分常用的数学库函数,如:
平方根函数、随机数函数、幂函数等。
技能提升[90分钟]
任务:
HNS软件学院的开发部为更好地收集计算器软件的需求,决定采用原型法。
通过前面几章节的学习和工作,现已初步完成该程序的设计和实现任务。
在对该软件程序编码进行评审时,发现程序结构不清晰,所的程序都放在主函数中实现,这不利于程序维护、扩展和阅读。
而这些问题可以利用自定义函数来解决上述所有问题。
现指派您对前面编写的程序进行全部重构。
你具体任务可分解成如下:
1.构建独立的菜单系统;
2.从主函数中分离出算术计算模块,主要包括(加、减、乘、除、平方、取余、对数、幂运算、指数运算、平方根运算);
3.从主函数中分离出财务计算模块,主要包括(个人所得税计算、住房公积金计算、医疗保险金计算、系统参数设置)。
分析:
任务一:
从主函数中分离出计算器菜单系统。
1.编写系统主菜单函数
分析:
将原有的主菜单程序部分独立出来形成主菜单函数。
定义为:
voidmainMenu();
其具体实现可参照1.2节的部分示例。
2.编写算术运算子菜单函数
分析:
将原有的算术运算子菜单程序部分独立出来形成算术运算模块子菜单函数。
定义为:
voidarithmeticMenu();
可以根据上面1.1子任务的实现和1.2节的示例完成。
3.编写财务运算子菜单函数
分析:
将原有的财务运算子菜单程序部分独立出来形成财务运算模块子菜单函数。
定义为:
voidaccountMenu();
可以根据上面1.1和1.2子任务的实现和1.2节的示例完成。
任务二:
重构算术运算功能模块
提示:
本任务主要是在前面的菜单的基础上加入实际的算术计算功能,请参照本章和前面几章的内容完成任务,要求每个功能都独立成函数。
任务三:
重构财务计算功能模块
提示:
本任务是将前面章节实现的有关财务计算的功能程序封装在不同的函数中,以提高程序的可读性、可维护性,可参照本章第2节中的精练部分实现。
解决:
具体见solution-code/3-2-A1.cpp
目标:
●提高学生的表达能力,语言应用能力和自信力
●展示所完成的任务
要求:
●普通话应尽可能标准流畅,不得使用方言
●需要结合本章的重点进行讲解
考核点
考核点1:
全局变量和局部变量
考核点2:
存储方式
考核点3:
常用算术运算库函数
作业答案
1:
读程序,写出运行结果,并回答问题。
#include
intfunc(int);
voidmain()
{
intnS=0;
for(intnI=1;nI<=4;nI++)
{
nS=nS+func(nI);
}
cout< } intfunc(intnA) { staticintq=1; q=q*nA; returnq; } 回答问题: 如果将func()函数中变量q的定义时的修饰符static去掉,程序输出内容有何变化,分析区别原因。 答: 1 2 6 24 如果修饰符static去掉,则为: 1 2 3 4 2: 编写函数,实现计算f(x)=4x3+7x2+9的功能,并编写主函数调用。 答: solution-code/3-2-T2.cpp 扩展练习 学生问题汇总 (注: 汇总学生在学习过程中容易出现的问题) 教学后记 (注: 在此写上个人在授课过程中所遇到的教案中所没有涉及到的特殊问题及其解决方法或解决方案,也可以总结自己的授课体会,课程体系、教材的不足等。 ) 授课教师(签名): 授课时间: 授课班级:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 32 变量作用域和常用函数 变量 作用 常用 函数