第8章函数
1 第8章 函数
8概述 到目前为止,我们涉及到的只是C编译系 统提供的标准库函数,例如标准O函数 getchar scan ●●● 数学函数sin、cos、sqrt字符与字符 串处理函数 strcmp、 strcpy…等等。 这一章中我们将讨论如何自己去定义、编 写、使用各种不同的新函数 2
2 8.1 概述 到目前为止,我们涉及到的只是C编译系 统提供的标准库函数, 例如标准I/O函数getchar、 scanf ….. 数学函数sin、 cos、 sqrt 字符与字符 串处理函数strcmp、strcpy …等等。 这一章中我们将讨论如何自己去定义、编 写、使用各种不同的新函数
什么是函数? 函数是完成特定功能的代码段。 某些函数执行指定的动作,如 printi()将给出 的数据按指定的格式显示在屏幕上; 一些函数返回一个值供调用者使用,如 strlen() 将指定的字符串长度传递给调用程序 一般而言,一个函数可能同时具备以上两种功 能
3 什么是函数? 函数是完成特定功能的代码段。 某些函数执行指定的动作, 如 printf( ) 将给出 的数据按指定的格式显示在屏幕上; 一些函数返回一个值供调用者使用, 如strlen( ) 将指定的字符串长度传递给调用程序; 一般而言, 一个函数可能同时具备以上两种功 能
为什么要使用函数? 函数的使用可省去重复代码的编写。如果程序 中需要多次使用某种特定功能,那么只需编写 个合适的函数即可。如要计算: 69 f +sin x+v1+2sin x+3s x elx+1+2e +3e f+√1+2f2+3f x+1+2√x+3x
4 为什么要使用函数? 函数的使用可省去重复代码的编写。如果程序 中需要多次使用某种特定功能,那么只需编写一 个合适的函数即可。如要计算: x x x f f f s x x x e e e f x x x 1 2 3 1 2 3 sin 1 2sin 3sin 1 2 3 6.9 4 2 4 2 2 2 2 + + + + + + = + + + + + + + =
可以先编写计算x2+√1+2x+3x2的函数: double y( double x) double value value=x*x+sgrt(1.0+2.0*x+3.0*x*x); return value j 然后再编写如下的主函数,调用函数y:
5 double y ( double x ) { double value ; value = x*x+sqrt ( 1.0+2.0*x+3.0*x*x ) ; return value ; } 可以先编写计算 x 2 1 2 x 3x 2 + + + 的函数: 然后再编写如下的主函数 , 调用函数 y :
#include #include main( double y( double x); double f,s,x; scanf(“%f”,&x); 6.9/y( exp(x))+y(sin(x)); =y(f*)/y( sgrt(x)) printf(“f=%fns=%fn”,f,s);
6 #include #include main( ) { double y ( double x ) ; double f , s , x ; scanf ( “%f ” , &x ) ; f = 6.9/y ( exp (x) ) + y ( sin (x) ) ; s=y ( f*f ) / y ( sqrt ( x ) ) ; printf ( “f=%f\ns=%f\n” , f , s ) ; }
对函数需要了解什么? 如何正确定义函数; 如何正确调用函数; 函数执行完如何返回; 如何在函数间传递数据(函数间数据通信)
7 如何正确定义函数; 如何正确调用函数; 函数执行完如何返回; 如何在函数间传递数据(函数间数据通信)。 对函数需要了解什么?
l、函数分类 1)根据定义分类 系统预定义库函数 用户自定义函数 2)根据参数分类 无参数函数 有参数函数 3)根据返回值分类 有返回值函数 无返回值函数
8 1、函数分类 1) 根据定义分类 系统预定义库函数 用户自定义函数 2) 根据参数分类 无参数函数 有参数函数 3) 根据返回值分类 有返回值函数 无返回值函数
4)根据函数的文件作用域分类 static函数 extern函数 5)根据函数的实现方法分类 递归函数 非递归函数 6)根据函数的应用及功能分类 数学函数 字符串处理函数 字符处理函数
9 4) 根据函数的文件作用域分类 static函数 extern函数 5) 根据函数的实现方法分类 递归函数 非递归函数 6) 根据函数的应用及功能分类 数学函数 字符串处理函数 字符处理函数 ……
2、函数定义、调用与返回 个C源程序可由若干函数组成(多个相互独立 的函数定义),但必须有一个也只能有一个maim函数 定义(函数名是规定的,函数体是自定义的),函数不 允许嵌套定义(函数中不能再定义另一个函数)。 C程序中所有函数间的关系是平等的。每个函 数都可以调用其他函数,或被其他函数调用,或自己 调用自己(递归调用)。main函数一般只由操作系统 调用它,引起程序的执行。 函数被调用执行中当遇到 return语句或函数体最 后的“}”时将返回到主调函数处或调用点的下 条语句继续执行。返回时可有返回值或没有返回值
10 2、函数定义、调用与返回 一个C源程序可由若干函数组成 (多个相互独立 的函数定义) , 但必须有一个也只能有一个main函数 定义 (函数名是规定的, 函数体是自定义的) , 函数不 允许嵌套定义(函数中不能再定义另一个函数)。 C程序中所有函数间的关系是平等的。 每个函 数都可以调用其他函数, 或被其他函数调用, 或自己 调用自己 (递归调用)。main函数一般只由操作系统 调用它, 引起程序的执行。 函数被调用执行中当遇到return语句或函数体最 后的“}” 时, 将返回到主调函数处或调用点的下一 条语句继续执行。返回时可有返回值或没有返回值