c语言程序设计教学课件第6章2_第1页
c语言程序设计教学课件第6章2_第2页
c语言程序设计教学课件第6章2_第3页
c语言程序设计教学课件第6章2_第4页
c语言程序设计教学课件第6章2_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、( The C Language Programming ),C语言程序设计,2,3,第6章 函数与编译预处理,6.1 模块化程序设计与函数 6.2 函数的定义与调用 6.3 函数的递归调用 6.4 变量作用域与存储方式 6.5 内部函数和外部函数 6.6 编译预处理 6.7 程序举例,4,本节课重点: 变量作用域:局部变量与全局变量; 变量存储方式:静态存储与动态存储; 变量生存期的概念。 本节课难点: 变量作用域与存储方式的概念。,5,6.4 变量作用域与存储方式,1、变量的作用域,6,#include stdio.h void fun() int a=3,b=4; printf(a=%d

2、,b=%dn,a,b); main() int a=1,b=2; fun(); printf(a=%d,b=%dn,a,b); ,输出结果: a=3,b=4 a=1,b=2,(1)局部变量,7,#include stdio.h int a,b; void f1( ) int c; c=a*b; a=b; b=c; printf(c=%dn,c); main( ) a=3;b=4; f1( );printf(a=%d,b=%dn,a,b); ,输出结果: c12 a=4,b=12,(2)全局变量,8,将同一源文件中全局变量的作用域向上扩展。 引用其他源文件中定义的全局变量。,(3)外部变量的使用

3、,声明格式如下: extern 类型说明符 外部变量名;,9,#include stdio.h int a; int fun(int x,int y) int d; extern int c; d=x*y*c; return d; main() a=2; extern int b; printf(%dn,fun(a,b); int b=3,c=4;,运行结果:24,10,11,12,对于全局变量有以下几点说明: 全局变量就是外部变量。 同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。 由于全局变量可在多个函数中使用,因而降低了函数的独立性。从模块化程序设计的观

4、点来看这是不利的,因此尽量不要使用全局变量。,13,#include stdio.h int a=3,b=5; max(int a, int b) int c; c=ab?a:b; return(c); main() int a=8; printf(max=%d,max(a,b); ,运行结果: max=8,14,变量定义的完整格式为: 存储类别 数据类型 变量名,变量名,2、变量的存储类别与生命期,15,自动变量具有以下特点: 作用域仅限于定义该变量的结构内。 属于动态存储方式。 不同的个体中(函数或复合语句内)允许使用同名的自动变量而不会混淆。,(1)自动变量(auto),16,#incl

5、ude stdio.h main() int x=1; void prt( ); int x=3; prt( ); printf(1: x=%dn,x); printf(2: x=%dn,x); void prt( ) int x=5; printf(3: x=%dn,x); ,3:x=5 1:x=3 2:x=1,17,(2)静态变量(static) 静态变量的定义形式为: static 类型说明 变量名,变量名, 在局部变量的类型说明前加上static构成局部静态变量。例如: static int a,b; static float x; ,18,局部自动变量与局部静态变量对比,19,#in

6、clude stdio.h void f(int a) int j=0; j+; j=a+j; printf(%dn,j); main() int i; for(i=1;i=3;i+) f(i); ,运行结果: 2 3 4,20,#include stdio.h void f(int a) static int j=0; j+; j=a+j; printf(%dn,j); main() int i; for(i=1;i=3;i+) f(i); ,运行结果: 2 5 9,21,全局变量与全局静态变量对比,22,变量的值存放在CPU的寄存器中,使用时不需要访问内存,从而提高了效率。,寄存器变量只限

7、于整型、字符型和指针型的局部变量。寄存器变量是动态变量,而且数目有限,一般仅允许说明两个寄存器变量。,例如:register int d;,(3)寄存器变量 (register),23,#include stdio.h main() register int i,s=0; for(i=1;i=100;i+) s+=i; printf(s=%dn,s); ,例6.8 编程计算:s1+2+3+4+100。,24,只能被本文件中其他函数所调用的函数,称为内部函数。 static 类型名 函数名(形参表) 外部函数就是允许其他文件调用的函数。 extern 类型名 函数名(形参表),6.5 内部函数和

8、外部函数,省略extern隐含为外部函数,25,以“#”开头的行为编译预处理标志。合理地使用预处理功能,可使编写的程序便于阅读、修改、移植和调试。,6.6 编译预处理,1. 宏定义,一般形式为: #define 标识符 字符串,例: #define N 100,(1)不带参数的宏定义,宏名,26,对于宏定义的几点说明: 编译时用字符串取代宏名,只是一种简单的代换。 宏定义行尾不要加分号。 宏定义必须写在函数之外,其作用域为从定义位置起到源程序结束。 如要终止宏定义的作用域可使用#undef命令 。,27,#define PI 3.14159 #include stdio.h main() #u

9、ndef PI/*终止PI的作用域*/ f1() ,28,一般形式为: #define 宏名(形参表) 字符串,(2)带参数的宏定义,对带参数的宏,在调用时,不仅要宏展开,而且要用实参去代换形参。,带参数宏调用的一般形式为: 宏名(实参表),29,#define MAX(x,y) xy?x:y #include stdio.h main() int a,b,max; scanf(%d%d, ,30,宏定义中的形参最好括起来,以避免代换时出错。,#define SQR(y) (y)(y) #include stdio.h main() int i; for(i=1;i=3;i+) printf(

10、%dn,SQR(i+1); ,#define SQR(y) yy #include stdio.h main() int i; for(i=1;i=3;i+) printf(%dn,SQR(i+1); ,结果: 4 9 16,结果: 3 5 7,31,所谓“文件包含”是指将另外的文件包含到本文件之中。 文件包含命令的一般形式为: #include 文件名 或 #include 例如: #include #include math.h,2、文件包含,32,3、条件编译 略(自学) 6.7 程序举例 自学,33,小 结,掌握变量作用域的概念,掌握局部变量和全局变量的概念; 掌握变量存储类别的概念,

11、掌握静态存储和动态存储的概念; 学会使用#define进行宏定义; 学会使用#include进行文件包含。,34,作 业 P104 三、编程题:3,35,课堂练习,#include #define M(x) x+100 int a=1; int fun(int x) static int b=1; b+; return x+a+b; main() int a=2,i; a=M(a);printf(a=%dn,a); for(i=1;i=3;i+) printf(%dn,fun(i); ,写程序结果:,运行结果: a=102 4 6 8,36,3、以下程序的输出结果是_。 #include #d

12、efine FUDGE(y) 2.84+y #define PR(a) printf(%d,(int)(a) ) #define PRINT1(a) PR(a);putchar(n) main() int x=2; PRINT1(FUDGE(5)*x); A、12 B、13 C、15 D、11,37,1、已知i、j、k为int型变量,若从键盘输入:i=1,j=2,k=3,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是_。 A、scanf(%2d%2d%2d,38,3、设a=5、b=6、c=7、d=8、m=2、n=2,执行 (m=ad) 后n的值为_。 A、4 B、2 C、3 D、1,39,6、以下程序中,while循环的循环次数是_。 main() int i=0; wh

温馨提示

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

评论

0/150

提交评论