1、第5章 函数,2,内容提要,函数定义、函数调用、函数原型、函数返回值 难点:函数的参数传递与返回值,3,函数定义(definition),一般形式:返回值类型 函数名(类型 参数1,类型 参数2, ) 函数体 return 表达式; 如果没有参数,则应该用void注明 返回值类型与return语句配合 如果不需要返回值,则应该用void定义返回值类型,同时return语句之后不再需要任何表达式 当函数执行到return语句时,就中止函数的执行,返回到调用它的地方.教材164页,4,例5.1a 计算两个整数的平均数教材165页,/*函数功能: 计算平均数函数入口参数: 整型x,存储第一个运算数整
2、型y,存储第二个运算数函数返回值: 平均数*/ int Average(int x, int y) int result;result = (x + y) / 2;return result; ,5,函数调用,函数调用 一般格式:函数名(实参表列) 单向值传递 调用函数时,必须提供所有的参数 提供的参数个数、类型、顺序应与定义时相同,6,函数调用,有返回值时 放到一个数值表达式中,如c = max(a,b); 作为另一个函数调用的参数,如c = max(max(a,b),c);printf(“%dn“, max(a,b); 无返回值时 函数调用表达式,如display(a,b);,7,例5.1
3、b 使用了Average函数的main(),main() int a = 12;int b = 24;int ave;ave = Average(a, b);printf(“Average of %d and %d is %d.n“,a, b, ave); 教材165-167页,8,函数的参数和函数的值,形式参数(形参) 在定义函数时函数名后面括弧中的变量名 必须指定形参的类型 实际参数(实参) 在主调函数中调用一个函数时,被调函数的函数名后面括弧中的参数(可以是一个表达式)实参可以是常量、变量或表达式,9,课堂练习,自编程序:从键盘输入两个数,求出其最大值,要求使用函数完成求最大值,并在主函
4、数中调用该函数.,10,函数间的参数传递,形参和实参在内存中占用不同的内存单元 当主调函数调用被调函数时发生数据的传递, 只由实参传递给形参,且传递的是参数的值,即单向传递 实参类型必须与形参相符 在函数被调用时才分配形参的存储单元。,11,函数间的参数传递图示,main() int a = 12;int b = 24;int ave;ave = Average(a, b);printf(“Average of %d and %d is %d.n“, a, b, ave); 教材165-167页,12,函数的定义与使用小结,函数定义:被调函数必须是存在的函数(库函数或自定义函数) 函数声明:(
5、也称函数原型) 在主调函数中,对被调函数进行声明 格式: 返回值类型标识符 被调用函数名 (含类型说明的形参表) 函数调用 一般格式:函数名(实参表列) 教材167页,13,例5.1,#include /*函数功能: 计算平均数函数入口参数: 整型x,存储第一个运算数整型y,存储第二个运算数函数返回值: 平均数*/ int Average(int x, int y) int result;result = (x + y) / 2;return result; main() int a = 12;int b = 24;int ave = Average(a, b); printf(“Averag
6、e of %d and %d is %d.n“, a, b, ave); 教材167页,哪些是形参? 哪些是实参?,那个语句返回值? 返回谁的值? 返回给谁?,14,例5.1,#include int Average(int x, int y); /*声明Average()函数*/ main() int a = 12;int b = 24;int ave = Average(a, b); printf(“Average of %d and %d is %d.n“, a, b, ave); /*函数功能: 计算平均数函数入口参数: 整型x,存储第一个运算数整型y,存储第二个运算数函数返回值: 平均数*/ int Average(int x, int y) int result;result = (x + y) / 2;return result; 教材168页,函数定义? 函数原型? 调用?,15,课堂练习,3. 自编程序:编程计算p=k!/(m)!的值,提示,用函数完成求整数的阶乘且输入的数值在15以内。如果改成编程计算p=k!/(m-k)!的值,如何写程序?4(选作)自编程序:用户自定义一个函数fun(),功能是判断一个整数是否为素数并在主函数中调该函数求1000以内的素数平均值。,16,作业,习题5.1,5.2,