嵌套和递归的过程.doc

上传人:工**** 文档编号:558761242 上传时间:2022-09-02 格式:DOC 页数:20 大小:73.01KB
返回 下载 相关 举报
嵌套和递归的过程.doc_第1页
第1页 / 共20页
嵌套和递归的过程.doc_第2页
第2页 / 共20页
嵌套和递归的过程.doc_第3页
第3页 / 共20页
嵌套和递归的过程.doc_第4页
第4页 / 共20页
嵌套和递归的过程.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《嵌套和递归的过程.doc》由会员分享,可在线阅读,更多相关《嵌套和递归的过程.doc(20页珍藏版)》请在金锄头文库上搜索。

1、第14次复习嵌套和递归的过程正课6.2 变量的作用域和生命周期一、概述1、变量是对程序中数据的存储空间的抽象2、变量的属性1)数据类型:变量所持有的数据的性质(操作属性)2)存储属性u 存储器类型:寄存器、静态存储区、动态存储区u 生存期:变量在某一时刻存在-静态变量与动态变量u 作用域:变量在某区域内有效-局部变量与全局变量3、变量的存储类型u auto -自动型u register-寄存器型u static -静态型u extern -外部型4、变量定义格式: 存储类型 数据类型 变量表;如: int sum; auto int a,b,c; register int i; static

2、float x,y;二、局部变量与全局变量1、局部变量-内部变量1)定义:在函数内定义,只在本函数内有效2)说明:l main中定义的变量只在main中有效l 不同函数中同名变量,占不同内存单元l 形参属于局部变量l 可定义在复合语句中有效的变量l 局部变量可用存储类型:auto register static (默认为auto)float f1(int a) int b,c; .char f2(int x,int y) int i,j; main() int m,n; .a,b,c有效x,y,i,j有效m,n有效3)安例 不同函数中同名变量main() int a,b; a=3; b=4;

3、printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b);sub() int a,b; a=6; b=7; printf(sub:a=%d,b=%dn,a,b); 复合语句中使用变量#define N 5main() int i; int aN=1,2,3,4,5; for(i=0;iN/2;i+) int temp;temp=ai;ai=aN-i-1;aN-i-1=temp; for(i=0;iN;i+) printf(%d ,ai);2、全局变量-外部变量1)定义:在函数外定义,可为本文件所有函数共用2)有效范围:从定义

4、变量的位置开始到本源文件结束,及有extern说明的其它源文件作用域maxminfloat max,min;float average(float array, int n) int i; float sum=array0; max=min=array0; for(i=1;imax) max=arrayi; else if(arrayiy?x:y; return(z);main() extern int a,b; printf(max=%d,max(a,b);int a=13,b=-8;5)若外部变量与局部变量同名,则外部变量被屏蔽int a=3,b=5;max(int a, int b) i

5、nt c; c=ab?a:b; return(c);main() int a=8; printf(max=%d,max(a,b);运行结果:max=86)外部变量可用存储类型:缺省 或 static 7)应尽量少使用全局变量,因为:u 全局变量在程序全部执行过程中占用存储单元u 降低了函数的通用性、可靠性,可移植性u 降低程序清晰性,容易出错三、动态变量与静态变量1、存储方式静态存储:程序运行期间分配固定存储空间动态存储:程序运行期间根据需要动态分配存储空间2、内存用户区程序区静态存储区动态存储区全局变量、局部静态变量形参变量局部动态变量(auto register)函数调用现场保护和返回地址

6、等3、生存期静态变量:从程序开始执行到程序结束动态变量:从包含该变量定义的函数开始执行至函数执行结束4、安例main() void increment(void); increment(); increment(); increment();void increment(void) static int x=0; x+; printf(“%dn”,x);运行结果:1 运行结果 1 2 36.3预处理程序多文件程序的运行一、编译预处理1、作用:对源程序编译之前做一些处理,生成扩展C源程序2、种类u 宏定义 #defineu 文件包含 #includeu 条件编译 #if-#else-#endif

7、等3、格式:u “#”开头u 占单独书写行u 语句尾不加分号二、宏定义与符号常量1、无参宏定义1)无参宏定义的一般格式 #define 标识符 语言符号字符串其中:“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”可以是常数、表达式、格式串等。2)使用宏定义的优点(1)可提高源程序的可维护性(2)可提高源程序的可移植性 (3)减少源程序中重复书写字符串的工作量3)安例#define PI 3.1415926 /*PI是宏名,3.1415926用来替换宏名的常数*/main() float radius,length,area,vol

8、ume; printf(Input a radius: ); scanf(%f,&radius); length=2*PI*radius; /*引用无参宏求周长*/ area=PI*radius*radius; /*引用无参宏求面积*/ volume=PI*radius*radius*radius*3/4; /*引用无参宏求体积*/ printf(length=%.2f,area=%.2f,volume=%.2fn, length, area, volume); 4)说明(1)宏名一般用大写字母表示,以示与变量区别。但这并非是规定。 (2)宏定义不是语句,所以不能在行尾加分号。否则,宏展开时,

9、会将分号作为字符串的1个字符,用于替换宏名。(3)在宏展开时,预处理程序仅以按宏定义简单替换宏名,而不作任何检查。如果有错误,只能由编译程序在编译宏展开后的源程序时发现。(4)宏定义命令#define出现在函数的外部,宏名的有效范围是:从定义命令之后, 到本文件结束。通常,宏定义命令放在文件开头处。 (5)在进行宏定义时,可以引用已定义的宏名 。(6)对双引号括起来的字符串内的字符,即使与宏名同名,也不进行宏展开。 2、符号常量在定义无参宏时,如果“语言符号字符串”是一个常量,则相应的“宏名”就是一个符号常量3有参宏定义1、带参宏定义的一般格式 #define 宏名(形参表) 语言符号字符串1

10、2、带参的调用和宏展开a) 调用格式:宏名(实参表)b) 宏展开:用宏调用提供的实参字符串,直接置换宏定义命令行中、相应形参字符串,非形参字符保持不变。3 说明(1)定义有参宏时,宏名与左圆括号之间不能留有空格。否则,编译系统将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。(2)有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不做任何语法检查。在定义有参宏时,在所有形参外和整个字符串外,均加一对圆括号。 (3)虽然有参宏与有参函数确实有相似之处,但不同之处更多,主要有以下几个方面:1)调用有参函数时,是先求出实参的值,然后再复制一份给形参。而展开有参宏时,只是将实参简单地

11、置换形参。2)在有参函数中,形参是有类型的,所以要求实参的类型与其一致;而在有参宏中,形参是没有类型信息的,因此用于置换的实参,什么类型都可以。有时,可利用有参宏的这一特性,实现通用函数功能。3)使用有参函数,无论调用多少次,都不会使目标程序变长,但每次调用都要占用系统时间进行调用现场保护和现场恢复;而使用有参宏,由于宏展开是在编译时进行的,所以不占运行时间,但是每引用1次,都会使目标程序增大1次。 三、文件包含1文件包含的概念文件包含是指,一个源文件可以将另一个源文件的全部内容包含进来。2文件包含处理命令的格式 include “包含文件名” 或 include 四、条件编译1、#ifdef #endif和#ifndef #end

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号