计算机设计语言(c语言)5

上传人:我** 文档编号:117847062 上传时间:2019-12-11 格式:PPT 页数:55 大小:534KB
返回 下载 相关 举报
计算机设计语言(c语言)5_第1页
第1页 / 共55页
计算机设计语言(c语言)5_第2页
第2页 / 共55页
计算机设计语言(c语言)5_第3页
第3页 / 共55页
计算机设计语言(c语言)5_第4页
第4页 / 共55页
计算机设计语言(c语言)5_第5页
第5页 / 共55页
点击查看更多>>
资源描述

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

1、第五章 函 数 自定义函数求E=1+1/1!+1/2!+ +1/10! 计算1+1/1!+1/2!+ +1/10!时,我们可以利用两重循环,但 问题较为复杂,程序代码行较多。根据模块化程序设计的思想 ,对于复杂的问题,可以将其分为相互联系但又彼此独立的若 干子问题,这样的子问题在程序设计中被称为模块,模块在C 语言中通过函数来实现。 因此,我们可以定义一个函数用来求1/n!,然后用主函数 来调用这个自定义函数以实现求和功能。 那么如何自己定义一个求阶乘的函数,并如何调用一个函数呢 ? 另一个例子: main( ) int a , b, c, max1; int x, y, z , max2;

2、max1=ab? a : b; max1=cmax1? c:max1; max2=xy? x : y; max2=zmax2? z:max2; int max(int x, int y, int z) int m; m=xy? x:y; m=zm? z:m; return(m); main( ) int a , b, c, max1; int x, y, z , max2; max1=max(a,b,c); max2=max(x,y,z); 程序有函数组成。 本章主要介绍: 函数的定义、函数 调用、数据传递、函数 参数、函数值等。 5.1 C语言函数使用常识 一个大 程序一般应 分为若干个程序

3、模块,一 个模块用来实现一个特定 的功能。在高级语言中用 子程序实现模块的功能。 在C语言中,子程序 的作用是由函数完成的。 一个C程序由一个或 若干个源文件构成。一个 源文件由一个或若干个函 数组成。 C 程序 源文件1源文件2 源文件n 源文件 i 函数1函数2函数n 在程序设计中,常将一些常用的功能模块编写成函数, 放在函数库中供选用。我们应该善用这些函数,以减少重复 编写程序段的工作量。 一个C 程序由一个主函数和若干个函数构成。由主函数调用 其它函数,其它函数也可以互相调用。同一个函数可以被一个或多 个函数调用任意多次。 下图是一个函数调用的示意图。 运行结果如下: * * * *

4、* * * * * * How do you do ! * * * * * * * * * * printstar( ) , print_message( ) 都 是无参函数。main( )函数调用这 两个子函数。 例5.1 一个函数调用的例子。 main() printstar( ); print_message( ); printstar( ); printstar( ) printf(* * * * * * * * * *n); print_message( ) printf(How do you do !n); /* 调用printstar 函数*/ /* 调用print_messag

5、e 函数*/ /* 调用printstar 函数*/ /* printstar 函数*/ /* print_message 函数*/ 1. 一个源程序文件由一个或多个函数组成。一个源程序文件 是一个编译单位,即以源程序文件为单位进行编译,而不 是以函数为单位进行编译。 2. 一个C程序由一个或多个源文件组成(便于分别编写、编 译和调试)。一个源文件可以为多个C程序公用。 3. C程序的执行从main函数开始,调用其它函数后流程回到 main函数,在main函数中结束整个程序的运行。main函 数是系统定义的。 4. 所有函数都是平行的,即在定义函数时是相互独立的,一 个函数并不从属于另一个函数

6、,即函数不能嵌套定义。函 数间可以相互调用,但不能调用main 函数。 说明: 6. 从函数形式看,C语言的函数分两类: (1) 无参函数:调用时,主调函数并不将数据传送给 被调函数,一般用来执行指定的一组操作。无参函数可 以带回或不带回函数值,一般以不带回函数值居多。 (2) 有参函数:调用时,在主调函数和被调函数之间 有数据传递。 5. 从用户使用的角度看,C语言的函数有两种: (1) 标准函数(库函数) (2) 用户自定义函数 1. 无参函数的定义形式 类型标识符 函数名( ) 声明部分 语句 函数体:包括说明部分和语句部分 5.2 函数定义的一般形式 说明:“ 类型标识符” 指定函数值

7、的类型,即函数带回来的 值的类型。如果不需要带回函数值,可以不写类型标识符。 例如: printstar( ) printf(*n); “函数名”应该是合法的标识符。 2. 有参函数定义的一般形式 类型标识符 函数名( 形式参数表列 ) 声明部分 语句 说明: 形式参数的说明必须写在函数体的外面,函数体内用到的变量必须在函 数体内进行说明。 函数类型与函数体中用于返回值的变量类型应保持一致。 如果在定义函数时不指定函数类型,系统会隐含指定函数类型为int型。 例如: int max(int x , int y) int z; /*函数体中的声明部分*/ z=xy?x:y; return(z);

8、 3. 空函数 类型标识符 函数名( ) 例如: dummy( ) 用途:调用时,空函数不进行任 何操作,没有任何实际作用,只 是在程序中占一个位置,以后用 一个编好的函数来代替。这样做 的好处是程序总的结构清晰,可 读性好,便于扩充新功能。 4. 形参声明的两种方式 传统方式:对形参类型的声明放在函数定义的第2行。 现代方式:在第1行的括号内指定形参类型。 Turbo C 和目前使用的多数C 版本都允许使用这两种方法,二者 等价,ANSI 新标准推荐使用现代方式。 传统方式: int max(x, y) int x, y; 现代方式: int max( int x , int y) 运行结果

9、: 输入: 7,8 输出: max is 8 5.3 函数参数和函数的值 5.3.1 形式参数和实际参数 当主调函数和被调用函数之间有数据传递关系时,应定义为有参函数 。 在定义函数时,函数名后面括号中的变量名称为“形式参数”(简称形参 ). 在调用函数时,函数名后面括号中的参数(可以为常量、变量、表达 式),称为“实际参数”(简称实参)。 main() int a,b,c; scanf(%d,%d, c=max(a , b); printf(max is %dn,c); int max(int x , int y) int z; z=xy?x:y; return(z); a 和 b 是实参

10、x 和 y 和是形参 数据传递 函数定义 【例 5.2】 1. 在定义函数中指定的形式参数,在未出现函数调用时,它 们并不占内存中的存储单元。只有在发生函数调用时,函 数中的形参才被分配内存单元,在调用结束后,形参所占 的内存单元也被释放。 实参可以是常量、变量或表达式,但必须有确定的值。 例如: c=max(3,a+b); 在调用时将实参的值赋给形参(数组除外,若形参是 数组名,则传递的是数组首地址,而不是数组的值)。 3. 在函数定义中必须指定形参的类型。 4. 实参与形参的类型应相同或赋值相容。 关于形参和实参的说明: 5. C规定实参变量对形参变量的数据传递是“值传递”(即 单向传递)

11、,只能由实参传给形参,而不能由形参传回 来给实参。在内存中,实参单元与形参单元是不同的单 元。(如图1) 2a3b 2x3y 10 x 15y 2a3b 6. 在调用函数时,给形参分配存储单元,并将实参对应的 值传递给形参,调用结束后,形参单元被释放,实参 单元仍保留并维持原值。因此,在执行一个被调函数 时,形参的值如果发生改变,并不会改变主调函数的 实参的值。 (如图2) 通过函数调用使主调函数能得到一个确定的值,这就是函数的返 回值。例如,在例5.2中,max(3,2) 的值是3,max(5,3) 的值是5。 1. 函数的返回值 是通过函数中的 return 语句获得的。return 语句

12、将被 调用函数中的一个确定值带回到主调函数中去。 如果需要从被调用函数中带回一个函数值,则被调用 函数中必须包含 return 语句; 如果不需要从被调用函数 中带回一个函数值,则可以不要 return 语句。 一个函数中可以有一个以上的,执行到哪一个return 语句,哪一个就起作用。 例如 int max(int x , int y) if (xy)return(x); elsereturn(y); 5.3.2 函数的返回值 例如:return z ; 与 return (z) ; 等价。 又如 int max( int x, int y) return (xy?x:y) ; return

13、 语句的使用形式: return (表达式); 或 return 表达式; 或 return; 返回表达式的值 不写括号,作用同上 不返回值 2. 函数值的类型 v 应当在定义函数时用类型标识符指定函数值的类型。 例如: int max(int x, int y) - 函数值为整型 double min(double x, double y) - 函数值为双精度型 v C语言规定:凡不加类型说明的函数一律自动按整型处理 例如: int max(int x,int y) 可写成 max(int x,int y) v 在定义函数时,对函数的类型说明一般应该和 return 中的 表达式的值的类型一

14、致。 3. 当函数值的类型和 return 语句中的表达式的值不一致时, 以函数类型为准。对数值型数据,可自动进行类型转换。 main( ) float a , b ; int c ; scanf(%f,%f, c=max( a , b) ; printf(max is %dn,c) ; int max(float x, float y) 或 max(float x, float y) float z; z=xy?x:y; return(z); 当返回时,先将z的值转换成 int型,然后由return带回一 个整型的函数值。 运行结果: 输入:1.5 , 2.5 输出:max is 2 若c 定义为实型,按%f 格式输出 ,结果又如何?2.000000 例 5.3 返回值类型与函数类型不同。 4. 如果被调用函数中没有 return 语句,并不表示函数不带回 函数值,而是带回一个不确定的值,如下面的语句是合法 的: 5. 为了明确表示函数“不带回函数值”,可以用 “void”将函数 定义为“无类型”,(即“空类型”),这样系统就保证不使 函数带回任何值。 例如: void main( ) printstar( ); void printstar( ) printf(*n); main( ) int a,b,c; a=printstar( ); b=prin

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

当前位置:首页 > 高等教育 > 大学课件

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