《c语言函数》PPT课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其它函数: 可以互相调用函数、自调用函数,不能调用main()。
精选课件ppt
4
2、使用参数 入口参数: 主调函数向被调函数传递的数据------实参、形参。
出口参数: 被调函数向主调函数传递的数据------返回值。
精选课件ppt
5
§7.2 函数的定义 问题: 1、被调函数如何使用主调函数中的数据。 2、假设被调函数有办法使用主调函数中的数据,如何保证 被调函数和主调函数中数据类型的一致。
在函数中允许有多个return语句,但每次调用只能有一个 return 语句被执行, 因此只能返回一个函数值。
精选课件ppt
15
2、函数值(回传值)的类型与被调用函数的类型说明
函数调用语句 被调函数类型 回传值类型
在定义函数时,需要指定函数的类型:
例如:
int max(x,y);
doubel a(c1,c2); 等等
1、被调函数为库函数 对库函数的调用不需要再作说明, 但必须把该函数的头
文件用include命令包含在源文件前部。
精选课件ppt
23
2、用户自定义的函数 一般应该在主调函数中对被调函数的返回值的类型做说明。 对被调函数的说明也有两种格式,
一种为传统格式,其一般格式为: 类型说明符 被调函数名();
9
调用结束:形参临时单元被释放,形参数据失效,实参数 据不变。这就是所谓的单值传递。
函数的形参和实参具有以下特点:
(1)、形参变量只有在被调用时才分配内存单元,在调用 结束时, 即刻释放所分配的内存单元。因此,形参只有在 函数内部有效。 函数调用结束返回主调函数后则不能再使 用该形参变量。
精选课件ppt
}
精选课件ppt
32
举例:利用递归方法求 n!
递归公式 n!=
1 n*(n-1)!
n=0,1 n>1
精选课件ppt
33
从递归函数的程序编写角度看,有两个关键点:
1、递归的出口: 即递归的结束条件,到何时不再递归调用下去。
2、递归表达式:如 fact(n)=n*fact(n-1)
精选课件ppt
34
§7.6 数组作为函数参数 一、数组元素作为函数参数 数组元素作为实参的函数调用与变量作为实参的函 数调用参数的使用上完全相同。
二、用数组名作为函数参数 数组名作为函数参数时不进行值传送而进行地址传送。
精选课件ppt
35
main() {int a; scanf("%d",&a); add(a); printf("%d ",a); getch(); }
最简单的程序也要有三个层次构成c程序源文件所有函数都是平行的即在定义函数时是互相独立的一个函数并不从属于另一个函数即函数不能嵌套定义只可以互相调用但不能调用main函数
第七章 函数
§7.1 概述 一、C程序的构成 从结构上:任何复杂结构的程序都可分为三种基本结构。
顺序结构、选择结构、循环结构的组合。 从组织形式:最简单的程序也要有三个层次构成
11
(4)、函数调用中发生的数据传送是单向的。 即只能把 实参的值传送给形参,而不能把形参的值反向传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的 值不会变化。
精选课件ppt
12
请指出程序运行的结果。
main() {int a,b; scanf("%d,%d",&a,&b); swap(a,b); printf("%d,%d",a,b); getch(); }
printf("%d 不是一个素数",a); else
printf("%d 是一个素数",a); getch();}
int ss(y) int y; { int z=0,i; for (i=2; i<y; i++)
if (y%i == 0) { z=1;break;}
return(z);}
精选课件ppt
这时不要函数带回值,只要求函数完成一定的操作。
精选课件ppt
20
2、构成表达式语句 函数作为表达式中的一项出现在表达式中,以函数返回
值参与表达式的运算。这种方式要求函数是有返回值的。 例如: z=2*max(x,y); 是一个赋值表达式,把max的返回值赋予变量z。
精选课件ppt
21
3、函数作为另一个函数调用的实际参数出现。 这种情况是把该函数的返回值作为实参进行传送,因
3、如何将被调函数的工作结果告诉主调函数。 4、假设有办法将被调函数的工作结果告诉主调函数, 如何保证数据类型的一致性。
精选课件ppt
6
一、函数定义的一般形式(P79--P83)
类型说明符 函数名(形式参数列表) P79
形式参数类型说明
{ 函数体
}
例如: int max(x,y) int x,y;
特点:问题的第n项的求解,依赖于n-1项的求解结果。
精选课件ppt
31
main() { int c,n;
scanf("%d",&n); c=a(n); printf("%d",c); getch(); }
int a(m) int m; { int z;
if(m==1) z=10; else z=a(m-1)+2; return(z);
2、自定义函数 用户自己定义的函数,以解决用户的专门需要。
精选课件ppt
2
三、使用函数解决的几个问题 1、提高程序设计效率 2、实现程序的模块化,提高可读性,方便编写、修改。 3、函数可供反复调用,避免一些程序段的重复书写。
精选课件ppt
3
四、函数的使用 1、函数之间的关系
main()函数: 主导函数,程序运行从main()开始,也从此处结束,运 行中可以调用其它函数。
int swap(x,y) int x,y; {int t; t=x;x=y;y=t; }
精选课件ppt
13
三、函数值(P80、P83) 函数的值是指函数被调用之后, 执行函数体中的程序段
所取得的并返回给主调函数的值。 1、函数的值只能通过return语句返回主调函数。
return 语句的一般形式为: return 表达式;
26
例一: 由键盘输入任意两个整数x、y,编写一个函数mypow()
用来求x的y次方。
int mypow(int x,int y) {int i,p; p=1; for(i=1;i<=y;i++)
p=p*x; return p;}
main() {int x,y,z; scanf("%d,%d",&x,&y); z=mypow(x,y); printf("pow(x,y)=%d",z); getch();}
例如:
int f(int x) { int y;
z=f(y);
return(z);}
精选课件ppt
30
例如: 有5个人坐在一起,问第五个人多少岁?他说比第4个人大
2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人, 又说比第2人大两岁。问第2个人,说比第一个人大两岁。最 后问第一个人,他说是10岁。请问第五个人多大?
17
§7.3 函数的调用(P82) 一、函数调用的一般形式
函数名 (实参表列) 其中,实参以 “,” 分隔,形、实参数数量相等,类型一致。
从主调函数和被调函数之间数据传送的角度看又可分为 无参函数和有参函数两种。
精选课件ppt
18
(1)无参函数 函数定义、函数说明及函数调用中均不带参数。 主调函
形参数值:变量,其数量、类型与实参一致。
精选课件ppt
8
2、实参 ------> 形参数据传递
函数调用
传值调用 (单独的变量或数组元素) 传址调用
传值调用函数的数据传递过程:
调用函数时:为形参分配临时存储单元 运行被调用函数时:实参数据装入形参临时存储单元,形
参携带实参数据参与运算。
精选课件ppt
(3)、如在所有函数定义之前, 在函数外预先说明了各 个函数的类型,则在以后的各主调函数中,可不再对被调 函数作说明。
精选课件ppt
25
例如:写一个判断素数的函数,在主函数输入一个整数, 输出是否为素数的信息。
main() {int a,c; scanf("%d",&a); c=ss(a); if(c==1)
另一种为现代格式,其一般形式为: 类型说明符 被调函数名(类型 形参,类型 形参…);
精选课件ppt
24
3、以下几种情况时可以省去主调函数中对被调函数的函数说明
(1)、 如果被调函数的返回值是整型或字符型时, 可以不 对被调函数作说明,而直接调用。这时系统将自动对被调函 数返回值按整型处理。
(2)、当被调函数的函数定义出现在主调函数之前时, 在主调函数中也可以不对被调函数再作说明而直接调用。
精选课件ppt
27
例二:
已知e=1+1/1!+1/2!+ 1/3!+‥‥‥+ 1/n!,试用公式求e的近 似值,要求累计加所有不小于106的项值,用函数fun()完成任 何数的阶乘。
main()
int fun(int i)
{int i=1;
{int j,k;
float e=0.0,n=1.0;
k=1; for(j=1;j<=i;j++)
此要求该函数必须是有返回值的。
例如: printf("%d",max(x,y)); 即是把max调用的返回值又作为printf函数的实参来使
用的。
例如:max(max(a,b),max(c,d));
精选课件ppt
22
三、对被调函数的说明 (P83)
函数说明在主调函数中调用某函数之前应对该被调函 数进行说明, 这与使用变量之前要先进行变量说明是一 样的。 在主调函数中对被调函数作说明的目的是使编译 系统知道被调函数返回值的类型, 以便在主调函数中按 此种类型对返回值作相应的处理。
{ 函数体
}
精选课件ppt
7
二、函数的参数 (P82) 1、形(式)参(数)与实(际)参(数) 实参:与实际问题紧密联系的具体数据。 形参:为构造函数而存在,不具备确切值,其值在函 数被调用时,从主调函数的实参获得。
实参数值:可以是常量、变量或表达式,但要求他们 有确定的值。在调用时将实参的值赋给形参 变量。
或者为: return (表达式);
该语句的功能是计算表达式的值,并返回给主调函数。
精选课件ppt
14
注意:
Return语句有两个作用:一是结束函数的运行,二是带着 运算的结果数中所有语句都执行完 后,也会自动返回主调函数。
有时函数可产生多个运行结果, 但return()语句只能返回 一个数据。
注意: (1)、如函数值为整型,在函数定义时可以省去类型说明。
精选课件ppt
16
(2)、不返回函数值的函数,可以明确定义为“空类型”, 类型说明符为“void”。 可定义为: void s(int n) { …… }
(3)、回传值类型和函数类型矛盾时,则以函数类型为准, 自动进行类型转换。
精选课件ppt
C程序源文件 ----- C函数 ----- C语句
所有函数都是平行的,即在定义函数时是互相独立的,
一个函数并不从属于另一个函数,即函数不能嵌套定义,只
可以互相调用,但不能调用main函数。
精选课件ppt
1
二、C函数的两种类型 1、标准函数,即库函数
这是由系统提供的,用户不必自己定义这些函数, 可以直接使用。
数和被调函数之间不进行参数传送。
(2)有参函数 在函数定义及函数说明时都有参数, 称为形式参数(简称
为形参)。进行函数调用时,主调函数将把实参的值传送给形 参,供被调函数使用。
精选课件ppt
19
二、函数调用的各种形式
1、直接调用 把函数调用作为一个语句: 例如: char c=‘a’; putchar(c);
10
(2)、实参可以是常量、变量、表达式、函数等, 无论实参 是何种类型的量,在进行函数调用时,它们都必须具有确定的 值, 以便把这些值传送给形参。 因此应预先用赋值,输入等 办法使实参获得确定值。
(3)、实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。
精选课件ppt
while(n>1.0e-6) {n=1.0/fun(i); i++; e=e+n;}
k=k*j;
printf("%f",e);
return k;}
getch();}
精选课件ppt
28
§7.4 函数的嵌套调用 (P194) C语言的函数定义都是互相平行的、独立的,即在定义
函数时,一个函数内不能包含另一个函数。 C语言不能嵌套定义函数,但可以嵌套调用函数。即在
调用一个函数过程中,又调用另一个函数。
即被调函数可以作为主调函数去调用其它函数。
精选课件ppt
29
§7.5 函数的递归调用(P198)
在调用一个函数的过程中又出现直接或间接地调用该 函数本身,称为函数的递归调用。
在递归调用中, 主调函数又是被调函数。执行递归函 数将反复调用其自身。 每调用一次就进入新的一层。
精选课件ppt
4
2、使用参数 入口参数: 主调函数向被调函数传递的数据------实参、形参。
出口参数: 被调函数向主调函数传递的数据------返回值。
精选课件ppt
5
§7.2 函数的定义 问题: 1、被调函数如何使用主调函数中的数据。 2、假设被调函数有办法使用主调函数中的数据,如何保证 被调函数和主调函数中数据类型的一致。
在函数中允许有多个return语句,但每次调用只能有一个 return 语句被执行, 因此只能返回一个函数值。
精选课件ppt
15
2、函数值(回传值)的类型与被调用函数的类型说明
函数调用语句 被调函数类型 回传值类型
在定义函数时,需要指定函数的类型:
例如:
int max(x,y);
doubel a(c1,c2); 等等
1、被调函数为库函数 对库函数的调用不需要再作说明, 但必须把该函数的头
文件用include命令包含在源文件前部。
精选课件ppt
23
2、用户自定义的函数 一般应该在主调函数中对被调函数的返回值的类型做说明。 对被调函数的说明也有两种格式,
一种为传统格式,其一般格式为: 类型说明符 被调函数名();
9
调用结束:形参临时单元被释放,形参数据失效,实参数 据不变。这就是所谓的单值传递。
函数的形参和实参具有以下特点:
(1)、形参变量只有在被调用时才分配内存单元,在调用 结束时, 即刻释放所分配的内存单元。因此,形参只有在 函数内部有效。 函数调用结束返回主调函数后则不能再使 用该形参变量。
精选课件ppt
}
精选课件ppt
32
举例:利用递归方法求 n!
递归公式 n!=
1 n*(n-1)!
n=0,1 n>1
精选课件ppt
33
从递归函数的程序编写角度看,有两个关键点:
1、递归的出口: 即递归的结束条件,到何时不再递归调用下去。
2、递归表达式:如 fact(n)=n*fact(n-1)
精选课件ppt
34
§7.6 数组作为函数参数 一、数组元素作为函数参数 数组元素作为实参的函数调用与变量作为实参的函 数调用参数的使用上完全相同。
二、用数组名作为函数参数 数组名作为函数参数时不进行值传送而进行地址传送。
精选课件ppt
35
main() {int a; scanf("%d",&a); add(a); printf("%d ",a); getch(); }
最简单的程序也要有三个层次构成c程序源文件所有函数都是平行的即在定义函数时是互相独立的一个函数并不从属于另一个函数即函数不能嵌套定义只可以互相调用但不能调用main函数
第七章 函数
§7.1 概述 一、C程序的构成 从结构上:任何复杂结构的程序都可分为三种基本结构。
顺序结构、选择结构、循环结构的组合。 从组织形式:最简单的程序也要有三个层次构成
11
(4)、函数调用中发生的数据传送是单向的。 即只能把 实参的值传送给形参,而不能把形参的值反向传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的 值不会变化。
精选课件ppt
12
请指出程序运行的结果。
main() {int a,b; scanf("%d,%d",&a,&b); swap(a,b); printf("%d,%d",a,b); getch(); }
printf("%d 不是一个素数",a); else
printf("%d 是一个素数",a); getch();}
int ss(y) int y; { int z=0,i; for (i=2; i<y; i++)
if (y%i == 0) { z=1;break;}
return(z);}
精选课件ppt
这时不要函数带回值,只要求函数完成一定的操作。
精选课件ppt
20
2、构成表达式语句 函数作为表达式中的一项出现在表达式中,以函数返回
值参与表达式的运算。这种方式要求函数是有返回值的。 例如: z=2*max(x,y); 是一个赋值表达式,把max的返回值赋予变量z。
精选课件ppt
21
3、函数作为另一个函数调用的实际参数出现。 这种情况是把该函数的返回值作为实参进行传送,因
3、如何将被调函数的工作结果告诉主调函数。 4、假设有办法将被调函数的工作结果告诉主调函数, 如何保证数据类型的一致性。
精选课件ppt
6
一、函数定义的一般形式(P79--P83)
类型说明符 函数名(形式参数列表) P79
形式参数类型说明
{ 函数体
}
例如: int max(x,y) int x,y;
特点:问题的第n项的求解,依赖于n-1项的求解结果。
精选课件ppt
31
main() { int c,n;
scanf("%d",&n); c=a(n); printf("%d",c); getch(); }
int a(m) int m; { int z;
if(m==1) z=10; else z=a(m-1)+2; return(z);
2、自定义函数 用户自己定义的函数,以解决用户的专门需要。
精选课件ppt
2
三、使用函数解决的几个问题 1、提高程序设计效率 2、实现程序的模块化,提高可读性,方便编写、修改。 3、函数可供反复调用,避免一些程序段的重复书写。
精选课件ppt
3
四、函数的使用 1、函数之间的关系
main()函数: 主导函数,程序运行从main()开始,也从此处结束,运 行中可以调用其它函数。
int swap(x,y) int x,y; {int t; t=x;x=y;y=t; }
精选课件ppt
13
三、函数值(P80、P83) 函数的值是指函数被调用之后, 执行函数体中的程序段
所取得的并返回给主调函数的值。 1、函数的值只能通过return语句返回主调函数。
return 语句的一般形式为: return 表达式;
26
例一: 由键盘输入任意两个整数x、y,编写一个函数mypow()
用来求x的y次方。
int mypow(int x,int y) {int i,p; p=1; for(i=1;i<=y;i++)
p=p*x; return p;}
main() {int x,y,z; scanf("%d,%d",&x,&y); z=mypow(x,y); printf("pow(x,y)=%d",z); getch();}
例如:
int f(int x) { int y;
z=f(y);
return(z);}
精选课件ppt
30
例如: 有5个人坐在一起,问第五个人多少岁?他说比第4个人大
2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人, 又说比第2人大两岁。问第2个人,说比第一个人大两岁。最 后问第一个人,他说是10岁。请问第五个人多大?
17
§7.3 函数的调用(P82) 一、函数调用的一般形式
函数名 (实参表列) 其中,实参以 “,” 分隔,形、实参数数量相等,类型一致。
从主调函数和被调函数之间数据传送的角度看又可分为 无参函数和有参函数两种。
精选课件ppt
18
(1)无参函数 函数定义、函数说明及函数调用中均不带参数。 主调函
形参数值:变量,其数量、类型与实参一致。
精选课件ppt
8
2、实参 ------> 形参数据传递
函数调用
传值调用 (单独的变量或数组元素) 传址调用
传值调用函数的数据传递过程:
调用函数时:为形参分配临时存储单元 运行被调用函数时:实参数据装入形参临时存储单元,形
参携带实参数据参与运算。
精选课件ppt
(3)、如在所有函数定义之前, 在函数外预先说明了各 个函数的类型,则在以后的各主调函数中,可不再对被调 函数作说明。
精选课件ppt
25
例如:写一个判断素数的函数,在主函数输入一个整数, 输出是否为素数的信息。
main() {int a,c; scanf("%d",&a); c=ss(a); if(c==1)
另一种为现代格式,其一般形式为: 类型说明符 被调函数名(类型 形参,类型 形参…);
精选课件ppt
24
3、以下几种情况时可以省去主调函数中对被调函数的函数说明
(1)、 如果被调函数的返回值是整型或字符型时, 可以不 对被调函数作说明,而直接调用。这时系统将自动对被调函 数返回值按整型处理。
(2)、当被调函数的函数定义出现在主调函数之前时, 在主调函数中也可以不对被调函数再作说明而直接调用。
精选课件ppt
27
例二:
已知e=1+1/1!+1/2!+ 1/3!+‥‥‥+ 1/n!,试用公式求e的近 似值,要求累计加所有不小于106的项值,用函数fun()完成任 何数的阶乘。
main()
int fun(int i)
{int i=1;
{int j,k;
float e=0.0,n=1.0;
k=1; for(j=1;j<=i;j++)
此要求该函数必须是有返回值的。
例如: printf("%d",max(x,y)); 即是把max调用的返回值又作为printf函数的实参来使
用的。
例如:max(max(a,b),max(c,d));
精选课件ppt
22
三、对被调函数的说明 (P83)
函数说明在主调函数中调用某函数之前应对该被调函 数进行说明, 这与使用变量之前要先进行变量说明是一 样的。 在主调函数中对被调函数作说明的目的是使编译 系统知道被调函数返回值的类型, 以便在主调函数中按 此种类型对返回值作相应的处理。
{ 函数体
}
精选课件ppt
7
二、函数的参数 (P82) 1、形(式)参(数)与实(际)参(数) 实参:与实际问题紧密联系的具体数据。 形参:为构造函数而存在,不具备确切值,其值在函 数被调用时,从主调函数的实参获得。
实参数值:可以是常量、变量或表达式,但要求他们 有确定的值。在调用时将实参的值赋给形参 变量。
或者为: return (表达式);
该语句的功能是计算表达式的值,并返回给主调函数。
精选课件ppt
14
注意:
Return语句有两个作用:一是结束函数的运行,二是带着 运算的结果数中所有语句都执行完 后,也会自动返回主调函数。
有时函数可产生多个运行结果, 但return()语句只能返回 一个数据。
注意: (1)、如函数值为整型,在函数定义时可以省去类型说明。
精选课件ppt
16
(2)、不返回函数值的函数,可以明确定义为“空类型”, 类型说明符为“void”。 可定义为: void s(int n) { …… }
(3)、回传值类型和函数类型矛盾时,则以函数类型为准, 自动进行类型转换。
精选课件ppt
C程序源文件 ----- C函数 ----- C语句
所有函数都是平行的,即在定义函数时是互相独立的,
一个函数并不从属于另一个函数,即函数不能嵌套定义,只
可以互相调用,但不能调用main函数。
精选课件ppt
1
二、C函数的两种类型 1、标准函数,即库函数
这是由系统提供的,用户不必自己定义这些函数, 可以直接使用。
数和被调函数之间不进行参数传送。
(2)有参函数 在函数定义及函数说明时都有参数, 称为形式参数(简称
为形参)。进行函数调用时,主调函数将把实参的值传送给形 参,供被调函数使用。
精选课件ppt
19
二、函数调用的各种形式
1、直接调用 把函数调用作为一个语句: 例如: char c=‘a’; putchar(c);
10
(2)、实参可以是常量、变量、表达式、函数等, 无论实参 是何种类型的量,在进行函数调用时,它们都必须具有确定的 值, 以便把这些值传送给形参。 因此应预先用赋值,输入等 办法使实参获得确定值。
(3)、实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。
精选课件ppt
while(n>1.0e-6) {n=1.0/fun(i); i++; e=e+n;}
k=k*j;
printf("%f",e);
return k;}
getch();}
精选课件ppt
28
§7.4 函数的嵌套调用 (P194) C语言的函数定义都是互相平行的、独立的,即在定义
函数时,一个函数内不能包含另一个函数。 C语言不能嵌套定义函数,但可以嵌套调用函数。即在
调用一个函数过程中,又调用另一个函数。
即被调函数可以作为主调函数去调用其它函数。
精选课件ppt
29
§7.5 函数的递归调用(P198)
在调用一个函数的过程中又出现直接或间接地调用该 函数本身,称为函数的递归调用。
在递归调用中, 主调函数又是被调函数。执行递归函 数将反复调用其自身。 每调用一次就进入新的一层。