计算机c语言—第八章

上传人:子 文档编号:51657703 上传时间:2018-08-15 格式:PPT 页数:122 大小:726KB
返回 下载 相关 举报
计算机c语言—第八章_第1页
第1页 / 共122页
计算机c语言—第八章_第2页
第2页 / 共122页
计算机c语言—第八章_第3页
第3页 / 共122页
计算机c语言—第八章_第4页
第4页 / 共122页
计算机c语言—第八章_第5页
第5页 / 共122页
点击查看更多>>
资源描述

《计算机c语言—第八章》由会员分享,可在线阅读,更多相关《计算机c语言—第八章(122页珍藏版)》请在金锄头文库上搜索。

1、第8章 函数8.1 概述一个C程序,由一个主函数和若干其它函数组成,它 们之间的关系是:主函数可以调用其它函数,其它函数可相互调用。且 一个函数可以被调用若干次注:每个函数都是独立的,平等的!函数:完成特定功能的程序段,通常由用户定义或系 统定义各函数可存放在一个文件中,也可以存放在不同的文 件中。某程序整体结构, mainabcdefghhieg程序运行轨迹: maina d a e a main b f e f b g b h b main c h g h c i c main举例:用常规、文件包含两种方法打印字符串一、常规方法:各函数包含在一个文件中例T8-1.cmain( )p1( )

2、;p2( );p1( );p1( )printf (“* n” ); p2( )printf (“_ _ _ _ _How_do_you_do!n”) ;运行结果:*_ _ _ _ _How_do_you_do! _ _ _ _* *二、文件包含的方法在主函数所在的文件中使用文件包含预编译命令,将不在 本文件而在其它文件中的函数进行预编译处理,把各文件 中的函数包含到本文件中来,然后一起进行编译、连接、 运行。 T8-1-3.c#include “T8-1-1.c”#include “T8-1-2.c”main( )p1( ); p2( ) ; p1( ) ; 运行结果同上 友情提示:还可以用

3、项目的方法T8-1-1.c p1( ) printf (“* n”); T8-1-2.c p2( ) printf (“_ _ _ _ How_do_you_do! n”); 说明:(1)一个文件可含多个函数,编译的单位是文件而不是函数;(2)一个完整的程序可由若干个文件组成,可用项目或文件包含的方 法对其编译;(3)C执行总是从main函数开始执行,调用其它函数后又返回到main 函数;(4)函数定义是独立的、平等的,不能嵌套定义(即函数里不能再定 义函数)但可相互调用;(5)函数的类型: 标准库函数,由系统提供,用户直接使用用户定义的函数(6) 函数的形式: 无参函数 主调函数无数据传给被

4、调函数,可带或不带返回值.有参函数 主调函数与被调函数间有参数传递,主调函数可将实际参 数传送给被调函数的形式参数,被调函数的函数值可传回主调函数。8.2 函数定义的一般形式1.无参函数的定义形式:类型标识符 函数名( ) 声明部分语句部分注:无参函数一般不返回函数值,故类型标识符可省。2.有参函数的定义形式:类型标识符 函数名(形式参数表列) 声明部分语句部分其中:类型标识符:指出函数返回值的数据类型 (int, float,char等) ,系统默认为int函数名:合法的标识符;形参表列:接收主调函数传递过来的实参,其中包括对形 参类型的声明(老版本中形参类型进一步声明放在下一行) 。形参类

5、型:与实参类型要一致。 :称函数体,包括声明部分:定义局部变量的数据类型;语句部分:完成函数功能的若干执行语句。例:int max(int x,int y) int z;z= xy ? x : y ; return(z) ;3.空函数的定义形式类型说明符 函数名( ) 例: p1( ) 空函数不作任何操作,但是合法,它对调试程序或以后在此 处补充完整的函数体是 有作用的。4.对形参声明的传统方式传统方式中,形参类型说明在函数定义的第2行如:传统形参声明形式int max(x,y)int x,y;int z;z=xy ?x:y;return(z);新版本形参声明形式int max(int x,i

6、nt y)int z;z=xy ?x:y;return(z);以上两种定义形式在Turbo C中都认可8.3 函数参数和函数的值8.3.1 形式参数和实际参数实际参数:主调函数中提供的数据。可以是常量、变量、表达式等,是具体的数值。形式参数:被调函数中用以接收主调函数数据的变量。被调用函数名后面括号内的若干变量名。例T8-2.c 调用函数时的数据传递main( )int a, b, c;scanf(%d%d”,c=max(a, b);printf (“Max is %d n”, c);max (int x, int y)int z;z=xy ? x : y ;return(z); 输入:-10

7、0 200Max is 200关于形、实参的说明:1.形参只有在函数调用时才分配存储单元,调用结束后,释放 所分配的单元;2.实参可以是常量、变量、表达式:max(3,a+b),总之要 有确定的值,当函数调用时,将实参的值传递给形参,若是 数组名,则传送的是数组的首地址。3.被调函数中,形参类型必须指定,以便分配存储单元。4.实参、形参的数据类型一致,赋值要兼容,顺序要一致。如果形、实参类型不一致时,则按赋值规则进行。通常被调 函数放在主调函数之前,以便编译系统对函数类型和形参类型 作合法性检查。若被调函数在主调函数之后,一般要对被调函 数作原型声明。main() float a=4.5,b=

8、4.5; int abc(int,int); abc(a,b); abc(int x,int y) printf(“x=%d,y=%dn”,x,y); 结果:x=4,y=45.若被调函数类型为非整形或实参形参类型不匹配, 要在主调函数中对被调函数作原形声明。另外若被调 函数在主调函数之前定义,则原形声明可省,因为编 译系统已经知道被调函数的类型及其形参的个数、类 型了。6.实参对形参的数据传送是值传送,也是单向传送, 当被调函数的形参发生变化时,并不改变主调函数实 参的值。例T8-2-1.c 形、实参占据的是不同的存储单元 main( ) int a=2,b=3; printf (“a=%d,

9、 b=%d n”,a, b); printf(“ add(a,b); printf(“a=%d,b=%dn”, a,b); printf(“ add(int x,int y) x=x+8; y=y+12; printf(“x=%d,y=%d n”,x,y); printf(“ 2+8=10 3+12=1523ffd2 ffd4ffd6ffd8xayb运行结果: a=2,b=3else return(b);3.return后面的括号可省,如:return a;4.return 后的值可以是一个表达式,如:return(x y ? x : y);5.函数值的类型是在定义函数时指定的如: int m

10、ax(x, y)float min(a,b)double abc(d1,d2)6.语句return(a,b,c)是合法的,返回表达式c的值。注意: (1)函数定义时,函数名的括号后无 “ ;” ;(2) 未加类型说明的函数自动按整型处理;(3) 定义函数时,函数值的类型一般与return 后面表达式的类型一致,若不一致, 则以函数值为准。例T8-3.c 函数值类型为整型,而返回值的类型是实型,最后以 整型值返回。即以函数类型为准main( )int max(float,float);/*原型声明*/float a, b; int c;scanf(“%f%f”,c=max(a, b); prin

11、tf(“max is %d n”,c) ; max(float x, float y)float z; z=xy ? x : y;return(z);输入: 1. 5 2. 5输出:max is 26.函数中无return 语句时,可能返回一个不确定或无用的值例T8-3-1.cmain( )int a, b, c; a=p1( ); b=p2( ); c=p1( ); printf(“a=%d,b=%d,c=%d n”,a, b, c); p1( ) printf(“* n”); p2( ) printf(“ I am happy! n”); 运行结果: * I am happy! *a=6,

12、b=12,c=67.为明确表示不带返回值,可用void(无值,空类型)定义函 数。例T8-3-2.c main( ) int a,b,c; a=p1( ); b=p2( ); c=p1( ); printf(“a=%d, b=%d, c=%d n”,a, b, c); void p1( ) printf(“* n”); void p2( ) printf(“I am happy! n”); 编译时指出:Type mismatch in redeclartion of p1 , p2意即:在定义函数 p1, p2 时类型不匹配8.4 函数的调用主调函数:主动去调用其它函数被调函数:被其它函数所调

13、用8.4.1 函数调用的一般形式函数名(实参表列)操作:把控制和实参传送给被调函数,当无参时,实参表列为 空,但( )不能省。函数名:是已存在的被调用的函数;实参表列:有确定值的数据,当有多个实参时,实参间用“ ,” 分隔,通常形实、参个数要相等,类型要一致,实参求值顺序 在Turbo C中是从右向左。例T8-4.c 实参求值顺序从右向左main( ) int i=2, p;p=f(i, +i); printf(“p=%d, i=%d n”,p, i); int f(int a, int b) int c; if(ab) c=1;else if(a=b) c=0; else c=-1; return (c); 运行结果:p=0, i=3 若将参数改为f(i,i+), 则结果为:p=1, i=3思考:若从左至右呢? 回忆一下printf的求值顺序8.4.2 函数的调用方法1.函数语句:把函数调用作为一个单独的语句; 如:f1( );2.函数表达式:函数调用出现在表达式中,其函数返回的值参加整个表达式的运算。如:c=max(a,b) + min(c,d);3.函数参数:函数调用作为

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号