第十、十一讲第6章函数、存储类和预处理程序学习教案

上传人:辰*** 文档编号:114263467 上传时间:2022-06-28 格式:PPTX 页数:48 大小:188.39KB
收藏 版权申诉 举报 下载
第十、十一讲第6章函数、存储类和预处理程序学习教案_第1页
第1页 / 共48页
第十、十一讲第6章函数、存储类和预处理程序学习教案_第2页
第2页 / 共48页
第十、十一讲第6章函数、存储类和预处理程序学习教案_第3页
第3页 / 共48页
资源描述:

《第十、十一讲第6章函数、存储类和预处理程序学习教案》由会员分享,可在线阅读,更多相关《第十、十一讲第6章函数、存储类和预处理程序学习教案(48页珍藏版)》请在装配图网上搜索。

1、会计学1第十、十一讲第第十、十一讲第6章函数、存储类和预处章函数、存储类和预处理程序理程序第一页,编辑于星期二:十七点 四十分。【例例6.10】i的输出值是多少?的输出值是多少? #include void f( ) int i; i=3; main() int i=0; f( ); i+=5; printf(”i=%d”,i); 6.2.1 问题的提出问题的提出第1页/共48页第二页,编辑于星期二:十七点 四十分。【例例6.10】i的输出值是多少?的输出值是多少? #include void f( ) int i; i=3; main() int i=0; f(); i+=5; printf

2、(”i=%d”,i); 6.2.1 问题的提出问题的提出考虑两个问题:考虑两个问题: (1)函数)函数f中语句中语句i=3;中的中的i与与main中的中的i是同是同一个变量?一个变量?(2)函数调用结束后)函数调用结束后f中的中的i值依然存在?值依然存在?这两个条件均不成立,这两个条件均不成立,i的值为的值为5第2页/共48页第三页,编辑于星期二:十七点 四十分。临时存储器称为临时存储器称为寄存器寄存器,用以,用以存储一些反复被加工的数据,存储一些反复被加工的数据,寄存器的存取速度比主存快。寄存器的存取速度比主存快。第3页/共48页第四页,编辑于星期二:十七点 四十分。第4页/共48页第五页,

3、编辑于星期二:十七点 四十分。仅存在于函数被调用期间。仅存在于函数被调用期间。第5页/共48页第六页,编辑于星期二:十七点 四十分。第6页/共48页第七页,编辑于星期二:十七点 四十分。变量的存储类别决定了变量的作用域和生变量的存储类别决定了变量的作用域和生命期,变量的存储类别共有四种:命期,变量的存储类别共有四种:自动型自动型(auto)(auto)外部型外部型(extern)(extern)静态型静态型(static)(static)寄存器型寄存器型(register)(register)自动变量和寄存器变量属于动态存储方自动变量和寄存器变量属于动态存储方式,外部变量和静态内部变量属于静态

4、式,外部变量和静态内部变量属于静态存储方式。存储方式。第7页/共48页第八页,编辑于星期二:十七点 四十分。 1.自动型自动型(auto)变量变量是变量被说明时,存储类信息可以缺省的,并且变量的说明出现在函数内部,这样的变量的存储类别就是自动型自动型。int f(int a) auto int b,c; float d,e; : : 第8页/共48页第九页,编辑于星期二:十七点 四十分。复合语句复合语句(Block)也可出现变量说明,当缺省)也可出现变量说明,当缺省存储类别信息时,就属于自动型变量。存储类别信息时,就属于自动型变量。 main() int a,b,c; : float d,e;

5、 /*存储类别是隐式说明,存储类别是隐式说明, 即存储类别是自动型即存储类别是自动型*/ : : 第9页/共48页第十页,编辑于星期二:十七点 四十分。 自动型变量一旦说明只能在说明该变量的函自动型变量一旦说明只能在说明该变量的函数或复合语句中出现才算有效。离开了上述数或复合语句中出现才算有效。离开了上述区域,对该变量的引用是无效的,不合法的区域,对该变量的引用是无效的,不合法的。 double fun1(double p1) int p2,p3; : p1,p2,p3的有效区域的有效区域 : Char fun2 (char p4) char p5,p6; : p4,p5,p6的有效区域的有效

6、区域 : 形参(自动型)形参(自动型)隐式说明的自动型隐式说明的自动型第10页/共48页第十一页,编辑于星期二:十七点 四十分。 main() float x,y; : : int a,b; : a,b的有效区域的有效区域 : x,y的有效区的有效区域域 : : 第11页/共48页第十二页,编辑于星期二:十七点 四十分。第12页/共48页第十三页,编辑于星期二:十七点 四十分。第13页/共48页第十四页,编辑于星期二:十七点 四十分。第14页/共48页第十五页,编辑于星期二:十七点 四十分。第15页/共48页第十六页,编辑于星期二:十七点 四十分。第16页/共48页第十七页,编辑于星期二:十七

7、点 四十分。 2. 外部(外部(externextern)变量)变量是指,在一个是指,在一个函数中合法出现的同时,又可以在其函数中合法出现的同时,又可以在其它函数中合法出现。它函数中合法出现。第17页/共48页第十八页,编辑于星期二:十七点 四十分。int a,b; void f( ) a+=2; b+=3; : : main( ) a=1; b=2; : : f( ); : : /*a,b是外部变量是外部变量 */它们既可以在函数它们既可以在函数f中合法出现,又可以中合法出现,又可以在函数在函数main中合法出现。中合法出现。第18页/共48页第十九页,编辑于星期二:十七点 四十分。 外部变

8、量的说明也可出现在函数的内部,例如:外部变量的说明也可出现在函数的内部,例如: int b,c; int b,c; / /* *b,cb,c是外部变量是外部变量 * */ / int f(int a) int f(int a) extern int d,e;extern int d,e; / /* *d,ed,e是外部变量是外部变量 * */ / d=e=3; d=e=3; : : int d,e; int d,e; main( ) main( ) : : 第19页/共48页第二十页,编辑于星期二:十七点 四十分。extern 数据类型数据类型 外部变量外部变量,外部变量,外部变量2;exte

9、rn int d,e;第20页/共48页第二十一页,编辑于星期二:十七点 四十分。第21页/共48页第二十二页,编辑于星期二:十七点 四十分。 外部变量的作用域是从其出现的位置直至程序外部变量的作用域是从其出现的位置直至程序正文结束。正文结束。 externextern变量的生命期是整个程序执行期。变量的生命期是整个程序执行期。 外部变量作用是为了在函数与函数之间,文外部变量作用是为了在函数与函数之间,文件与文件之间进行通信,即外部变量起件与文件之间进行通信,即外部变量起“全局变量全局变量”的作用。的作用。第22页/共48页第二十三页,编辑于星期二:十七点 四十分。 3.静态静态(static

10、)变量变量生命周期:整个程序的执行过程生命周期:整个程序的执行过程有效范围:函数或文件内部有效范围:函数或文件内部外部静态变量(静态全局变量)外部静态变量(静态全局变量)内部静态变量(静态局部变量)内部静态变量(静态局部变量) 第23页/共48页第二十四页,编辑于星期二:十七点 四十分。 【例例6.12】求求15的阶乘。的阶乘。 #include long factor(int n) static int f=1; f=f*n; return f; main() long i; for (i=1;i=5;i+) printf(%dn,factor(i); 第24页/共48页第二十五页,编辑于星

11、期二:十七点 四十分。 说明:说明:静态变量可出现在程序正文的任何位置,必须静态变量可出现在程序正文的任何位置,必须用用static显式显式地加以说明。它既可出现在函数内地加以说明。它既可出现在函数内部,又可以出现在函数外部。部,又可以出现在函数外部。内部静态变量初始化语句只有在第一次调用该内部静态变量初始化语句只有在第一次调用该函数时才执行。函数时才执行。内部静态变量的作用域仅局限于该函数内;外内部静态变量的作用域仅局限于该函数内;外部静态变量作用域为文件内部;静态变量的生部静态变量作用域为文件内部;静态变量的生命期是整个程序的执行过程。命期是整个程序的执行过程。内部静态变量只能在函数内部改

12、变该变量的值内部静态变量只能在函数内部改变该变量的值第25页/共48页第二十六页,编辑于星期二:十七点 四十分。 4.4.寄存器寄存器(register)(register)变量变量只能出现在函数内只能出现在函数内部,必须用关键词部,必须用关键词registerregister。【例例6.136.13】 寄存器变量实例。寄存器变量实例。 #include #include long factor (int n ) long factor (int n ) register int iregister int i; ; long r; long r; for (i=1,r=1;i=n;i+) f

13、or (i=1,r=1;i=n;i+) r r* *=i;=i; main() main() : : 第26页/共48页第二十七页,编辑于星期二:十七点 四十分。量实际当作自动变量处理。量实际当作自动变量处理。(3 3)允许使用的寄存器数目是有)允许使用的寄存器数目是有限的,不能定义任意多个寄存器限的,不能定义任意多个寄存器变量。变量。第27页/共48页第二十八页,编辑于星期二:十七点 四十分。存储存储类别类别自动型自动型外部型外部型静态型静态型寄存器型寄存器型出现出现范围范围函数内部函数内部任何可出现说任何可出现说明部分的位置明部分的位置函数内部函数内部函数内部函数内部判别判别方法方法(1)

14、显式示出现显式示出现auto(2)在函数内部(包在函数内部(包括括main)中缺省)中缺省存储类别说明的变存储类别说明的变量量 (1)显式出现显式出现extern(2)在函数外在函数外部缺省存储类部缺省存储类别说明的变量别说明的变量 显式出现显式出现static 显式出现显式出现register作用作用域域说明该变量的函数说明该变量的函数或复合语句或复合语句出现说明的位出现说明的位置开始到程序置开始到程序正文结束正文结束说明该变说明该变量的函数量的函数内内说明该变说明该变量的函数量的函数内内生命生命期期说明该变量的函数说明该变量的函数被调用时被调用时整个程序执行整个程序执行期期整个程序整个程序

15、执行期执行期说明该变说明该变量的函数量的函数被调用时被调用时第28页/共48页第二十九页,编辑于星期二:十七点 四十分。 【例例6.14】写出下列程序的输出结果。写出下列程序的输出结果。 #include int x=1,y=2; f(int x,int y) int z=2; z=x+y; return z; main() int x=3,w; w=f(x,y); printf(”%d”,w); 外部变量外部变量x,y 自动变量自动变量x,y, z的作用范围的作用范围自动变量自动变量x,w的作用范围的作用范围外部变量外部变量y作用范围作用范围在同一个源程序中若全程在同一个源程序中若全程变量与

16、自动变量同名,则变量与自动变量同名,则在自动变量的作用域内,在自动变量的作用域内,全程变量不起作用全程变量不起作用。第29页/共48页第三十页,编辑于星期二:十七点 四十分。6.3.1 6.3.1 文件包含文件包含6.3.2 6.3.2 宏替换宏替换6.3 6.3 预处理程序预处理程序6.3.3 6.3.3 条件编译条件编译第30页/共48页第三十一页,编辑于星期二:十七点 四十分。第31页/共48页第三十二页,编辑于星期二:十七点 四十分。6.3.1(2)文件包含的形式)文件包含的形式#include “文件名文件名”或或双引号或尖括号的区别:双引号或尖括号的区别:用双引号用双引号:先在引用

17、被包含文件的先在引用被包含文件的C源程序所在的文件目源程序所在的文件目录中寻找,若找不到,再按系统指定的标准方式寻找其录中寻找,若找不到,再按系统指定的标准方式寻找其它目录;它目录;用尖括号用尖括号:则仅查找按系统标准方式指定的目录。则仅查找按系统标准方式指定的目录。通常采用双引号比较保险(自定义文件只能用通常采用双引号比较保险(自定义文件只能用“”“”)。)。第32页/共48页第三十三页,编辑于星期二:十七点 四十分。第33页/共48页第三十四页,编辑于星期二:十七点 四十分。第34页/共48页第三十五页,编辑于星期二:十七点 四十分。第35页/共48页第三十六页,编辑于星期二:十七点 四十

18、分。 6.3.2 宏替换什么是宏?宏名?宏展开(宏替换)?#include #define PI 3.1416main()float r; double p,s; scanf(“%f”,&r); p=2*PI*r; s=PI*r*r; printf(“p=%fn”,p); printf(“s=%fn”,s);第36页/共48页第三十七页,编辑于星期二:十七点 四十分。第37页/共48页第三十八页,编辑于星期二:十七点 四十分。第38页/共48页第三十九页,编辑于星期二:十七点 四十分。二、带参数的宏替换二、带参数的宏替换形式形式 #define (宏名宏名)(形参表形参表) (字符串字符串)例

19、例 #define square(x) x*x 则,则,square(5)将被替换为将被替换为5*5. 思考:思考:square (a + b) =? 若若 #define square(x) (x) * (x) square (a + b) =? 第39页/共48页第四十页,编辑于星期二:十七点 四十分。第40页/共48页第四十一页,编辑于星期二:十七点 四十分。用括号括起来第41页/共48页第四十二页,编辑于星期二:十七点 四十分。第42页/共48页第四十三页,编辑于星期二:十七点 四十分。第43页/共48页第四十四页,编辑于星期二:十七点 四十分。6.3.3 条件编译 是对其中一部分内容

20、只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件。 条件编译指令有以下三种形式: (1)# ifdef # else #endif功能:当“标识符”已经被#define命令定义过,则编译程序段1,否则编译程序段2。第44页/共48页第四十五页,编辑于星期二:十七点 四十分。(2)#ifndef (2)#ifndef 1 # else # else 2 #endif #endif(3)# if (3)# if 1 #else #else 2 #endif #endif格式与格式与#ifdef #endif命令一样,命令一样,功能正好与之相反。功能正好与之相反。 当表达式为非当表达式为非0(“逻辑真逻辑真”)时,编译程序段时,编译程序段1,否则编译,否则编译程序段程序段2。 第45页/共48页第四十六页,编辑于星期二:十七点 四十分。第46页/共48页第四十七页,编辑于星期二:十七点 四十分。第47页/共48页第四十八页,编辑于星期二:十七点 四十分。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!