6.5变量作用域和变量存储类别(教案)-《C语言程序设计》同步教学(电子工业版)

2024-11-18
| 7页
| 124人阅读
| 0人下载
普通

内容正文:

课程单元教案 本课编号 19 本课课时 2学时 内容提要 项目6 函数应用 任务5 变量作用域和变量存储类别 教学目的 1、掌握局部变量和全局变量的定义、语法和功能; 2、掌握动态变量和静态变量的定义、语法和功能。 知识能力 结构 掌握局部变量和全局变量的用法;掌握动态变量和静态变量的用法。 教学重点 难点 重点:变量作用域 难点:变量存储类别。 教学手段 方法 教学方法:项目任务驱动教学法、提问式、启发式 教学手段:课堂讲授法、操作演示法、多媒体教学 思考题与 习题 1、局部变量和全局变量的区别。 2、动态变量和静态变量的区别。 教学内容进程设计 项目导入:综合实践6 学生成绩管理系统功能模块化设计 项目描述:利用自定义函数将学生成绩管理系统中的功能独立出来,进行模块化设计。 问题导入:全局变量在学生成绩信息系统功能模块化设计中的应用? 根据课前预习及搜集的资料,对函数的概念有一个初步的了解,以方便进行下面知识内容的学习。 任务5 变量作用域和变量存储类别 5.1 局部变量和全局变量 C语言中的变量,按作用域范围可分为:局部变量和全局变量。 1. 局部变量 局部变量也称为内部变量。局部变量是在函数内作定义说明的,其作用域仅限于函数内。 说明: (1)所有函数中定义的局部变量,都只能在本函数中使用。主函数中定义的变量也只能在主函数中使用,同时,主函数中也不能使用其它函数中定义的变量。 (2)形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。 (3)允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰。 (4)在复合语句中也可定义变量,其作用域只在复合语句范围内。 例1:局部变量的使用。 main(){ int i=2,j=3,k; k=i+j; {int k=8; printf("%d ",k);} printf("%d ",k);} 结论:第一个k输出结果是8,第二个k输出结果所示5,同一个变量名作用域不同。 2. 全局变量 全局变量也称为外部变量,它是在函数外部定义的变量。全局变量不属于任何一个函数,其作用域是整个源程序。 说明:(1)在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量将被屏蔽而不起作用。 (2)如果全局变量定义点之前的函数需要引用这些变量,应在函数内对被引用的全局变量进行说明。说明的一般形式为: extern 数据类型 全局变量[,全局变量2……]; 例:输入长方体的长(l)、宽(w)、高(h),求长方体体积及表面积。 #include<stdio.h> int s,v; void vs(int a,int b,int c) { v=a*b*c; s=2*(a*b+b*c+a*c); } main() { int l,w,h; printf(" input length,width and height: "); scanf("%d%d%d",&l,&w,&h); vs(l,w,h); printf("v=%d s=%d ",v,s);} 变量v,s为全局变量,作用域包括两个函数。 例:全局变量的定义与说明。 int vs(int xl,int xw) { extern int xh; /*全局变量xh的说明*/ int v; v=xl*xw*xh; /*直接使用全局变量xh的值*/ return v; } main() { extern int xw,xh; /*全局变量的说明*/ int xl=5; /*局部变量的定义*/ printf("xl=%d,xw=%d,xh=%d,v=%d",xl,xw,xh,vs(xl,xw)); } int xl=3,xw=4,xh=5; /*全局变量xl、xw、xh的定义*/ 全局变量xl,xw,xh定义在函数后面,需要使用关键字extern进行作用域扩充说明。 例:全局变量与局部变量同名。 int a=3,b=5; /*a,b为全局变量*/ max(int a,int b) /*a,b为局部变量*/ { int c; c=a>b?a:b; return(c);} main() { int a=8; printf("%d ",max(a,b));} 变量a和b既有全局变量定义,又有局部变量定义。当变量同名,在应用中局部变量优先于全局变量。 5.2 动态变量和静态变量 1.变量分类 变量按照存储位置不同可分为:动态存储变量和静态存储变量。 2. 自动变量(auto) 定义格式:[auto] 数据类型 变量表; 说明:(1)函数及复合语句中的局部变量,如没有声明为static存储类别,都是动态分配存储空间的。 (2)在调用函数时系统会给自动变量分配存储空间,函数调用结束时自动释放。 (3)定义而不初始化,则其值是不确定的。如果初始化,则赋初值操作是在调用时进行的,且每次调用都要重新赋一次初值。 3. 静态局部变量 定义格式: static 数据类型 变量表; 例:自动变量与静态局部变量的存储特性。 void auto_static(void) { int var_auto=0; /*动态变量:每次调用都重新初始化*/ static int var_static=0; /*静态局部变量:只初始化1次*/ printf("var_auto=%d,var_static=%d ",var_auto, var_static); ++var_auto; ++var_static; } main() { int i; for(i=0; i<5; i++) auto_static(); } 说明:(1)静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。 (2)定义时自动赋以0值(整型和实型)或‘\0’(字符型);且每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用结束时的值。 4. 静态全局变量和非静态全局变量 全局变量全部存放在静态存储区,在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放。可分为两种: (1)静态全局变量──只允许被本源文件中的函数引用 格式:static 数据类型 全局变量表; (2)非静态全局变量──允许被其它源文件中的函数引用 格式:数据类型 全局变量表; 其它源文件中的函数,引用非静态全局变量时,需要在引用函数所在的源文件中进行说明: extern 数据类型 全局变量表; 在函数内的extern变量说明,表示引用本源文件中的全局变量; 而函数外(通常在文件开头)的extern变量说明,表示引用其它文件中的全局变量。 5. 动态存储方式和静态存储方式的比较 static对局部变量和全局变量的作用不同: (1)对局部变量 : 使动态存储方式改变为静态存储 ; (2)对全局变量 : 使变量局部化,但仍为静态存储 ; (3)凡有 static 说明的,其作用域都是局限的。 例:静态变量的使用。 main() { int f(int a); int a=1,i; for(i=0;i<3;i++) printf("%4d",f(a)); } int f(int a) { int b=0; static int c=3; b++;c++; return(a+b+c); } 从运行结果可以看出,函数f中定义的变量c为静态变量,其值在上次调用结束会保留结果。 例:静态变量和全局变量的使用。 #include "stdio.h" int n=1; void func(){ static int x=4; int y=10; x=x+2; n=n+10; y=y+n; } main(){ static int x=5; int y; y=n; func(); printf("n=%d ",n); func(); printf("n=%d ",n); } n为全局变量,作用域是两个函数。变量x分别在两个函数中定义,为静态局部变量,分别在各自函数中有效。 随堂实训练习:读程序题,判断结果。 教学小结 1.掌握全局变量和局部变量的特点和区别; 2.掌握动态变量和静态变量的特点和区别。 学科网(北京)股份有限公司 $$

资源预览图

6.5变量作用域和变量存储类别(教案)-《C语言程序设计》同步教学(电子工业版)
1
6.5变量作用域和变量存储类别(教案)-《C语言程序设计》同步教学(电子工业版)
2
6.5变量作用域和变量存储类别(教案)-《C语言程序设计》同步教学(电子工业版)
3
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。