圳职业技术学院 Shenzhen Polytechnic 第六单元(4):变量的作用域与存储类别 教学内容 变量的作用域和存储类别,内部函数和外部函数,工程文件 教学目标 应知 变量的作用域与生存期 变量的存储类别 内部函数、外部函数的使用与工程文件 应会 程序中变量的作用范围 能够分析程序中静态变量的值 学会建立工程文件进行函数调用 难点 静态变量在程序中的作用 单步断点调试方法的使用 教学方法 厚讨论式教学,分析方法采用单步断点调试,通过观察程序运行和程序分析学习全局 变量和局部变量,静态存储和动态存储 教学过程 1.全局变量和局部变量 分析结果说明全局变量与局部变量的作用域 int a, b main() // extern c;//外部变量 void deel()i void my ( b=5 printf( a=sd, b=d",a, b) deel(i my() int C=200 void deel( I int a, bi a=100; b=100 计算机系乌云高娃 Wygwl2lcn, com第46页共83页
深 圳 职 业 技 术 学 院 Shenzhen Polytechnic 计算机系乌云高娃 Wygw@21cn.com 第 46 页 共 83 页 第六单元(4):变量的作用域与存储类别 教学内容 变量的作用域和存储类别,内部函数和外部函数,工程文件 教学目标 变量的作用域与生存期 变量的存储类别 应知 内部函数、外部函数的使用与工程文件 程序中变量的作用范围 能够分析程序中静态变量的值 应会 学会建立工程文件进行函数调用 难点 静态变量在程序中的作用 单步断点调试方法的使用 教学方法 讨论式教学,分析方法采用单步断点调试,通过观察程序运行和程序分析学习全局 变量和局部变量,静态存储和动态存储 教学过程 1. 全局变量和局部变量 分析结果说明全局变量与局部变量的作用域 int a,b; main() { int i,j; //extern c; //外部变量 void deel(); void my(); clrscr(); a=3; b=5; printf("a=%d,b=%d",a,b); deel(); my(); } int c=200; void deel() { int a,b; a=100; b=100;
圳职业技术学院 Shenzhen Polytechnic printf("\ndeel function a: id, b: d, c: id",a,b, c)i printf("\ nmy function\nd号d号d",a,b,c); 2.静态存储和动态存储 分析结果说明静态存储的特点 (1)f(int I auto int b=0 static c=3 return(a+b+c) main() printf("95d",f(a))i 结果为7 (2) int fac(int n) Istatic int f=l return fi main o for(i=1;i<=5;i++) 3.定义一个二维字符数组 str ing[3][10],分别在prog1.c中和prog2.c中定 义函数打印出二维字符数组的第1和第2个字符串。(外部函数、内部函数 工程概念) 分析程序结果 main o [int k=4, m=l,piclrscr() printf(" 83d", p) 「计算机系乌云高娃y82lcn,com第47页共83页
深 圳 职 业 技 术 学 院 Shenzhen Polytechnic 计算机系乌云高娃 Wygw@21cn.com 第 47 页 共 83 页 printf("\ndeel function a:%d,b:%d,c:%d",a,b,c); } void my() { printf("\nmy function\n%d %d %d",a,b,c); } 2. 静态存储和动态存储 分析结果说明静态存储的特点 (1)f(int a) { auto int b=0; static c=3; b=b+1; c=c+1; return(a+b+c); } main() {int a=2,i; clrscr(); for(i=0;i<3;i++) printf("%5d",f(a)); } 结果为 7 8 9 (2) int fac(int n) {static int f=1; f=f*n; return f;} main() { int i; for(i=1;i<=5;i++) printf(“%d! = %d\n”,i,fac(i)); } 3. 定义一个二维字符数组 string[3][10],分别在 prog1.c 中和 prog2.c 中定 义函数打印出二维字符数组的第 1 和第 2 个字符串。(外部函数、内部函数、 工程概念) 4. 分析程序结果: (1) main() {int k=4,m=1,p;clrscr(); p=func(k,m); printf("%3d",p);
圳)职业技术学院 Shenzhen Polytechni p=func(k, m) printf("号3d\n",p); func(int a int b) [static int m=0, i=2 i+=m+1 return m (2) void func (int)i (int k=4i func(k) void func (int a I static int m=0; printf("号3d",m 学生容易出错的地方 静态变量在程序中的值 全局变量与局部变量同名时起作用的那个变量 问题与讨论 在什么情况下用静态变量? 什么是全局变量(外部变量) 什么是局部变量(内部变量),与全局变量有什么区别 什么是外部函数 什么是内部函数,与外部函数有什么区别 什么是静态变量 什么是动态变量,与静态变量有什么区别 计算机系乌云高娃 Wygwl2lcn, com第48页共83页
深 圳 职 业 技 术 学 院 Shenzhen Polytechnic 计算机系乌云高娃 Wygw@21cn.com 第 48 页 共 83 页 p=func(k,m); printf("%3d\n",p); } func(int a,int b) {static int m=0,i=2; i+=m+1; m=i+a+b; return m; } (2). void func(int); main() {int k=4; func(k); func(k); } void func(int a) { static int m=0; m+=a; printf("%3d",m); } 学生容易出错的地方 静态变量在程序中的值 全局变量与局部变量同名时起作用的那个变量 问题与讨论 在什么情况下用静态变量? 什么是全局变量(外部变量) 什么是局部变量(内部变量),与全局变量有什么区别 什么是外部函数 什么是内部函数,与外部函数有什么区别 什么是静态变量 什么是动态变量,与静态变量有什么区别
圳职业技术学院 Shenzhen Polytechnic 小结(可由问题与讨论方式给出) 变量从作用域可分为外部变量和内部变量,即全局变量和局部变量 变量从生存期的角度可分为静态变量和动态变量 函数也有内部函数与外部函数,访问时有所不同 课后任务 自 编写函数 int prime(intn)判断n是否是素数(只能被1和该数自己整除的数) 将判断结果返回,在主函数中调用函数 prime(,求出1-100之内的所有素数 计算机系乌云高娃 Wygwl2lcn, com第9页共83页
深 圳 职 业 技 术 学 院 Shenzhen Polytechnic 计算机系乌云高娃 Wygw@21cn.com 第 49 页 共 83 页 小结(可由问题与讨论方式给出) 变量从作用域可分为外部变量和内部变量,即全局变量和局部变量 变量从生存期的角度可分为静态变量和动态变量 函数也有内部函数与外部函数,访问时有所不同 课后任务 编写函数 int prime(int n)判断 n 是否是素数(只能被 1 和该数自己整除的数), 将判断结果返回,在主函数中调用函数 prime(),求出 1-100 之内的所有素数