C语言学习教程第五章-函数(1)

概述

在第一章中已经介绍过,C源程序是由函数组成的。 虽然在前面各章的程序中都只有一个主函数main(), 但实用程序往往由多个函数组成。函数是C源程序的基本模块, 通过对函数模块的调用实现特定的功能。C语言中的函数相当于其它高级语言的子程序。 C语言不仅提供了极为丰富的库函数(如Turbo C,MS C 都提供了三百多个库函数),还允许用户建立自己定义的函数。用户可把自己的算法编成一个个相对独立的函数模块,然后用调用的方法来使用函数。

可以说C程序的全部工作都是由各式各样的函数完成的, 所以也把C语言称为函数式语言。 由于采用了函数模块式的结构, C语言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。

在C语言中可从不同的角度对函数分类。

1. 从函数定义的角度看,函数可分为库函数和用户定义函数两种。

(1)库函数
由C系统提供,用户无须定义, 也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。在前面各章的例题中反复用到printf 、 scanf 、 getchar 、putchar、gets、puts、strcat等函数均属此类。

(2)用户定义函数
由用户按需要写的函数。对于用户自定义函数, 不仅要在程序中定义函数本身, 而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。

2. C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。

(1)有返回值函数
此类函数被调用执行完后将向调用者返回一个执行结果, 称为函数返回值。如数学函数即属于此类函数。 由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。

(2)无返回值函数
此类函数用于完成某项特定的处理任务, 执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。 由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”, 空类型的说明符为“void”。

3. 从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。

(1)无参函数
函数定义、函数说明及函数调用中均不带参数。 主调函数和被调函数之间不进行参数传送。 此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。

(2)有参函数
也称为带参函数。在函数定义及函数说明时都有参数, 称为形式参数(简称为形参)。在函数调用时也必须给出参数, 称为实际参数(简称为实参)。 进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。

4. C语言提供了极为丰富的库函数, 这些库函数又可从功能角度作以下分类。
(1)字符类型分类函数
用于对字符按ASCII码分类:字母,数字,控制字符,分隔符,大小写字母等。
(2)转换函数
用于字符或字符串的转换;在字符量和各类数字量 (整型, 实型等)之间进行转换;在大、小写之间进行转换。
(3)目录路径函数
用于文件目录和路径操作。
(4)诊断函数
用于内部错误检测。
(5)图形函数
用于屏幕管理和各种图形功能。
(6)输入输出函数
用于完成输入输出功能。
(7)接口函数
用于与DOS,BIOS和硬件的接口。
(8)字符串函数
用于字符串操作和处理。
(9)内存管理函数
用于内存管理。
(10)数学函数
用于数学函数计算。
(11)日期和时间函数
用于日期,时间转换操作。
(12)进程控制函数
用于进程管理和控制。
(13)其它函数
用于其它各种功能。

以上各类函数不仅数量多,而且有的还需要硬件知识才会使用,因此要想全部掌握则需要一个较长的学习过程。 应首先掌握一些最基本、 最常用的函数,再逐步深入。由于篇幅关系,本书只介绍了很少一部分库函数, 其余部分读者可根据需要查阅有关手册。

还应该指出的是,在C语言中,所有的函数定义,包括主函数main在内,都是平行的。也就是说,在一个函数的函数体内, 不能再定义另一个函数, 即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。 函数还可以自己调用自己,称为递归调用。main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。 因此,C程序的执行总是从main函数开始, 完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有,也只能有一个主函数main。

时间: 2024-10-28 09:07:41

C语言学习教程第五章-函数(1)的相关文章

C语言学习教程第五章-函数(9)

三.静态变量 静态变量的类型说明符是static. 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量. 对于自动变量,前面已经介绍它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来, 一个变量可由static进行再说明,并改变其原有的存储方式. 1. 静态局部变量在局部变量的说明前再

C语言学习教程第五章-函数(10)

内部函数和外部函数 函数一旦定义后就可被其它函数调用. 但当一个源程序由多个源文件组成时, 在一个源文件中定义的函数能否被其它源文件中的函数调用呢?为此,C语言又把函数分为两类: 一.内部函数 如果在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用, 这种函数称为内部函 数.定义内部函数的一般形式是: static 类型说明符 函数名(形参表) 例如:static int f(int a,int b) 内部函数也称为静态函数.但此处静态static 的含义已

C语言学习教程第五章-函数(8)

变量的存储方式可分为"静态存储"和"动态存储"两种. 静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束.5.5.1节中介绍的全局变量即属于此类存储方式.动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放. 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放.如果一个函数被多次调用,则反复地分配. 释放形参变量的存储单元.从以上分析可知, 静态存储

C语言学习教程第五章-函数(2)

函数定义的一般形式 1.无参函数的一般形式 类型说明符 函数名() { 类型说明 语句 }其中类型说明符和函数名称为函数头. 类型说明符指明了本函数的类型,函数的类型实际上是函数返回值的类型. 该类型说明符与第二章介绍的各种说明符相同. 函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少.{} 中的内容称为函数体.在函数体中也有类型说明, 这是对函数体内部所用到的变量的类型说明.在很多情况下都不要求无参函数有返回值, 此时函数类型符可以写为void.我们可以改为一个函数定

C语言学习教程第五章-函数(7)

一.局部变量 局部变量也称为内部变量.局部变量是在函数内作定义说明的.其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的.例如:int f1(int a) /*函数f1*/{int b,c; --}a,b,c作用域int f2(int x) /*函数f2*/{int y,z; }x,y,z作用域main(){int m,n; }m,n作用域 在函数f1内定义了三个变量,a为形参,b,c为一般变量.在 f1的范围内a,b,c有效,或者说a,b,c变量的作用域限于f1内.同理,x,y,z的作

C语言学习教程第五章-函数(6)

函数的递归调用 一个函数在它的函数体内调用它自身称为递归调用. 这种函数称为递归函数.C语言允许函数的递归调用.在递归调用中, 主调函数又是被调函数.执行递归函数将反复调用其自身. 每调用一次就进入新的一层.例如有函数f如下:int f (int x){int y;z=f(y);return z;}这个函数是一个递归函数. 但是运行该函数将无休止地调用其自身,这当然是不正确的.为了防止递归调用无终止地进行, 必须在函数内有终止递归调用的手段.常用的办法是加条件判断, 满足某种条件后就不再作递归调

C语言学习教程第五章-函数(5)

函数的嵌套调用 C语言中不允许作嵌套的函数定义.因此各函数之间是平行的,不存在上一级函数和下一级函数的问题. 但是C语言允许在一个函数的定义中出现对另一个函数的调用. 这样就出现了函数的嵌套调用.即在被调函数中又调用其它函数. 这与其它语言的子程序嵌套的情形是类似的.其关系可表示如图5.2. 图5.2表示了两层嵌套的情形.其执行过程是:执行main函数中调用a函数的语句时,即转去执行a函数,在a函数中调用b 函数时,又转去执行b函数,b函数执行完毕返回a函数的断点继续执行,a 函数执行完毕返回m

C语言学习教程第五章-函数(4)

二.数组名作为函数参数 用数组名作函数参数与用数组元素作实参有几点不同:1. 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的.因此, 并不要求函数的形参也是下标变量. 换句话说,对数组元素的处理是按普通变量对待的.用数组名作函数参数时, 则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明.当形参和实参二者不一致时,即会发生错误. 2. 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分

C语言学习教程第五章-函数(3)

二.函数的值 函数的值是指函数被调用之后, 执行函数体中的程序段所取得的并返回给主调函数的值.如调用正弦函数取得正弦值,调用例5.1的max函数取得的最大数等.对函数的值(或称函数返回值)有以下一些说明: 1. 函数的值只能通过return语句返回主调函数.return 语句的一般形式为: return 表达式: 或者为:return (表达式):该语句的功能是计算表达式的值,并返回给主调函数. 在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行, 因此只能返回一个