数据结构函数课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构函数课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 函数 课件
- 资源描述:
-
1、第七章 函数第七章 函数概述函数的定义函数的返回值函数的调用、函数的嵌套与递归调用函数参数及其传递方式变量的存储属性数组作为函数参数第七章 函数7.1 概述模块化程序设计n基本思想:将一个大的程序按功能分割成一些小模块,n特点:各模块相对独立、功能单一、结构清晰、接口简单控制了程序设计的复杂性提高元件的可靠性缩短开发周期避免程序开发的重复劳动易于维护和功能扩充n开发方法:自上向下,逐步分解,分而治之第七章 函数n从用户角度标准函数(库函数):由系统提供用户自定义函数n从函数形式无参函数有参函数使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、
2、需要使用的包含文件函数分类第七章 函数一般格式合法标识符函数返回值类型缺省int型无返回值void函数体函数类型 函数名(形参类型说明表)说明部分语句部分现代风格:例 有参函数(现代风格)int max(int x,int y)int z;z=xy?x:y;return(z);例 有参函数(现代风格)int max(int x,y)int z;z=xy?x:y;return(z);例 空函数 dummy()函数体为空例 无参函数 printstar()printf(“*n”);或 printstar(void)printf(“*n”);7.2 函数的定义第七章 函数函数类型 函数名(形参表)形
3、参类型说明说明部分语句部分传统风格:例 有参函数(传统风格)int max(x,y)int x,y;int z;z=xy?x:y;return(z);函数传统风格和例子第七章 函数返回语句n形式:return(表达式);或 return 表达式;或 return;n功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数n说明:函数中可有多个return语句若无return语句,遇时,自动返回调用函数若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函数调用转换void型函数例 无返回值函数 void swap(int x,int y)int temp;te
4、mp=x;x=y;y=temp;7.3 函数的返回值第七章 函数调用形式 函数名(实参表);说明:实参与形参个数相等,类型一致,按顺序一一对应实参表求值顺序,因系统而定(Turbo C 自右向左)6.4 函数的调用第七章 函数n函数语句:例 printstar();printf(“Hello,World!n”);n函数表达式:例 m=max(a,b)*2;n函数参数:例 printf(“%d”,max(a,b);m=max(a,max(b,c);函数的调用方式第七章 函数n对被调用函数要求:必须是已存在的函数库函数:#include 用户自定义函数:函数类型说明n函数说明一般形式:函数类型 函
5、数名(形参类型 形参名,.);或 函数类型 函数名();作用:告诉编译系统函数类型、参数个数及类型,以便检验函数定义与函数说明不同函数说明位置:程序的数据说明部分(函数内或外)下列情况下,可不作函数说明 若函数返值是char或int型,系统自动按int型处理 被调用函数定义出现在主调函数之前有些系统(如Borland C+)要求函数说明指出函数返值类型和形参类型,并且对void 和 int 型函数也要进行函数说明函数说明第七章 函数6.4.1 函数的嵌套调用嵌套调用C规定:函数定义不可嵌套,但可以嵌套调用函数main()调用函数a结束a函数b函数调用函数b第七章 函数例1 求三个数中最大数和最
6、小数的差值思考:max函数int max(int x,int y,int z)功能:求三个数中的最大值min函数int max(int x,int y,int)功能:求三个数中的最小值dif函数功能:求差值方式:max(a,b,c)-min(a,b,c)(即分别调用max函数和min函数,求其差值)第七章 函数程序设计:int max(int x,int y,int z)int r;r=xy?x:y;return(rz?r:z);int min(int x,int y,int z)int r;r=xy?x:y;return(rz?r:z);int dif(int x,int y,int z)r
7、eturn max(x,y,z)-min(x,y,z);main()int a,b,c,d;scanf(%d%d%d,&a,&b,&c);d=dif(a,b,c);printf(Max-Min=%dn,d);第七章 函数求立方函数long cn(int n)功能:求n的立方值注意:由于立方值比较大,定义为long类型n*n*n=sq(n)*n例2:给定一个数,求其平方及立方思路:求平方函数long sq(int n)功能:求n的平方值注意:由于平方值比较大,定义为long类型第七章 函数程序设计:#include long sq(int n)long k;k=n*n;return k;long
8、 cn(int n)long k;k=sq(n)*n;return k;main()int n;scanf(“%d”,&n);printf(“sq(%d)=%ld,cn(%d)=%ldn”,n,sq(n),n,cn(n);第七章 函数例3:求1k+2k+3k+nk思路:求和函数long f2(int n,int k)功能:求1k+2k+3k+nk注意:由于结果可能比较大,定义为long类型1k+2k+3k+nk =for(i=1;i=n;i+)sum+=f1(i,k);求ik函数long f1(int i,int k)功能:求i的k次方(ik)注意:由于结果可能比较大,定义为long类型第七章
9、 函数程序设计:#include long f1(int i,int k)long mul=1;int j;for(j=1;j=k;j+)mul*=i;return mul;long f2(int n,int k)long sum=0;int j;for(j=1;j=n;j+)sum+=f1(j,k);return sum;void main()int n,k;scanf(%d,%d,&n,&k);printf(sum=%ldn,f2(n,k);第七章 函数例4:求20以内全部素数的积与全部素数的和的商思路:int isprime(int n)功能:判断n是否为素数若是返回1,不是返回0求素数
10、和long sum(int n)功能:求n以内素数的和for(i=2;i=n;i+)if(isprime(i)s+=i;求素数积long mul(int n)功能:求n以内素数的积for(i=2;i=n;i+)if(isprime(i)m*=i;float div(int n)功能:求n以内素数的积与n以内素数的和的商d=mul(n)*1.0/sum(n);第七章 函数程序设计:程序设计:#include int isprime(int n)int k;for(k=2;kn;k+)if(n%k=0)return 0;return 1;long sum(int n)long s=0;int k;
11、for(k=2;k=n;k+)if(isprime(k)s+=k;return s;long mul(int n)long m=1;int k;for(k=2;k=n;k+)if(isprime(k)m*=k;return m;float div(int n)float d;d=mul(n)*1.0/sum(n);return d;void main()printf(%.2f,div(20);第七章 函数思考题一:思考题一:编写一程序计算任一输入的整数的各位数之和编写一程序计算任一输入的整数的各位数之和第七章 函数课后练习:课后练习:编写一个函数,编写一个函数,输入输入n为偶数时,调用函数求为
12、偶数时,调用函数求1/2+1/4+.+1/n,输入输入n为奇数时,调用函数为奇数时,调用函数1/1+1/3+.+1/n第七章 函数6.4.2 函数的递归调用递归调用函数直接或间接的调用自身叫函数的递归调用int f(int x)int y,z;z=f(y);.return(2*z);直接调用int f1(int x)int y,z;z=f2(y);.return(2*z);间接调用int f2(int t)int a,c;c=f1(a);.return(3+c);第七章 函数n例 求n的阶乘)1()!1()1,0(1!nnnnn#include int fac(int n)int f;if(n
13、0)printf(n0,data error!);else if(n=0|n=1)f=1;else f=fac(n-1)*n;return(f);main()int n,y;printf(Input a integer number:);scanf(%d,&n);y=fac(n);printf(%d!=%15d,n,y);第七章 函数例题:hanoi塔问题void move(char x,char y)printf(“%c%cn”,x,y);void hanoi(int n,char one,char two,char three)if(n=1)move(one,three);else han
14、oi(n-1,one,three,two)move(one,three);hanoi(n-1,two,one,three);main()int m;scanf(“%d”,&m);printf(“The step to moving%3d disces:n”,m);hanoi(m,A,BC);第七章 函数课后思考:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?int age(n)int n;int c;if(n=1)c=10;else
15、c=age(n-1)+2;return(c);main()printf(%d,age(5);第七章 函数思考题:题目:利用递归调用方式,将所输入的5个字符,以相反顺序打印出来。#include stdio.hmain()int i=5;void palin(int n);palin(i);printf(n);void palin(int n)char next;if(ny?x:y;return(z);例 比较两个数并输出大者main()int a,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(Max is%d,c);max(int x,int y)int z
16、;z=xy?x:y;return(z);形参实参6.5 函数参数及其传递方式第七章 函数说明:实参必须有确定的值形参必须指定类型形参与实参类型一致,个数相同若形参与实参类型不一致,自动按形参类型转换函数调用转换形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式6.5 函数参数及其传递方式第七章 函数n值传递方式方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元 单向传递参数传递方式第
17、七章 函数711x:y:调用前:调用结束:711x:y:/*ch7_2.c*/#include main()int x=7,y=11;printf(x=%d,ty=%dn,x,y);printf(swapped:n);swap(x,y);printf(x=%d,ty=%dn,x,y);swap(int a,int b)int temp;temp=a;a=b;b=temp;调用:711a:b:711x:y:swap:711x:y:117a:b:temp例 交换两个数第七章 函数方式:函数调用时,将数据的存储地址作为参数传递给形参特点:形参与实参占用同样的存储单元“双向”传递 实参和形参必须是地址
展开阅读全文