C第12次课.ppt

上传人:沈*** 文档编号:225922696 上传时间:2023-08-04 格式:PPT 页数:27 大小:903.50KB
收藏 版权申诉 举报 下载
C第12次课.ppt_第1页
第1页 / 共27页
C第12次课.ppt_第2页
第2页 / 共27页
C第12次课.ppt_第3页
第3页 / 共27页
资源描述:

《C第12次课.ppt》由会员分享,可在线阅读,更多相关《C第12次课.ppt(27页珍藏版)》请在装配图网上搜索。

1、教学目的教学目的和要求和要求u正确理解二维数组作函数参数的意义正确理解二维数组作函数参数的意义u正确理解函数的嵌套调用和递归调用正确理解函数的嵌套调用和递归调用重点重点难点难点重点:函数的相互和递归调用流程重点:函数的相互和递归调用流程难点:函数的递归调用的理解难点:函数的递归调用的理解教学教学关键点关键点1、数数组组用用作作函函数数参参数数,大大多多数数时时候候是是使使用用地地址址传递而非值传递,关键在于形参的定义;传递而非值传递,关键在于形参的定义;2、图示法说明函数的递归调用;、图示法说明函数的递归调用;17.2.2二维数组作函数参数二维数组作函数参数二维数组作函数参数,形参的写法为:二

2、维数组作函数参数,形参的写法为:类型说明符类型说明符形参数组名形参数组名数组长度数组长度1数组长度数组长度2例如:例如:srh_min(inta34)或:或:srh_min(a)inta34;2说明:说明:形参数组定义时可以指定或省略第一维的大小。形参数组定义时可以指定或省略第一维的大小。例如:例如:srh_min(inta4,intn)或:或:srh_min(a,n)inta4,n;3例例7-11写函数打印写函数打印n行行10列二维数组,其中列二维数组,其中n是任意整数是任意整数voidprint_array(inta10,intn)inti,j;for(i=0;in;i+)for(j=0;

3、j10;j+)printf(“%3d”,aij);printf(“n”);例例7-10写函数交换任意一个写函数交换任意一个n*10的二维数组的的二维数组的i,j两行两行 voidexchange(inta10,inti,intj)intk,t;for(k=0;k10;k+)t=aik;aik=ajk;ajk=t;4例例:n行行10列列int型数组的每一行都有一个最大值型数组的每一行都有一个最大值,写一函数写一函数,求这求这n个个最大值的最小值最大值的最小值.max_element(inta,intm)intmax,i;max=a0;for(i=1;imax)max=ai;returnmax;m

4、ax_min(inta10,intn)inti,min,max;min=max_element(a0,10);for(i=1;imax)min=max;returnmin;57.2.3数组作为函数参数的函数调用方式数组作为函数参数的函数调用方式数组做函数参数时,实参应用数组做函数参数时,实参应用数组名数组名。例如:例如:print_array(a,n);exchange(array,3,6);说明:说明:1)数组做函数参数时,实参和形参应在调用函数和被调用函)数组做函数参数时,实参和形参应在调用函数和被调用函数中分别定义。数中分别定义。2)实参数组和形参数组类型应一致,大小可以不一致。)实参数

5、组和形参数组类型应一致,大小可以不一致。6例例7-12请编写请编写函数函数intfun(charstr),它的功能是判别字符串它的功能是判别字符串str是否是是否是“回文回文”,若是,返回若是,返回1,否则返回,否则返回0。(提示:回文是指正反序。(提示:回文是指正反序相同,例如,相同,例如,“13531”、“helleh”是回文,是回文,但但“1353”、“Helleh”不是回文。)不是回文。)分析:分析:假设已知字符串的长度为假设已知字符串的长度为n,检查回文的算法可设计如下:,检查回文的算法可设计如下:第第0个字符和第个字符和第n1个字符比较,不相等则不是回文,可以结束,相等则继个字符比

6、较,不相等则不是回文,可以结束,相等则继续进行下面的操作;续进行下面的操作;第第1个字符和第个字符和第n2个字符比较,不相等则不是回文,可以结束,相等则继个字符比较,不相等则不是回文,可以结束,相等则继续进行下面的操作;续进行下面的操作;第第n/21个字符和第个字符和第n1(n/21)个字符比较,不相等则不是回文,相个字符比较,不相等则不是回文,相等则是回文。等则是回文。7在在fun函数中,上述算法可用循环结构来实现,循环前函数中,上述算法可用循环结构来实现,循环前将标记设置为将标记设置为1。循环体中对当前处理的两个字符进行比。循环体中对当前处理的两个字符进行比较:不相等则将记录不是回文的标记

7、,同时退出循环。相较:不相等则将记录不是回文的标记,同时退出循环。相等,则继续循环。最后返回记录回文的标记。在主函数中,等,则继续循环。最后返回记录回文的标记。在主函数中,通过函数的返回值判断是否为回文,并输出相应信息。通过函数的返回值判断是否为回文,并输出相应信息。8intfun(charstr)intn,k,flag=1;for(n=0;strn!=0;n+);/*计算字符串长度计算字符串长度*/for(k=0;kn/2;k+)if(strk!=strnk1)flag=0;break;returnflag;9voidmain()chars80;printf(nPleaseenterstri

8、ng:n);gets(s);if(fun(s)=1)printf(“%s是回文是回文n”,s);elseprintf(“%s不是回文不是回文n”,s);103)数数组组作作函函数数参参数数时时,不不是是单单向向的的“值值传传递递”,而而是是“地地址址传传递递”,也也就就是是把把实实参参数数组组的的起起始始地地址址传传递递给给形形参参数数组组,这这样样二二者者共共占占一一段段内内存存单单元元。因因此此,形形参参数数组组元元素素的的变变化化将将会会直直接接影影响响到到实实参参数数组中与其相对应的元素。组中与其相对应的元素。例例7-13阅读下列程序,给出输出结果。阅读下列程序,给出输出结果。main

9、()voidswap();intb2=10,2;swap(b);printf(“b0=%d,b1=%dn”,b0,b1);voidswap(inta)intt;t=a0;a0=a1;a1=t;11函数开始调用之前函数开始调用之前函函数数开开始始调调用用,实实参参数数组组b将将起起始始地地址址传传递给形参数组递给形参数组a,二者共占一段内存单元,二者共占一段内存单元swap函函数数执执行行过过程程中中,a0与与a1的值交换的值交换函数调用结束后函数调用结束后127.3函数的嵌套调用函数的嵌套调用7.3.1函数的嵌套调用函数的嵌套调用定义定义嵌套定义嵌套定义:在定义一个函数时,该函数体内包含另一个

10、函在定义一个函数时,该函数体内包含另一个函数的定义。数的定义。嵌套调用嵌套调用:在调用一个函数的过程中,又调用另一个函数。在调用一个函数的过程中,又调用另一个函数。C语言不能嵌套定义,但可以嵌套调用语言不能嵌套定义,但可以嵌套调用。在调用一个函在调用一个函数的过程中,又调用另一个函数。数的过程中,又调用另一个函数。下面给出一个两层嵌套调用的例子:下面给出一个两层嵌套调用的例子:1314例例7-15任何一个整数任何一个整数n的立方都可以表示成的立方都可以表示成n个相邻奇数个相邻奇数之和,其中最大奇数为之和,其中最大奇数为d=2m-1,而,而m=1+2+3+n。试。试编写程序,由键盘输入编写程序,

11、由键盘输入n,求,求n的立方是哪些奇数之和。的立方是哪些奇数之和。算法分析:算法分析:解决本例问题,可以定义两个函数,一个解决本例问题,可以定义两个函数,一个add用用于计算于计算1+2+3+n的累加和的累加和m,并将结果返回给调用函,并将结果返回给调用函数;另外一个数;另外一个maxodd通过调用前一函数通过调用前一函数add获得累加和获得累加和m,并完成,并完成d=2m-1的计算后将结果返回给调用函数。主函数的计算后将结果返回给调用函数。主函数通过调用后一函数通过调用后一函数maxodd获得最大奇数获得最大奇数d,并根据题目要,并根据题目要求显示满足条件的所有奇数。其算法流程如图求显示满足

12、条件的所有奇数。其算法流程如图7-4所示。所示。1516#includestdio.hadd(intn)inti,sum=0;for(i=0;i=n;i+)sum+=i;returnsum;maxodd(intn)intm,d;m=add(n);d=2*m1;returnd;main()inti,n,d;intflag=0;printf(Pleaseinputanumber:n);scanf(%d,&n);d=maxodd(n);for(i=0;in;i+)printf(%5d,d);d=2;flag+;if(flag=5)printf(n);flag=0;177.2.2函数的递归调用函数的递

13、归调用定义定义:在调用一个函数的过程中直接或间接地调用该函数在调用一个函数的过程中直接或间接地调用该函数本身。本身。直接调用直接调用intf(intx)inty,z;.z=f(y);return(2*z);图图7-5f函数函数调用调用f函数函数18intf1(x)intx;inty,z;.z=f2(y);return(2*z);intf2(t)intt;inta,c;.c=f1(a);return(3+c);间接调用间接调用19特点特点是无终止的递归调用,因此,是无终止的递归调用,因此,应该给定一个限制递归应该给定一个限制递归次数的条件。次数的条件。20例例7-16用递归方法计算用递归方法计算

14、n!longfact(intn)longk;if(n0)printf(Dataerror!n);exit(0);elseif(n=0|n=1)k=1;elsek=n*fact(n1);returnk;21main()intn;longf;printf(Pleaseinputanintegralnumber:n);scanf(%d,&n);f=fact(n);printf(%d!=%ldn,n,f);22递归函数递归函数fact的求解过程,以求的求解过程,以求9的阶乘为例:的阶乘为例:fac(9)=9*fac(8)fac(8)=8*fac(7)fac(2)=2*fac(1)fac(1)=1fac

15、(9)=9*fac(8)fac(8)=8*fac(7)fac(2)=2*1fac(3)=3*fac(2)fac(3)=3*2*1.下下推推回回代代23例例7-17用递归法将一个整数用递归法将一个整数n转换成字符串。例如输入转换成字符串。例如输入256,应输出,应输出“256”,n的位数不固定,可以是任意位数的整数。的位数不固定,可以是任意位数的整数。voidtranvers(intn)if(n/10!=0)tranvers(n/10);printf(%c,n%10+0);24main()intn;printf(Pleaseinputanintegralnumber:n);scanf(%d,&n);printf(Thestringis:);if(n0)printf();n=1*n;tranvers(n);程序运行情况:程序运行情况:Pleaseinputanintegralnumber:256Thestringis:2562526Thank you!27

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

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

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


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