C语言,第8章 数组做函数参数ppt课件_第1页
C语言,第8章 数组做函数参数ppt课件_第2页
C语言,第8章 数组做函数参数ppt课件_第3页
C语言,第8章 数组做函数参数ppt课件_第4页
C语言,第8章 数组做函数参数ppt课件_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选,1,第8讲函数_2,C语言程序设计,内容提要,一维数组做函数参数二维数组做函数参数变量的作用域和存储类别(理论性知识)进一步理解函数的递归调用和递归算法的应用,回顾上周内容,怎样编写自定义函数?怎样调用自定义函数?,函数的格式,函数值类型函数名(形式参数)函数体说明:如果函数没有函数值,函数值类型为void如果函数有函数值,函数值类型为某种数据类型,函数值由return语句返回;如果函数没有形式参数,表示为void如果函数有形式参数,则每一个形参的说明均为:数据类型形参名如果有多个形参,用逗号分隔。,函数的调用,要让计算机执行一个函数,就必须对函数进行调用。说明:调用库函数,需要在源程序最前面通过include预编译指令引入对应库函数的头文件调用库函数的关键是遵守函数原型定义的约定使用正确的函数名传递的实参在数量,类型和顺序必须和形参一致如果有函数值,注意返回值的类型函数可以嵌套调用,递归调用,但是不能循环调用。,1、实参与形参的个数相等,类型一致;2、实参可以是变量、表达式、常数,实参必须有确定的值;3、在调用函数时,如果被调用函数的形参是变量,实参和形参分别拥有各自的内存空间,实参将值传递给对应的形参,形参值的改变不影响实参;4、如果函数调用在前,函数定义在后,则在调用函数前必须对函数进行原型声明。,函数总结,1、输入的时候。scanf(“%d”,/错误,为什么,之前哪些地方涉及过“地址”这个概念,在调用函数时,如果被调函数的形参是一维数组,则对应的实参是一个内存单元的地址,实参数组和形参数组共享一段内存。在函数中对形参数组定义时,可以省略数组的大小说明。例如,intarr,一维数组做函数参数,程序举例,P241.C程序的功能是:从键盘分别读入5个数到arrA中、8个数至arrB中,然后分别调用自定义函数输出数组arrA和arrB的各元素。,voidprintArray(inta,intn)inti;for(i=0;in;i+)printf(%d,ai);,程序举例,P243.C程序的功能是:从键盘分别读入5个数到arrA中、8个数至arrB中,然后分别调用自定义函数计算数组arrA和arrB各元素的平均值、再输出平均值。,floataverage(inta,intn)inti,sum=0;for(i=0;in;i+)sum=sum+ai;return(float)sum/n;,程序举例,P244.C程序的功能是:从键盘分别读入5个数到arrA中、8个数至arrB中,再读入一个欲查找的数searchVal,然后分别调用自定义函数在数组arrA和arrB中查找searchVal所在位置的下标(不考虑在数组中存在多个searchVal的情况)、输出查找结果。,intsearch(inta,intn,intm)intweizhi=-1,i;for(i=0;in;i+)if(ai=m)weizhi=i;break;returnweizhi;,程序举例,P817.C程序的功能是:从键盘输入一行可带空格的字符串(约定:字符数127字节),调用函数将该字符串逆序存放,然后输出该字符串。,voidnixu(chara)inti,j;chartmp;for(i=0,j=strlen(a)-1;ij;i+,j-)tmp=ai;ai=aj;aj=tmp;,在调用函数时,如果被调函数的形参是二维数组,则对应的实参是一个内存单元地址,实参数组和形参数组共享一段内存。在函数中对形参数组定义时,可以指定每一维的大小,也可以省略第一维的大小说明,但不能只指定第一维而省略第二维。例如:intarray34;intarray10;(正确!)intarray;intarray3;(错误!),二维数组做函数参数,程序举例,P818.C程序的功能是:找出任意的一个mn矩阵每一行上的最大值的列下标并按示例格式要求显示。,voidmax(intaNN,inthang,intlie)inti,j,maxvalue,maxlie;for(i=0;imaxvalue)maxvalue=aij;maxlie=j;printf(Themaxvalueinline%dis%dn,i,maxlie);,程序举例,P823.C程序的功能是:将m(2=m=20)行m列的二维数组arrayA中的最后一行放到二维数组arrayB的第0列中,把二维数组arrayA中的第0行放到二维数组arrayB的最后一列中,二维数组arrayB中的其他数据和arrayA一致。,voidzh(inta2020,intb2020,intn)inti,j;for(i=0;in;i+)for(j=0;jn;j+)bij=aij;for(i=0;ib?a:b;return(c);intmain(void)inta=8;printf(“max=%d”,max(a,b);return0;,形参a、b的作用范围,全局变量a、b的作用范围,局部变量a的作用范围,变量的存储类别,一、动态存储方式与静态存储方式从变量的作用域(空间)角度分:全局变量和局部变量从变量存在的时间(生存期)来分:静态存储方式和动态存储方式静态存储方式定义:在程序运行期间分配固定存储空间的方式。动态存储方式定义:在程序运行期间根据需要进行动态分配存储空间的方式。即:在函数调用时开始分配动态存储空间,函数结束时释放这些空间。,静态存储方式的数据:全局变量静态局部变量特点:在程序编译时分配内存单元,在整个程序执行期间占据固定存储单元,直到程序执行完毕才释放。动态存储方式的数据:自动变量函数的形式参数函数调用时的现场保护和返回地址等。特点:函数调用时分配动态存储空间,函数调用结束时释放这些空间。即:动态分配和释放。,二、auto变量(用auto声明的局部变量)自动变量:自动变量用关键字auto作存储类别的声明。,特点:在调用该函数时,系统给变量分配存储空间,函数调用结束时自动释放这些空间。默认的局部变量都是auto类型,例如:intf(inta)autointb,c=3;说明:关键字“auto”可以省略不写(隐含指定为自动变量)。例如:autointb,c=3;intb,c=3;,三、用static声明局部变量静态局部变量:特点:函数中的局部变量的值在函数调用结束后不消失而保留原值,即其所占用的存储单元不释放,在下一次调用该函数时,该变量已有值,就是上一次函数调用结束时的值。声明:(用关键字static进行声明)static类型标识符变量名例如:staticfloata;,例考察静态局部变量的值。,#includeintf(inta)intb=0;staticintc=3;b=b+1;c=c+1;return(a+b+c);intmain(void)intam=2,i;for(i=0;i2;i+)printf(“%d”,f(am);return0;运行结果:?,关于静态局部变量的说明:如在定义静态局部变量时不赋初值,编译时自动赋初值0(对数值型数据)或空字符(对字符变量)。而对自动变量来说,如果不赋初值,它的值是一个不确定的值。静态局部变量仍属于局部变量,其它函数不能引用它。,例如:对静态局部变量:staticinta;(a=0)staticfloatb;(b=0.0)staticcharc;(c=0),对自动变量:inta;(a的值不确定)floatb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论