第5章函数.ppt
《第5章函数.ppt》由会员分享,可在线阅读,更多相关《第5章函数.ppt(38页珍藏版)》请在三一文库上搜索。
1、1,第5章 函数,输入2个正整数m和n,计算 m!n!,#include void main( ) int I,m,n; double fm,fn; scanf(“%d%d“, ,f=1; for(i=1;i=k;i=i+1) f=f*i;,求m!、n! 同做一过程,用函数做 当k=m; m!=fact(m) 当k=n; n!=fact(n),m!,n!,2,5.1.1 程序解析,#include double fact(int n); /*函数声明*/ void main( ) int m,n;scanf(“%d%d“, /* 把结果回送主函数 */ ,C程序由一个主函数或一个主函数与若干其
2、它函数构成,主函数,其它函数,计算m!+n!,用函数求解,3,5.1.2 函数定义,函数:完成一个特定工作的独立程序模块,函数分为:库函数,由C语言系统提供。如:scanf()、printf() 自定义函数,用户自己编写。如:求阶乘函数fact(),格式 型标识符 函数名(形式参数表) 说明语句 执行语句 return 表达式; ,其中 函数名自定义,按标识符规定命名 形式参数表定义该函数计算依赖的参数和参数类型 类型标识符 int、float、double 、char函数返回值的类型 说明语句用于说明语句里用到各数据变量的类型 执行部分各种计算语句 return 表达式;计算函数返回值,返回
3、函数值的函数定义,函数首部,函数体,1. 函数定义格式,4,double fact(int n) int i; double result=1; for (i=1;i=n;i+) result=result*i; return result; ,函数首部,函数体,函数名,形式参数表,函数类型,说明语句,执行语句,函数返回值,例 编写求n!的函数,5,不返回函数值的函数定义,格式 void 函数名(形式参数表) 说明语句 执行语句 return; /* 可省略 */ ,例5-2 输出数字金字塔,void pyramid(int n) int i,j; for(i=1;i=n;i+) for(j=
4、1;j=n-i;j+) printf(“ “); for(j=1;j=i;j+) printf(“%d “,i); putchar(n); ,函数返回类型,函数首部,函数体,其中 void空类型,表示函数无返回值,#include void main( ) void pyramid(int n); pyramid(5); ,6,类型标识符缺省,函数返回值为整型,#include main( ) printf(“%dn“, fact(5); fact(int n) int i,result=1; for (i=1;i=n;i+) result=result*i; return result; ,
5、注:源程序文件 .c方式适合。 源程序文件 .cpp方式不适合。,格式 函数名(形式参数表) 说明语句 执行语句 return 表达式; ,7,主函数的几种不同表示 void main() ,int main() return 0; ,main() ,8,2. 函数参数表,定义函数的自变量,函数计算的已知数据,例 编写求n!的函数。,已知 n 计算函数n! double fact(int n),n是函数的参数,称形式参数或简称形参,方式1 类型标识符 函数名(形式参数表) 函数体 ,形式参数表格式:,类型1 参数1 ,类型2 参数2,类型n 参数n,函数参数表定义方式,方式2 类型标识符 函数
6、名(形式参数名表) 形式参数类型说明 函数体 ,形式参数名表:参数1,参数2, 参数n 形式参数类型说明:类型1 参数1,参数2, 参数n;类型2 ;,9,例 对浮点数x和整数n,编写求xn 的函数。,double expon(float x,int n) double y;int i; y=1; for(i=0;in;i+) y=y*x; return y; ,double expon(x,n) float x;int n; double y;int i; y=1; for(i=0;in;i+) y=y*x; return y; ,形式参数表,形式参数名表,形参类型说明,注:源程序文件 .c
7、两种形参定义方式均可。 源程序文件 .cpp只适合第一种方式。 两种定义方式书写不要混淆。,如第一种方式定义: int x,int y,float z 不能写成 int x,y,float z,10,3. 函数返回值,函数返回值需要使用return语句实现,函数返回值 通常函数经过计算得到一个函数值 如 fact(3) 得到 6 6是函数返回值,格式 return(表达式); 或 return 表达式; 操作 一执行return,先计算表达式,然后中断函数返回函数调用处 表达式值作为函数返回值,double fact(int n) int i; double result=1; for (i=
8、1;i=n;i+) result=result*i; return result; /* 把结果回送主函数 */ ,11,注在函数体内return语句个数不限,return只能返回一个数值, 如 return x,y; 只能返回y,例5-3 定义函数even(n),当n为偶数时返回1,否则返回0,int even(int n) if(n%2=0) return 1; else return 0; ,当return(表达式)中表达式的值与函数类型不一致,强行转换成函数类型,int fact(int n) int i; double result=1; for (i=1;i=n;i+) resul
9、t=result*i; return result; ,当函数体内无return语句,函数体执 行完毕返回随机值(void函数除外),12,5.1.3 函数的调用,函数调用:使用函数,1. 函数调用的方法,函数语句 格式 函数名(实参表列);,例5-2 #include void main( ) void pyramid(int n); pyramid(5); void pyramid(int n) int i,j; for(i=1;i=n;i+) for(j=1;j=n-i;j+) printf(“ “); for(j=1;j=i;j+) printf(“%d “,i); putchar(n
10、); ,一般用于函数无返回值,13,作为表达式中的一个元素 格式 函数名(实参表列),例 计算12!,double fact(int n) int i;double result=1; for (i=1;i=n;i+) result=result*i; return result; ,void main() int i, n; double s; scanf(“%d“, ,14,2. 函数参数的传递,参数传递:形参与实参结合 形式参数指函数定义时形式参数表中的参数 实际参数指调用函数时在参数表位置上出现的参数,例 void main() int a;double t; scanf(“%lf,%
11、d“, ,虚实结合 形参与实参的个数、位置、类型一致,double expon(float x,int n) double y;int i; y=1; for(i=0;in;i+) y=y*x; return y; ,个数 形参的个数与实参的个数相同 位置 形参实参依次按排列位置相结合 类型 数据类型和参数形式相对应,形参,实参,15,形参 实参 整型 整型 实型 实型 字符 字符,类型 一致 数据类型相对应,但字符与整型互通,参数形式 形参 实参 变量 常量、变量、表达式 数组 数组、指针 指针 指针、数组,如 double expon(float x,int n) expon(3.5,a+
12、3),上面讲的形参与实参结合是语法要求,其数据是怎么结合的?,16,当形参是变量,虚实结合是单向值传递,即实参赋值于形参 如函数定义 double expon(float x,int n) 函数调用expon(t,a) 则 t=x a=n 计算expon(x,n)后 t,a值不变,例 编写交换两个变量值的函数swap(),void swap(int x,int y) int t; t=x;x=y;y=t; ,void main() int a=1,b=2; swap(a,b); printf(“a=%d,b=%dn“, ,运行结果: a=1,b=2 不能交换,形参、实参可用指针实现双向值传递,
13、void swap(int *x,int *y) int t; t=*x;*x=*y;*y=t; ,void main() int a=1,b=2; swap( ,运行结果: a=2,b=1 交换,17,3. 函数执行过程,(1)分配函数的内存单元 (2)虚实结合 (3)执行函数体 (4)函数结束或遇到return返回函数调用处 (5)收回分配函数的内存单元,例 void main() int a;double t; scanf(“%lf,%d“, ,double expon(float x,int n) double y;int i; y=1; for(i=0;in;i+) y=y*x; r
14、eturn y; ,18,4. 被调用函数的声明,使用库函数需要头文件中说明 格式 #include 或 “库文件名.h“ 如 #include “stdio.h“ #include “math.h“,使用自定义函数需要在调用函数的模块中声明被调用函数 格式 类型标识符 被调用函数名(形参说明表); 或 类型标识符 被调用函数名();,注:源程序文件 .c两种形参定义方式均可。 源程序文件 .cpp只适合第一种方式。,19,函数调用说明,函数调用说明,例,#include void main( ) double fact(int n); printf(“%fn“,fact(12)/(fact(
15、5)+fact(7); double fact(int n) int i; double result=1; for (i=1;i=n;i+) result=result*i; return result; ,#include void main( ) double fact(); printf(“%fn“,fact(12)/(fact(5)+fact(7); double fact(int n) int i; double result=1; for (i=1;i=n;i+) result=result*i; return result; ,20,定义的被调用函数出现在调用语句的模块之前,注
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数
链接地址:https://www.31doc.com/p-2566817.html