已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章函数,5.1函数的定义与调用,一个源程序文件由一个或多个函数组成。C程序执行从main()开始,在main()中结束;所有C函数都是平行(独立)的,不能嵌套定义;函数分类:从用户角度:标准函数和用户自定义函数;从函数形式:无参函数和有参函数;,函数定义的一般形式:函数类型函数名(类型形式参数1,类型形式参数2,)函数内部变量说明函数执行语句,函数头,函数体,例:设计函数,求1+n的和,intsum(intn)inti,s=0;for(i=1;i=n;i+)s=s+i;returns;,5.2函数的调用,5.2.1函数调用的格式:函数名(实际参数表)说明:实参间用逗号隔开;实参与形参必须一一对应;,例5-1:调用函数计算1=2+100,intsum()inti,t=0;for(i=1;i=100;i+)t=t+i;return(t);#includestdio.hmain()intsum();ints;s=sum();printf(%dn,s);,5.2.2函数调用方式函数语句:printf(“%d,%d”,a,b);函数表达式:c=2*max(a,b)函数参数:m=max(max(a,b),c);,例5-2读程序,doublefun(intn)/*fun函数的定义*/inti;doubles=1;for(i=1;i=n;i+)s=s*i;returns;#includestdio.hmain()/*main函数的定义*/inti,n;doublesum=0;printf(ninputn:);scanf(%d,5.2.3函数的参数和返回值,形式参数:定义函数时,函数名后面括号中变量名;实际参数:调用函数时,函数名后面括号中变量名;2.调用函数时:给形参分配存储单元;将实参的值传递给形参;执行函数体;返回函数值,释放形参占用存储单元。3.说明:形参只有在函数调用时才分配存储单元,调用结束释放;实参可以是常量、变量、表达式;实参与形参类型应一致;C规定,实参与形参间为“值传递”,即单向传递。,例5-3“值传递”举例,voidswap(intx,inty)intt;t=x;x=y;y=t;printf(“x=%d,y=%dn”,x,y);main()inta,b;a=5;b=8;swap(a,b);printf(“a=%d,b=%d”,a,b);,调用前,调用开始时,调用结束后,函数的返回值类型类型标识符,函数返回值指通过函数调用得到的一个确定的值;函数返回值通过return语句得到。形式为:return(表达式);或return表达式;一个函数可以有一个以上的return语句。函数返回值的类型为定义函数时说明的类型;C规定:凡定义函数时不说明类型的,一律按整型处理;函数值类型与return中表达式类型不一致时,以函数值类型为准;函数若无return语句,不是不带回值,而是带回不确定的值;可用“void”定义“无类型”,可保证不使函数带回任何值。,例5-4求一个整数的绝对值,intfun(intx)if(xy?x:y;main()printf(%dn,max(2,3.5);,程序运行结果:3,5.2.4被调函数需具备的条件函数的声明,被调函数函数必须存在(自定义或库函数);若被调函数是库函数,须在文件头加#include“”;若被调函数为自定义函数,且与主调函数在同一文件中,一般应在主调函数中对被调函数作声明,形式为:类型名被调函数名(类型1参数1,类型2参数2,)或类型名被调函数名(类型1,类型2,),函数原型,C规定,以下几种情况可不作被调函数声明:被调函数的定义出现在主调函数之前;已经在所有函数定义之前作了函数声明;,5.2.5函数的嵌套调用,所谓嵌套调用,就是在调用一个函数的过程中,又调用另一个函数。即:函数A中调用函数B,函数B中又调用函数C。例如:,若有以下程序intf(intx,inty)return(y-x)*x;voidmain()inta=3,b=4,c=5,d;d=f(f(3,4),f(3,5);printf(“%:d);执行后输出结果是_,有以下程序charfun(charx,chary)if(xy)returnx;returny;voidmain()inta=9,b=8,c=7;printf(“%c”fun(fun(a,b),fun(b,c);程序的执行结果是-,练习:,有以下程序voidf(intx,inty)intt;if(xB-A年龄问题:age(n)=age(n-1)+2(n1)age(n)=10(n=1)递归函数:,intage(intn)intc;if(n=1)c=10;elsec=age(n-1)+2;return(c);,递归调用过程:回推递推递归函数的条件:递推公式age(n)=age(n-1)+2(n1)结束条件age(n)=10(n=1),例:求n!,n!=1(n=0或1)n!=n*(n-1)!(n1),longfactl(longm)if(m1)return(1);elsereturn(m*factl(m1);,/*文件名:exam7_22.cpp*/#includeintfun(inti)if(i=1)returni;elsereturni*fun(i-1);voidmain()printf(%dn,fun(4);,/*文件名:exam7_23.cpp*/#includeintgcd(intx,inty)if(yx)returngcd(y,x);elsereturngcd(y,x%y);voidmain()inta,b;printf(输入两个正整数:);scanf(%d,%d,,5.3变量的作用域存储类别,变量分类:从变量作用域分:全局变量和局部变量;从变量生存期分:静态存储变量和动态存储变量;变量存储方式:静态存储方式:指在程序运行期间分配固定存储空间的方式;动态存储方式:指在程序运行期间根据需要进行动态分配存储空间的方式;,Auto变量,格式:auto类型变量名;该变量在动态存储区动态的分配空间;局部变量和函数形式参数都属auto变量;“auto”可以省略。如在函数内部定义的:autointa,b;等价于:inta,b;这样变量的值在函数调用结束后自动释放。如果希望变量的值在函数调用结束后仍保留,可通过指定该局部变量为“局部静态变量”实现。,Static局部静态变量,格式:static类型变量名;说明:局部静态变量在静态存储区内分配存储单元,在整个程序运行期间都不释放;局部静态变量赋初值在编译时只进行一次(例8-17);静态变量不赋初值自动赋0;局部静态变量在调用函数结束后仍然存在,但其他函数不能引用它(P175例8-18);静态存储缺点:占用存储空间;降低程序可读性。,宏定义,不带参数的宏定义用一个指定的标识符代表一个字符串。形式:#define标识符字符串如:#definePI3.14159,5.4编译预处理,说明:宏定义是用宏名代替一个字符串,即只作简单置换,不作语法检查;宏定义不是语句,不用分号;#define在函数外面,有效范围为定义开始到源文件结束;可用#undef中止宏定义的作用域;进行宏定义时,可引用已定义的宏名;程序中双引号内的字符,即使与宏名相同也不置换。可用#undef中止宏定义的作用域;进行宏定义时,可引用已定义的宏名;程序中双引号内的字符,即使与宏名相同也不置换。,带参数的宏定义形式:#define宏名(参数表)字符串功能:不仅进行字符串替换,还要进行参数替换;如:#defineS(r)PI*r*r,说明:带参宏展开只是将宏后括号内实参字符串代替形参;宏定义时,宏名与参数的括号间不应加空格;带参宏与函数区别:函数调用是先求实参值再代入形参,带参宏定义只是简单字符替换;函数调用在运行时进行,宏展开在编译时进行;函数参数有类型,而带
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生军训心得体会13篇
- 房地产工作总结报告
- 合同协议书锦集六篇
- 爱与责任演讲稿
- 大班教案8篇合集
- 安全生产法修订稿培训心得
- 2024年在线教育平台搭建合同2篇
- 《课件食品安全》课件
- 《大学生创业准备》课件
- 《督查工作讲》课件
- 企业EHS风险管理基础智慧树知到答案章节测试2023年华东理工大学
- 中国2型糖尿病防治指南(2020年版)
- 关于友情的英语ppt
- 2023全国日语高考答题卡word版
- 初中数学浙教版七年级上册第3章实数3.4实数的运算 全国一等奖
- GB/T 8488-2001耐酸砖
- GB/T 4213-2008气动调节阀
- GB/T 23703.2-2010知识管理第2部分:术语
- GB/T 17587.3-2017滚珠丝杠副第3部分:验收条件和验收检验
- 通力电梯技能培训教材系列:《KCE控制系统课程》
- 小学生安全教育完整课件
评论
0/150
提交评论