好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

《c语言程序设计教学课件》第6章.ppt

41页
  • 卖家[上传人]:博****1
  • 文档编号:588882817
  • 上传时间:2024-09-09
  • 文档格式:PPT
  • 文档大小:1.46MB
  • / 41 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • ( The C Language ProgrammingThe C Language Programming ) )C C语言程序设计语言程序设计 2章节名称第第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 程序举例程序举例重点变量作用域与存储方式的概念变量作用域与存储方式的概念难点变量作用域与存储方式的概念变量作用域与存储方式的概念作业P104 三、编程题:三、编程题:3教学手段ppt课件、课堂练习、提问回答教学过程(组织与方法)回顾上次课主要内容、介绍本次课重点、难点→ 讲解本次课内容→小结→作业→课堂练习 3第第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 编译预处理编译预处理6.7 6.7 程序举例程序举例 56.4 6.4 变量作用域与存储方式变量作用域与存储方式1 1、变量的作用域、变量的作用域 变量定义变量定义的三个基的三个基本位置本位置函数内部函数内部局部变量局部变量局部变量局部变量函数的参数函数的参数 形式参数形式参数函数外部函数外部全局变量全局变量全局变量全局变量 6#include "stdio.h"void fun() {int a=3,b=4;printf("a=%d,b=%d\n",a,b);}main(){int a=1,b=2;fun();printf("a=%d,b=%d\n",a,b); }输出结果:输出结果:a=3,b=4a=1,b=2((1 1))局部变量局部变量 7#include "stdio.h"int a,b;void f1( ){int c;c=a*b; a=b; b=c;printf("c=%d\n",c);}main( ){a=3;b=4;f1( );printf("a=%d,b=%d\n",a,b); }输出结果:输出结果:c==12a=4,b=12((2 2))全局变量全局变量 8n将将同同一一源源文文件件中中全全局局变变量量的的作作用用域域向上扩展。

      向上扩展n引用其他源文件中定义的全局变量引用其他源文件中定义的全局变量3))外部变量的使用外部变量的使用Ø声明格式如下:声明格式如下:extern 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("%d\n",fun(a,b));}int b=3,c=4;运行结果运行结果:24 10 11 12对于全局变量有以下几点说明:对于全局变量有以下几点说明:n全局变量就是外部变量全局变量就是外部变量n同同一一源源文文件件中中,,允允许许全全局局变变量量和和局局部部变变量量同同名名在在局局部部变变量量的的作作用用域域内内,,全全局局变量不起作用变量不起作用n由于全局变量可在多个函数中使用,因由于全局变量可在多个函数中使用,因而降低了函数的独立性而降低了函数的独立性从模块化程序从模块化程序设计的观点来看这是不利的,因此尽量设计的观点来看这是不利的,因此尽量不要使用全局变量。

      不要使用全局变量 13#include ""int a=3,b=5;max(int a, int b){int c;c=a>b?a:b;return(c);}main(){int a=8; printf("max=%d",max(a,b));}运行结果:运行结果:max=8 14n变量定义的完整格式为:变量定义的完整格式为:存储类别存储类别 数据类型数据类型 变量名变量名,变量名变量名,…2、变量的存储类别与生命期、变量的存储类别与生命期 存储方式存储方式生命期生命期变量的值变量的值静态存储静态存储编译时分配存储编译时分配存储单元并始终占据单元并始终占据该单元一直存在一直存在动态存储动态存储使用时分配存储使用时分配存储单元,使用完立单元,使用完立即释放时时而而存存在在时时而而消失 15自动变量具有以下特点:自动变量具有以下特点:n作用域仅限于定义该变量的结构内作用域仅限于定义该变量的结构内 n属于动态存储方式属于动态存储方式 n不同的个体中(函数或复合语句内)允不同的个体中(函数或复合语句内)允许使用同名的自动变量而不会混淆许使用同名的自动变量而不会混淆 (1)(1)自动变量自动变量((auto)) 16#include ""main(){ int x=1; void prt( ); { int x=3; prt( ); printf("1: x=%d\n",x); } printf("2: x=%d\n",x);}void prt( ){ int x=5; printf("3: x=%d\n",x);}3:x=53:x=51:x=31:x=32:x=12:x=1x=1作用域作用域x=1作用域作用域x=3作用域作用域x=5作用域作用域 17((2 2))静态变量静态变量((staticstatic))n静态变量的定义形式为:静态变量的定义形式为: staticstatic 类型说明类型说明 变量名变量名, ,变量名变量名, ,…n在在局局部部变变量量的的类类型型说说明明前前加加上上staticstatic构构成局部静态变量。

      例如:成局部静态变量例如:{ {staticstatic int a,b; int a,b;staticstatic float x; float x; … } } 18l局部自动变量与局部静态变量对比局部自动变量与局部静态变量对比存储方式存储方式生存期生存期作用域作用域变量的值变量的值局部自局部自动变量动变量动态动态存储存储函数被调函数被调用时用时函数内函数内若不赋初若不赋初值,其值值,其值不确定局部静局部静态变量态变量静态存储静态存储整个程序整个程序运行期间运行期间函数内函数内编译时赋编译时赋初值初值, ,程程序运行时序运行时已有值 19#include "stdio.h"void f(int a) {int j=0;j++;j=a+j;printf("%d\n",j);}main(){int i;for(i=1;i<=3;i++)f(i); }运行结果:运行结果:234 20#include "stdio.h"void f(int a){static int j=0;j++;j=a+j;printf("%d\n",j);}main(){int i;for(i=1;i<=3;i++)f(i); }运行结果:运行结果:259 21存储方式存储方式作用域作用域全局变量全局变量静态存储静态存储可扩展到其他源程可扩展到其他源程序文件中序文件中全局静态全局静态变量变量静态存储静态存储只能为该源文件内只能为该源文件内的函数公用的函数公用l全局变量与全局静态变量对比全局变量与全局静态变量对比 22n变变量量的的值值存存放放在在CPU的的寄寄存存器器中中,,使使用用时不需要访问内存,从而提高了效率。

      时不需要访问内存,从而提高了效率寄存器变量只限于寄存器变量只限于整型整型、、字符型字符型和和指针型指针型的局部变量寄存器变量是的局部变量寄存器变量是动态变量动态变量,而,而且数目有限,一般仅允许说明且数目有限,一般仅允许说明两个两个寄存器寄存器变量例如:例如: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=%d\n",s); }例例6.8 编程计算:编程计算:s==1+2+3+4+…+100 24l只能被本文件中其他函数所调用的函数,只能被本文件中其他函数所调用的函数,称为内部函数称为内部函数 static 类型名类型名 函数名函数名(形参表形参表)l外部函数就是允许其他文件调用的函数外部函数就是允许其他文件调用的函数 extern 类型名类型名 函数名函数名(形参表形参表)6.5 6.5 内部函数和外部函数内部函数和外部函数省略省略extern隐含为外部函数隐含为外部函数 25n以以“# #”开头的行为编译预处理标志。

      开头的行为编译预处理标志合理地使用预处理功能,可使编写的程合理地使用预处理功能,可使编写的程序便于阅读、修改、移植和调试序便于阅读、修改、移植和调试 6.6 6.6 编译预处理编译预处理1. 宏定义宏定义一般形式为:一般形式为: #define 标识符标识符 字符串字符串例:例: #define N 100(1)不带参数的宏定义不带参数的宏定义宏名宏名 26对于宏定义的几点说明:对于宏定义的几点说明:n编编译译时时用用字字符符串串取取代代宏宏名名,,只只是是一一种简单的代换种简单的代换n宏定义行尾不要加分号宏定义行尾不要加分号n宏宏定定义义必必须须写写在在函函数数之之外外,,其其作作用用域为从定义位置起到源程序结束域为从定义位置起到源程序结束n如如要要终终止止宏宏定定义义的的作作用用域域可可使使用用#undef命令命令 27#include ""main(  ){…}#undef PI/*终止终止PI的作用域的作用域*/f1(  ){…} 28一般形式为:一般形式为:#define 宏名宏名(形参表形参表) 字符串字符串((2)带参数的宏定义)带参数的宏定义l对带参数的宏,在调用时,不仅要宏对带参数的宏,在调用时,不仅要宏展开,而且要用实参去代换形参。

      展开,而且要用实参去代换形参带参数宏调用的一般形式为:带参数宏调用的一般形式为:宏名宏名( (实参表实参表) ) 29#define MAX(x,y) x>y?x:y#include ""main(){int a,b,max;scanf("%d%d",&a,&b);max=MAX(a,b);printf("max=%d\n",max);} 30l宏定义中的形参最好括起来,以避免代换时出错宏定义中的形参最好括起来,以避免代换时出错define SQR(y) (y) (y)#include "stdio.h"main(){int i;for(i=1;i<=3;i++)printf("%d\n",SQR(i+1));}#define SQR(y) y y#include "stdio.h"main(){int i;for(i=1;i<=3;i++)printf("%d\n",SQR(i+1));}结果:结果: 4 9 16结果:结果:357 31l所所谓谓“文文件件包包含含”是是指指将将另另外外的的文文件件包包含到本文件之中含到本文件之中l文件包含命令的一般形式为:文件包含命令的一般形式为:#include "文件名文件名"或或#include <文件名文件名>例如:例如:#include #include "math.h"2、文件包含、文件包含 323 3、条件编译、条件编译略(自学)略(自学)6.7 6.7 程序举例程序举例自学自学 33小 结n掌握变量作用域的概念掌握变量作用域的概念,掌握局部变掌握局部变量和全局变量的概念;量和全局变量的概念;n掌握变量存储类别的概念掌握变量存储类别的概念,掌握静态掌握静态存储和动态存储的概念;存储和动态存储的概念;n学会使用学会使用#define进行宏定义;进行宏定义;n学会使用学会使用#include进行文件包含。

      进行文件包含 34作 业P104 三、编程题:3 35课堂练习课堂练习#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=%d\n",a);for(i=1;i<=3;i++)printf("%d\n",fun(i));} 写程序结果:写程序结果:运行结果:运行结果:a=102468 36n3、以下程序的输出结果是、以下程序的输出结果是______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 37n1、已知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,%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); 38n3、设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 39n6、以下程序中,while循环的循环次数是______。

      nmain()n{int i=0;n while(i<10)n { if(i<1) continue;n if(i==5)break;n i++;n }n ......n}n A、10 B、1n C、6 D、死循环,不能确定次数 40n main()n { int a,b;n for(a=1,b=1;a<=100;a++)n { if(b>=10) break;n if(b%3==1)n { b+=3; continue; }n }n printf("%d\n",a);n }nA、4 B、6 C、5 D、101 *不是结束,是开始End * 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.