C语言程序设计说课PPT课件

上传人:沈*** 文档编号:139316508 上传时间:2022-08-22 格式:PPT 页数:43 大小:2.43MB
返回 下载 相关 举报
C语言程序设计说课PPT课件_第1页
第1页 / 共43页
C语言程序设计说课PPT课件_第2页
第2页 / 共43页
C语言程序设计说课PPT课件_第3页
第3页 / 共43页
点击查看更多>>
资源描述
电子与通信教研室电子与通信教研室单元四单元四 C C程序的数组、函数与指针程序的数组、函数与指针兰州工业学院电子信息工程学院兰州工业学院电子信息工程学院通信工程系通信工程系单元四、C程序的数组、函数与指针111.C语言数组概念、定义;一维数组、二维数组的定义、初始化122.数组的两种典型处理(查找和排序);有关处理字符串的系统函数的使用方法133.函数的结构、设计方法和调用方法;函数调用中数据传递的方式144.简单的嵌套调用函数和递归调用函数的分析和设计;变量生命期和作用域155.指针概念及物理解释;指针变量的正确定义;地址、指针、指针变量的概念166.指针数组和数组指针的区别;指针函数和函数指针的区别3C程序程序源程序文件源程序文件n函数函数1函数函数m 源程序文件源程序文件1函数函数1函数函数n5函数类型函数类型 函数名函数名(类型名类型名 形式参数形式参数1,)说明语句说明语句 执行语句执行语句 例如:求两个数的最大值。例如:求两个数的最大值。int max(int x,int y)int z;z=x y?x:y;return(z);类型省略时类型省略时默认为默认为int类型类型没有形式参数没有形式参数为为无参函数无参函数 2005年3月6void swap(int x,int y)main()swap(a,b);7函数名(实参表列)函数名(实参表列)在在C语言中,把函数调用也作为一个表达式。语言中,把函数调用也作为一个表达式。因此凡是表达式可以出现的地方都可以出现函数因此凡是表达式可以出现的地方都可以出现函数调用。例如:调用。例如:welcome();if(iabs(a)max)max=iabs(a);m=max(c,max(a,b);函数调用的一般形式:函数调用的一般形式:82005年3月9void swap(int x,int y)int z;z=x;x=y;y=z;printf(nx=%d,y=%d,x,y);main()int a=10,b=20;swap(a,b);printf(na=%d,b=%dn,a,b);程序输出结果:程序输出结果:x=20,y=10a=10,b=20形式参数(形参)形式参数(形参)【例例7.4】编一程序,将主函数中的两个变量的值传编一程序,将主函数中的两个变量的值传递给递给swap函数中的两个形参,交换两个形参的值。函数中的两个形参,交换两个形参的值。单向值传递单向值传递10 当函数被调用时才给形参分配内存单元。调用结当函数被调用时才给形参分配内存单元。调用结束,所占内存被释放。束,所占内存被释放。实参可以是常量、变量或表达式,但要求它们有实参可以是常量、变量或表达式,但要求它们有确定的值。确定的值。实参与形参类型要一致,字符型与整型可以兼容实参与形参类型要一致,字符型与整型可以兼容。实参与形参的个数必须相等。在函数调用时,实实参与形参的个数必须相等。在函数调用时,实参的值赋给与之相对应的形参。参的值赋给与之相对应的形参。“单向值传递单向值传递”。2005年3月11说明:说明:函数的类型函数的类型决定了函数返决定了函数返回值的类型。回值的类型。若省略函数的若省略函数的类型,系统默类型,系统默认其为认其为int型。型。无返回值的无返回值的函数应将其类函数应将其类型定义为型定义为void 2005年3月12函数的返回值是通过函数的返回值是通过return语句带回到主调函数的语句带回到主调函数的如果不一致,系统自动将表达式类型转如果不一致,系统自动将表达式类型转换为函数类型换为函数类型2005年3月13思考:思考:若要得到单精度实型的圆面积,程序应如何修改若要得到单精度实型的圆面积,程序应如何修改程序运行情况如下:程序运行情况如下:2 12简单的嵌套调用函数和递归调用函数简单的嵌套调用函数和递归调用函数的分析和设计;变量生命期和作用域的分析和设计;变量生命期和作用域152005年3月16函数的嵌套调用函数的嵌套调用2005年3月17程序输出结果:程序输出结果:9 2005年3月18函数的递归调用函数的递归调用1递归的基本概念递归的基本概念递归调用递归调用:一个函数直接或间接地调用了它本身:一个函数直接或间接地调用了它本身,就称为函数的递归调用。,就称为函数的递归调用。递归函数递归函数:在函数体内调用该函数本身。:在函数体内调用该函数本身。int sub(int x)int y,z;if()z=sub(y);else return;例如:例如:直接调用直接调用sub函数本身函数本身2005年3月19【例例7.16】编一递归函数求编一递归函数求n!。思路思路:以求:以求4的阶乘为例的阶乘为例:4!=4*3!,3!=3*2!,2!=2*1!,1!=1,0!=1。递归结束条件递归结束条件:当:当n=1或或n=0时,时,n!=1。递归公式:递归公式:2005年3月20float fact(int n)float f=0;if(n0)printf(n0)n2005年3月23程序运行情况如下:程序运行情况如下:2,10 1024242005年3月25变量的作用域变量的作用域局部变量及其作用域局部变量及其作用域变量的作用域变量的作用域:变量在程序中可以被使用的范围。:变量在程序中可以被使用的范围。根据变量的作用域可以将变量分为根据变量的作用域可以将变量分为局部变量和全局局部变量和全局变量。变量。局部变量(局部变量():在:在函数内函数内或或复合语句内复合语句内定定义的变量以及义的变量以及。作用域作用域:函数内或复合语句内。:函数内或复合语句内。【例例】分析下面程序的运行结果及变量的作用域。分析下面程序的运行结果及变量的作用域。局部变量在一个函数内部定义的变量只在本函数范围内有效,因此是内部变量内部变量,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的,又称为“局部变量局部变量”。说明说明:(1)主函数中定义的变量,也只在主函数中有效,而不因为是在主函数中定义的而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。(2)不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。(3)形式参数也是局部变量,只在本函数中有效。其他函数可以调用该函数,但不能引用该函数的形参。(4)在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效。2005年3月27void sub(int a,int b)int c;a=a+b;b=b+a;c=b-a;printf(sub:ta=%d b=%d c=%dn,a,b,c);main()int a=1,b=1,c=1;printf(main:ta=%d b=%d c=%dn,a,b,c);sub(a,b);printf(main:ta=%d b=%d c=%dn,a,b,c);int a=2,b=2;printf(comp:ta=%d b=%d c=%dn,a,b,c);printf(main:ta=%d b=%d c=%dn,a,b,c);“分程序分程序”或或“程序块程序块”2005年3月28全局变量及其作用域全局变量及其作用域全局变量全局变量():在):在函数外部函数外部定义的定义的变量。变量。作用域作用域:。如在其作用域内的函数或分程序中定。如在其作用域内的函数或分程序中定义了同名局部变量,则在局部变量的作用域义了同名局部变量,则在局部变量的作用域内,同名全局变量暂时不起作用。内,同名全局变量暂时不起作用。【例例7】全局变量和局部变量的作用域。全局变量和局部变量的作用域。2005年3月29int a=5;void f(int x,int y)int b,c;b=a+x;c=a-y;printf(%dt%dt%dn,a,b,c);main()int b=6,c=7;f(b,c);printf(%dt%dt%dn,a,b,c);int a=9,b=8;printf(%dt%dt%dn,a,b,c);int c=10;printf(%dt%dt%dn,a,b,c);printf(%dt%dt%dn,a,b,c);printf(%dt%dt%dn,a,b,c);全局变量全局变量2005年3月307.6.1 变量的生存期与变量的存储分类变量的生存期与变量的存储分类变量的生存期变量的生存期:变量在内存中占据存储空间的时间。:变量在内存中占据存储空间的时间。程序代码区静态存储区动态存储区存储分配存储分配动态存储变动态存储变量量静态存储变量静态存储变量2005年3月317.6.2 变量的存储类别变量的存储类别变量的属性2005年3月32变量定义语句的一般形式变量定义语句的一般形式 1自动变量(自动变量(auto类别)类别)局部变量可以定义为自动变量。局部变量可以定义为自动变量。main()int x,y;main()auto int x,y;等价等价可省2005年3月332005年3月34全局静态变量(或称外部静态变量)全局静态变量(或称外部静态变量)static int a;main()float x,y;f()static int b=1;全局静态变量全局静态变量不能省2005年3月35编译时,将其分配在内存的静态存储区中,程序编译时,将其分配在内存的静态存储区中,程序运行结束释放该单元。运行结束释放该单元。若定义时未赋初值,在编译时,系统自动赋初值若定义时未赋初值,在编译时,系统自动赋初值为为0 0;若定义时赋初值,则仅在编译时赋初值一次,;若定义时赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值程序运行后不再给变量赋初值 。整个程序的执行期间。整个程序的执行期间。局部静态变量的作用域是它所在的函数或分程序。局部静态变量的作用域是它所在的函数或分程序。全局静态变量的作用域是从定义处开始到本源文件全局静态变量的作用域是从定义处开始到本源文件结束。结束。2005年3月36int c;static int a;main()float;char s;f()static int b=1;全局静态变量全局静态变量外部变量外部变量2005年3月37问题:问题:全局静全局静态变量态变量的作用的作用域可以域可以扩展到扩展到本程序本程序的其它的其它文件吗?文件吗?2005年3月38外部变量声明的一般格式外部变量声明的一般格式注意:注意:外部变量声明用关键字外部变量声明用关键字externextern,而外部变量的,而外部变量的定义不能用定义不能用externextern,只能隐式定义。,只能隐式定义。定义外部变量时,系统要给变量分配存储空间,定义外部变量时,系统要给变量分配存储空间,而对外部变量声明时,系统不分配存储空间,而对外部变量声明时,系统不分配存储空间,只是让编译系统知道该变量是一个已经定义过只是让编译系统知道该变量是一个已经定义过的外部变量,与函数声明的作用类似。的外部变量,与函数声明的作用类似。2005年3月39外部变量声明外部变量声明思考:思考:在在f1函数中声明函数中声明c1、c2的作用是什么?如何修改的作用是什么?如何修改程序使所有函数都可以使用程序使所有函数都可以使用外部变量而又不需要声明?外部变量而又不需要声明?【例例7.24】在一个文件内声明外部变量。在一个文件内声明外部变量。2005年3月40【例例7.25】在多文件的程序中声明外部变量。在多文件的程序中声明外部变量。int i;main()void f1(),f2(),f3();i=1;f1();printf(tmain:i=%d,i);f2();printf(tmain:i=%d,i);f3();printf(tmain:i=%dn,i);void f1()i+;printf(nf1:i=%d,i);file2.c文件中程序如下:文件中程序如下:extern int i;void f2()int i=3;printf(nf2:i=%d,i);void f3()i=3;printf(nf3:i=%d,i);程序输出结果:程序输出结果:f1:i=2 main:i=2f2:i=3 main:i=2f3:i=3 main:i=3声明外部变量声明外部变量定义外部变量定义外部变量2005年3月41【例例7.26】寄存器变量的使用。寄存器变量的使用。main()long int sum=0;register int i;for(i=1;i=1000;i+)sum+=i;printf(sum=%ldn,sum);程序输出结果:程序输出结果:sum=5005002005年3月427.6.3 归纳变量的分类归纳变量的分类1 1按照变量的作用域对变量分类按照变量的作用域对变量分类 局部变量局部变量 全局变量全局变量2 2按照变量的生存期对变量分类按照变量的生存期对变量分类 静态存储变量静态存储变量包括:局部静态变量和全局静态变量包括:局部静态变量和全局静态变量 动态存储变量动态存储变量包括:自动变量包括:自动变量2005年3月43
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!