《c语言程序设计教学第6章》由会员分享,可在线阅读,更多相关《c语言程序设计教学第6章(41页珍藏版)》请在金锄头文库上搜索。
1、( ( The C Language ProgrammingThe C Language Programming ) )C C语言程序言程序设计编辑ppt章节名称第第6 6章章 函数与函数与编译预处理理 (6.4-6.66.4-6.6)教学目的与要求掌握掌握变量作用域与存量作用域与存储方式的概念方式的概念 ,掌握,掌握编译预处理的理的概念,通概念,通过程序程序举例掌握自定例掌握自定义函数在程序中的函数在程序中的应用。用。教学内容6.4 6.4 变量作用域与存量作用域与存储方式方式 6.5 6.5 编译预处理理6.6 6.6 内部函数和外部函数内部函数和外部函数 6.7 6.7 程序程序举例例重
2、点变量作用域与存量作用域与存储方式的概念。方式的概念。难点变量作用域与存量作用域与存储方式的概念。方式的概念。作业P104 三、三、编程程题:3教学手段ppt课件、课堂练习、提问回答。教学过程(组织与方法)回顾上次课主要内容、介绍本次课重点、难点 讲解本次课内容小结作业课堂练习。2编辑ppt第第6 6章章 函数与函数与编译预处理理 6.1 6.1 模模块化程序化程序设计与函数与函数6.2 6.2 函数的定函数的定义与与调用用 6.3 6.3 函数的函数的递归调用用6.4 6.4 变量作用域与存量作用域与存储方式方式6.5 6.5 内部函数和外部函数内部函数和外部函数6.6 6.6 编译预处理理
3、6.7 6.7 程序程序举例例 3编辑ppt6.4 6.4 变量作用域与存量作用域与存储方式方式1 1、变量的作用域量的作用域 变量定量定义的三个基的三个基本位置本位置函数内部函数内部局部局部变量量局部局部变量量函数的参数函数的参数 形式参数形式参数函数外部函数外部全局全局变量量全局全局变量量5编辑ppt#include stdio.hvoid fun() int a=3,b=4;printf(a=%d,b=%dn,a,b);main()int a=1,b=2;fun();printf(a=%d,b=%dn,a,b); 输出出结果:果:a=3,b=4a=1,b=2(1 1)局部局部变量量6编辑
4、ppt#include stdio.hint 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); 输出出结果:果:c12a=4,b=12(2 2)全局全局变量量7编辑pptn将将同同一一源源文文件件中中全全局局变量量的的作作用用域域向上向上扩展。展。n引用其他源文件中定引用其他源文件中定义的全局的全局变量。量。(3)外部外部变量的使用量的使用声明格式如下:声明格式如下:extern extern 类型型说明符明符 外部外部变量名量名; ;8编辑ppt#i
5、nclude stdio.hint 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;运行运行结果果:249编辑ppt10编辑ppt11编辑ppt对于全局于全局变量有以下几点量有以下几点说明:明:n全局全局变量就是外部量就是外部变量。量。n同同一一源源文文件件中中,允允许全全局局变量量和和局局部部变量量同同名名。在在局局部部变量量的的作作用用域域内内,全全局局变量不起作用。量不起作用。n由于全局由于全局变量可在多
6、个函数中使用,因量可在多个函数中使用,因而降低了函数的独立性。而降低了函数的独立性。从模从模块化程序化程序设计的的观点来看点来看这是不利的,因此尽量是不利的,因此尽量不要使用全局不要使用全局变量。量。 12编辑ppt#include stdio.hint 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=813编辑pptn变量定量定义的完整格式的完整格式为:存存储类别 数据数据类型型 变量名量名,变量名量名,2、变量的存量的存储类别与生命期与生
7、命期 存存储方式方式生命期生命期变量的量的值静静态存存储编译时分配存分配存储单元并始元并始终占据占据该单元。元。一直存在。一直存在。动态存存储使用使用时分配存分配存储单元,使用完立元,使用完立即即释放。放。时而而存存在在时而而消失。消失。14编辑ppt自自动变量具有以下特点:量具有以下特点:n作用域作用域仅限于定限于定义该变量的量的结构内。构内。 n属于属于动态存存储方式。方式。 n不同的个体中(函数或复合不同的个体中(函数或复合语句内)允句内)允许使用同名的自使用同名的自动变量而不会混淆。量而不会混淆。 (1)(1)自自动变量量(auto)15编辑ppt#include main() int
8、 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=53:x=51:x=31:x=32:x=12:x=1x=1作用域作用域x=1作用域作用域x=3作用域作用域x=5作用域作用域16编辑ppt(2 2)静静态变量量(staticstatic)n静静态变量的定量的定义形式形式为: staticstatic 类型型说明明 变量名量名, ,变量名量名, ,n在在局局部部变量量的的类型型说明明前前加加上上staticst
9、atic构构成局部静成局部静态变量。例如:量。例如: staticstatic int a,b; int a,b;staticstatic float x; float x; 17编辑pptl局部自局部自动变量与局部静量与局部静态变量量对比比存存储方式方式生存期生存期作用域作用域变量的量的值局部自局部自动变量量动态存存储函数被函数被调用用时函数内函数内若不若不赋初初值,其,其值不确定。不确定。局部静局部静态变量量静静态存存储整个程序整个程序运行期运行期间函数内函数内编译时赋初初值, ,程程序运行序运行时已有已有值。18编辑ppt#include stdio.hvoid f(int a) int
10、 j=0;j+;j=a+j;printf(%dn,j);main()int i;for(i=1;i=3;i+)f(i); 运行运行结果:果:23419编辑ppt#include stdio.hvoid 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); 运行运行结果:果:25920编辑ppt存存储方式方式作用域作用域全局全局变量量静静态存存储可可扩展到其他源程展到其他源程序文件中序文件中全局静全局静态变量量静静态存存储只能只能为该源文件内源文件内的函数公用的函数公用l全局全局变量与全局静量
11、与全局静态变量量对比比21编辑pptn变量量的的值存存放放在在CPU的的寄寄存存器器中中,使使用用时不需要不需要访问内存,从而提高了效率。内存,从而提高了效率。寄存器寄存器变量只限于量只限于整型整型、字符型字符型和和指指针型型的局部的局部变量。寄存器量。寄存器变量是量是动态变量量,而,而且数目有限,一般且数目有限,一般仅允允许说明明两个两个寄存器寄存器变量。量。例如:例如:register int d;(3)寄存器寄存器变量量 (register)22编辑ppt#include stdio.hmain()register int i,s=0;for(i=1;iy?x:y#include mai
12、n()int a,b,max;scanf(%d%d,&a,&b);max=MAX(a,b);printf(max=%dn,max); 29编辑pptl宏定宏定义中的形参最好括起来,以避免代中的形参最好括起来,以避免代换时出出错。#define SQR(y) (y) (y)#include stdio.hmain()int i;for(i=1;i=3;i+)printf(%dn,SQR(i+1);#define SQR(y) y y#include stdio.hmain()int i;for(i=1;i=3;i+)printf(%dn,SQR(i+1);结果:果: 4 9 16结果:果:357
13、30编辑pptl所所谓“文文件件包包含含”是是指指将将另另外外的的文文件件包包含到本文件之中。含到本文件之中。l文件包含命令的一般形式文件包含命令的一般形式为:#include 文件名文件名或或#include 例如:例如:#include #include math.h2、文件包含、文件包含31编辑ppt3 3、条件、条件编译略(自学)略(自学)6.7 6.7 程序程序举例例自学自学32编辑ppt小 结n掌握掌握变量作用域的概念量作用域的概念,掌握局部掌握局部变量和全局量和全局变量的概念;量的概念;n掌握掌握变量存量存储类别的概念的概念,掌握静掌握静态存存储和和动态存存储的概念;的概念;n学
14、会使用学会使用#define进行宏定行宏定义;n学会使用学会使用#include进行文件包含。行文件包含。33编辑ppt作 业P104 三、编程题:334编辑ppt课堂堂练习#include #define M(x) x+100int 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=10246835编辑pptn3、以下程序的、以下程序的输出出结果是果是_
15、。n #include n #define FUDGE(y) 2.84+yn #define PR(a) printf(%d,(int)(a) )n #define PRINT1(a) PR(a);putchar(n)n main()n int x=2;n PRINT1(FUDGE(5)*x);n n A、12 n B、13 n C、15 n D、11 36编辑pptn1、已知i、j、k为int型变量,若从键盘输入:i=1,j=2,k=3,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是_。n A、scanf(%2d%2d%2d,&i,&j,&k); n B、scanf(%d,
16、%d,%d,&i,&j,&k);n C、scanf(%d %d %d,&i,&j,&k); n D、scanf(i=%d,j=%d,k=%d,&i,&j,&k);37编辑pptn3、设a=5、b=6、c=7、d=8、m=2、n=2,执行n(m=ad)n后n的值为_。n A、4 n B、2 n C、3 n D、1 38编辑pptn6、以下程序中,while循环的循环次数是_。nmain()nint i=0;n while(i10)n if(i1) continue;n if(i=5)break;n i+;n n .nn A、10 B、1n C、6 D、死循环,不能确定次数39编辑pptn main()n int a,b;n for(a=1,b=1;a=10) break;n if(b%3=1)n b+=3; continue; n n printf(%dn,a);n nA、4 B、6 C、5 D、10140编辑ppt*不是结束,是开始End *编辑ppt