版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
8函数1第1页一、C程序模块一个C程序可由一个main()函数和多个其它函数组成。8.1C程序模块2第2页
其它函数指是:
系统函数由系统提供,放在头文件中自编函数由程序设计人员编写3第3页二、函数调用如:mainfunafunbfuncfundfunxfunyP1374第4页
全部函数都含有两种特征:
返回值参数(返回值和参数都是可缺省)5第5页8.2库函数一、库函数介绍系统自带标标准库函数依据不一样功效作用放在不一样头文件中。6第6页如:stdio.h
用于标准输入/输出math.h
用于数学计算ctype.h
用于字符处理string.h
用于字串处理time.h
用于时间/日期处理dir.h
用于控制目录和路径graphics.h
用于图形操作dos.hbios.h
用于接口处理
7第7页二、库函数作用
使程序更含有“独立性”和“可移植”性。
使用时只需在程序开头加上一条语句:#include<.h>依据使用函数来确定
使程序含有“模块化”。8第8页例1:求两个浮点型数值x/y余数。(注意:不能写成3.6%1.7)#include<stdio.h>#include<math.h>main(){floatx,y,z;scanf("%f%f",&x,&y);z=fmod(x,y);printf("z=%f",z);}9第9页8.3自定义函数一、自定义函数作用
使程序含有“积木”功效。(模块化)
使程序含有“重构”功效。10第10页二、函数定义及调用定义[存放类型符][返回值类型符]函数名([形参表列])形参说明{说明部分语句}11第11页调用
变量名=函数名([实参表列]);(变量名类型必须与函数返回值类型相同)
函数名([实参表列]);12第12页三、函数申明普通情况下,函数被调用之前必须要有函数申明。(函数申明意义在于提供函数原型)函数申明格式:[返回值类型符]函数名(形参类型);13第13页例1:求二个数中最大值
intmax(x,y)intx,y;{intz;
z=x>y?x:y;return(z);}用return语句,返回函数值。或:intmax(intx,inty)
{intz;
z=x>y?x:y;return(z);}四、举例14第14页经过函数调用求二个数中最大值:#include<stdio.h>intmax(int,int);/*函数原型*/main(){inta,b,t;scanf("%d%d",&a,&b);t=max(a,b);/*函数调用*/printf("valueofmaximizeis:t=%d",t);}intmax(intx,inty)/*函数定义*/{intz;z=x>y?x:y;return(z);}15第15页#include<stdio.h>
floatadd();
/*函数说明*/
main()
{floata,b,c;
scanf("%f,%f",&a,&b);
c=add(a,b);
/*函数调用*/
printf("sum=%f";c);}floatadd(floatx,floaty);/*函数定义*/{floatz;z=x+y;returnz;}例2:求二实数之和若函数定义放在main()函数之前可省略函数说明。16第16页#include<stdio.h>
floatadd(floatx,floaty);/*函数定义*/
{floatz;
z=x+y;
returnz;
}
main()
{ floata,b,c;
scanf(“%f,%f”,&a,&b);
c=add(a,b);/*函数调用*/
printf("sum=%f";c);}例3:求二实数之和(将例2程序改写以下:)17第17页1.形参加实参调用时:实参值单向传递形参。函数被调用时,暂时分配单元给形参,调用完成,这些单元被释放。实参:
出现在调用函数中,形参:出现被调用函数中。五、自定义函数中几个主要特征18第18页
实参可为表示式,只传递表示式值。
实参、形参类型一致。
可在形参表列中对形参说明。注:19第19页2.函数返回或return变量值;经过return语句将流程返回主调函数。
return;函数无返回值
return表示式值;20第20页3.函数名要选择一个简练有意义名字作为函数名。从函数名能够反应出函数功效。P139例5.7,例5.821第21页8.4数组作为函数参数一、数组元素作为函数参数使用方法:把数组元素作为函数实参。因为数组元素性质与相同类型简单变量性质完全相同,所以,把数组元素作为函数参数也和简单变量一样。作用:传值。22第22页#include<stdio.h>#include<conio.h>main(){ floatb[3]; floatave; b[0]=21.3; b[1]=b[0]/3; b[2]=8.2; printf("b[0]=%4.1f\tb[1]=%4.1f\t
b[2]=%4.1f\n",b[0],b[1],b[2]); floatExpfun1(floata,floatb,floatc);/*函数说明*/ ave=Expfun1(b[0],b[1],b[2]);/*函数调用*/ printf("ave=%4.1f\n",ave); printf("b[0]=%4.1f\tb[1]=%4.1f\t
b[2]=%4.1f\n",b[0],b[1],b[2]);例2:将数组元素作为函数实参数23第23页 getch();}floatExpfun1(floata,floatb,floatc)/*函数定义*/{ floatsum,aver; sum=a+b+c; a=a+5.5; b=b+5.5; c=c+5.5; aver=sum/3.0; printf("a=%4.1f\tb=%4.1f\tc=%4.1f\n",a,b,c); return(aver);}24第24页b[0]=21.3b[1]=7.1b[2]=8.2/*调用前*/a=26.8b=12.6c=13.7ave=12.2b[0]=21.3b[1]=7.1b[2]=8.2/*调用后值未变*/程序运行结果:25第25页
1.数组名作用数组名代表是数组起始地址;也就是第1个元素地址。26第26页使用数组名作为函数参数时,形参和实参必须是同一类型数组名,系统采取地址传送方式进行数据传递,即实参首地址传递给形参首地址,实参加形参共享相同数据单元。使用方法:函数实参和形参都必须是数组名。作用:传址。2.把数组名作为函数参数规则(能够在函数中修改数组元素值。)27第27页#include<stdio.h>#include<conio.h>main(){ floatExpfun2(floata[4]);/*函数说明*/ floats[4]={88.5,90.5,70,71}; floatave; printf("s[0]=%4.1f\ts[1]=%4.1f\ts[2]=%4.1f\t
s[3]=%4.1f\n",s[0],s[1],s[2],s[3]); ave=Expfun2(s);/*函数调用*/ printf("ave=%4.1f\n",ave); printf("s[0]=%4.1f\ts[1]=%4.1f\ts[2]=%4.1f\t
s[3]=%4.1f\n",s[0],s[1],s[2],s[3]); getch();}例1:将数组名作为函数形参和实参28第28页floatExpfun2(floata[4])/*函数定义*/{ floatsum,aver; sum=a[0]+a[1]+a[2]+a[3]; aver=sum/3.0; a[0]=a[0]/10; a[1]=a[1]/10; a[2]=a[2]/10; a[3]=a[3]/10; printf("a[0]=%4.1f\ta[1]=%4.1f\ta[2]=%4.1f\t
a[3]=%4.1f\n",a[0],a[1],a[2],a[3]); return(aver);}29第29页s[0]=88.5s[1]=90.5s[2]=70.0s[3]=71.0
/*调用前*/a[0]=8.9a[1]=9.1a[2]=7.0a[3]=7.1
/*调用中*/ave=106.7s[0]=8.9s[1]=9.1s[2]=7.0s[3]=7.1
/*调用后值改变*/程序运行结果:30第30页显然,数组s元素值在调用前后生了改变,数组s和a共用一段内存单元:88.590.570.071.0
s[0]s[1]s[2]s[3]a[0]a[1]a[2]a[3]运行结果分析:P43例5.10,例5.11,例5.1231第31页三、多维数组名作为函数参数P148例5.1432第32页P151例5.16,例5.17,例5.188.5嵌套调用33第33页8.6递归调用一、递归特点一个问题能够成为递归必须具备条件是:后一部分与原始问题类似后一部分是原始问题简化34第34页1.直接递归调用:函数直接调用本身二、程序中递归方式2.间接递归调用:函数间接调用本身35第35页直接调用:intf(x)intx;{inty,z;
z=f(z);
}间接调用:intf1(x)intx;{inty,z;
z=f2(y);
}intf2(t)intt;{inta,b;
a=f1(b);
}以下表示了递归概念.36第36页显然:上述例子会无限递归(无限执行)。所以,在递归调用时都必须有条件限制。n!=1(n=0,1)n
(n–1)!(n>1)当条件成立,调用递归,不然结束。例1:求n!1.从数学上定义37第37页#include<stdio.h>
longfac(intn)/*函数定义,计算n!*/
{longf;
if(n<0)
printf("inputerror!\n");
else
if(n==0¦¦n==1)
f=1;
elsef=n
fac(n–1);
return(f);
}2.程序:38第38页main(){intn;longy;printf("inputainteger!")scanf("%d",&n);y=fac(n);/*函数调用,计算n!*/
printf("%d!=%15ld",n,y);}39第39页3.执行过程:设:
输入5(n=5)第1次调用:y=fac(5)——返回:y=5fac(4)第2次调用:y=5*4fac(3)第3次调用:y=5*4*3fac(2)第4次调用:y=5*4*3*2fac(1)第5次调用:y=5*4*3*2*1*fac(0)P17340第40页8.7标识符作用域
标识符能够含有四种作用域。函数作用域文件作用域块作用域函数原型作用域(作用域:有效范围)
可依据标识符作用域区分局部变量和全局变量。41第41页一、局部变量凡在函数(含main函数)内部定义变量称为局部变量。局部性:局部变量仅在函数内部有效。42第42页2.形参为局部变量。3.在复合语句中可定义仅在复合语句中有效暂时变量。1.不一样函数可有同名同类型变量,它们占不一样内存单元,互不影响。P159例5.21,例5.2243第43页二、全局变量一个源文件中,在全部函数之外定义变量为全局变量。有效性:自定义位置开始至文件结尾全部有效。44第44页例:intp=1,q=5;floatf1(a)inta;{intb,c;
}
charc1,c2;p,q作用范围c1,c2作用范围charf2(x,y)intx,y;{inti,j;
}
main(){
}45第45页1.全局变量所作用到函数,相当于这些函数公共变量。当一个函数对其值进行改变后,另一个函数使用该变量值亦对应改变。好处:函数之间值传递。2.不要随意使用全局变量。一是一直占据内存单元;二是因为函数依赖于外部定义变量,降低了通用性。注意46第46页3.不在作用域内函数。若使用全局(外部)变量,需在函数体内加上extern保留字。4.全局和局部变量同名时,局部变量有效。47第47页floatf1(x)intx;{externinta,b;
}inta=0;b=–1main(){
}a,b作用域例:P162例5.24例8.1548第48页8.8变量存放类型一、标识符属性一个标识符属性除了前面已讲过基本属性外,还含有一些其它属性:
存放类别
存放期49第49页二、存放类别1.存放类型和存放期自动型(auto)存放器型(register)外部型(extern)静态型(static)自动存放期静态存放期50第50页2.存放期性质自动存放:只有变量才含有自动存放期如函数中变量说明:[auto]floatx,y;[auto]intm,n;作用:进入到函数块中,该变量存在,退出函数块后该变量消失。程序中大部分变量都含有自动存放期。51第51页静态存放:可用于变量和函数如:staticint;作用:从程序开始执行起就一直存在,一直占据内存单元,直到程序结束运行。52第52页
对静态存放变量,若定义时赋初值,则程序运行中仅在第一次调用时赋初值,下一次调用不再赋初值,而是使用上一次调用值。尤其提醒:
对静态存放变量,若定义时不赋初值,则系统置初值0,而动态变量不赋初值则值不确定。53第53页#include<stdio.h>
int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混凝土承包合同
- 森林防火安全隐患排查整改报告(30篇)
- 《发票管理办法》课件
- 联合生产合同范本模板
- 房子维修协议书
- 合同实质性内容具体理解
- 四年级下册第22的教育课件
- 写生闹钟美术课件
- 高一第一学期期末考试英语试卷含答案(共5套-文本版)
- 《脑血管病康复治疗》课件
- 信息安全意识培训课件
- Python试题库(附参考答案)
- 政协提案关于加强企业诚信建设的建议
- SPC&CPK 超全EXCEL模板
- 化工设计说明书
- 部编本语文八年级上全册文言文课下注释
- 德力西系列变频器说明书
- UleadGifAnimator教程
- 烟草专卖(公司)内部专卖管理监督工作制度
- CFG桩施工中常见问题及处理措施
- 医疗废物处置流程图
评论
0/150
提交评论