欢迎来到天天文库
浏览记录
ID:5310719
大小:312.00 KB
页数:41页
时间:2017-11-23
《c语言(第7章函数)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言程序设计信息与计算机学院Email:yixuan0820@163.com第7章函数本章主要内容:函数的定义函数的调用函数的参数和函数返回值递归函数变量的作用域和存储类别7.1函数的定义C函数的概念函数:一段可以重复调用的、功能相对独立完整的程序段。1)库函数:由C语言系统提供,用户无须定义,可直接使用。2)用户自定义函数:由用户按需要编写的函数函数的定义函数定义的一般形式为:类型标识符函数名(类型形式参数,类型形式参数,…){声明部分执行部分}说明:类型标识符用来定义函数类型,即指定函数返回值的
2、类型。函数类型应根据具体函数的功能确定。默认类型标识符为int类型。函数值通过return语句返回。函数执行时一旦遇到return语句,则结束当前函数的执行,返回到主调函数的调用点。如果函数执行后没有返回值,则函数类型标识符用“void”,称为“空类型”或“无类型”。函数名必须符合标识符的命名规则。在函数定义时,函数体中不能再出现与函数名同名的其他对象名(如变量名、数组名等)。函数首部括号内的参数称为形式参数(简称形参),形参的值来自函数调用时所提供的参数(称为实参)值。形参也称形参变量。【例7.4】
3、求一个数的立方。#includelongcub(intx)/*函数定义*/{longy;/*函数体中的声明部分*/y=x*x*x;/*函数体中的执行部分*/returny;}voidmain(){intnum;longcub_num;printf("请输入一个整数:");scanf("%d",&num);cub_num=cub(num);/*函数调用*/printf("%d的立方值是%1d",num,cub_num);}函数调用的过程:①创建形参变量,为每个形参变量建立相应的存储
4、空间。②值传递,即将实参的值复制到对应的形参变量中。③执行函数体,执行函数体中的语句。④返回(带回函数值、返回调用点、撤消形参变量)。实参形参7.2函数参数和返回值形式参数和实际参数形参:在定义函数时函数名后面括号中变量名称为形式参数,简称形参。实参:在主调函数中调用一个函数时,函数名后面括号中的参数称为实际参数,简称实参。实参形参(1)传递数值(值传递方式)(2)传递地址(地址传递方式)函数关于参数的几点说明:⑷实参可以是常量、变量或表达式,并且必须有确定的值;⑶对每个形参必须指明其名字和数据类型;
5、⑸实参个数、类型必须与对应的形参一致;⑵形参是函数的内部变量,只在函数内部才有意义;⑹实参对形参的数据传递是值传递,即单向传递,只由实参传递给形参,反之不可。调用结束后,只有形参单元被释放,实参单元中原来的值不变。⑴形参调用前不占内存单元,调用时占用,调用后释放;1、用函数调用完成求一个数组{12,3,2,4,5,8,9,12,2,40}中的最小(大、平均值、总和)元素值要求:通过函数调用实现(计算方法在子函数中,通过主函数调用实现)2、求一个数的平方(立方);3、求两个数的平方和(平方差);4、用
6、函数调用完成求一个3×3数组主对角线上所有元素的最大值。(注:主对角线是左上角到右下角的对角线)【例7.5】分析以下程序的运行结果。(值传递方式)#includevoidswap(floatx,floaty)/*定义交换变量x,y值的函数*/{floattemp;temp=x;x=y;y=temp;printf("x=%.2fy=%.2f",x,y);}voidmain(){floatx=8.5,y=3.7;swap(x,y);/*调用swap函数*/printf("x=%.2f
7、y=%.2f",x,y);}结论:由于形参与实参各自占用不同的存储空间,因此,在函数体执行中,对形参变量的任何改变都不会改变实参的值。地址传递方式:函数调用时,将实参数据的存储地址作为参数传递给形参。其特点是:形参与实参占用同样的内存单元,函数中对形参值的改变也会改变实参的值。因此函数参数的地址传递方式可实现调用函数与被调函数之间的双向数据传递。比较典型的地址传递方式就是用数组名作为函数的参数,在用数组名作函数参数时,不是进行值的传送,因为实际上形参数组并不存在,编译系统不为形参数组分配内存。实际
8、上是形参数组和实参数组为同一数组,共同拥有同一段内存空间。【例7.6】一个一维数组score内放10个学生成绩,用一个函数求平均成绩。(地址传递方式)#includefloataverage(floatarray[10]){inti;floataver,sum=array[0];for(i=1;i<10;i++)sum=sum+array[i];aver=sum/10;return(aver);voidmain(){floatscore
此文档下载收益归作者所有