📄 51.htm
字号:
<HTML><HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <META NAME="Author" CONTENT="wdg"> <META NAME="GENERATOR" CONTENT="Mozilla/4.03 [en] (Win95; I) [Netscape]"> <TITLE>51</TITLE></HEAD><BODY><P> 函数<P> C程序是由一组或是变量或是函数的外部对象组成的。 函数是一个自我包含的<BR>完成一定相关功能的执行代码段。我们可以把函数看成一个"黑盒子", 你只要将数<BR>据送进去就能得到结果, 而函数内部究竟是如何工作的的, 外部程序是不知道的。<BR>外部程序所知道的仅限于输入给函数什么以及函数输出什么。函数提供了编制程序<BR>的手段, 使之容易读、写、理解、排除错误、修改和维护。<BR> C程序中函数的数目实际上是不限的, 如果说有什么限制的话,那就是, 一个C<BR>程序中必须至少有一个函数, 而且其中必须有一个并且仅有一个以main为名,这个<BR>函数称为主函数, 整个程序从这个主函数开始执行。<BR> C 语言程序鼓励和提倡人们把一个大问题划分成一个个子问题,对应于解决一<BR>个子问题编制一个函数, 因此, C 语言程序一般是由大量的小函数而不是由少量大<BR>函数构成的, 即所谓"小函数构成大程序"。这样的好处是让各部分相互充分独立,<BR>并且任务单一。因而这些充分独立的小模块也可以作为一种固定规格的小"构件",<BR>用来构成新的大程序。<BR> C语言的一个主要特点是可以建立库函数。Turbo C2.0提供的运行程序库有400<BR>多个函数, 每个函数都完成一定的功能, 可由用户随意调用。这些函数总的分为输<BR>入输出函数、数学函数、字符串和内存函数、与BIOS和DOS有关的函数、 字符屏幕<BR>和图形功能函数、过程控制函数、目录函数等。对这些库函数应熟悉其功能,只有<BR>这样才可省去很多不必要的工作。<BR> 本教程后半部分专门介绍Turbo C2.0的库函数, 并对每个函数都给出例程,读<BR>者可以将自已需要的部分以块的方式定义, 然后将此块写入文件, 这样就可以在进<BR>入Turbo C2.0集成开发环境后, 直接调用此程序, 连接, 运行, 观察结果, 以加深<BR>对该函数的理解。<BR> 用户编制Turbo C语言源程序, 就是利用Turbo C的库函数。可以把所有使用的<BR>库函数放在一个庞大的主函数里, 也可以按不同功能设计成一个个用户函数而被其<BR>它函数调用。Turbo C2.0建议用户使用后者, 当用户编制了一些较常用的函数时,<BR>只要将其存在函数库里, 在以后的编程中可被方便的调用而不需要再去编译它们。<BR>连接时将会自动从相应的库中装配成所需程序。<P> 1. 函数的说明与定义<BR> Turbo C2.0中所有函数与变量一样在使用之前必须说明。所谓说明是指说明函<BR>数是什么类型的函数, 一般库函数的说明都包含在相应的头文件<*.h>中, 例如标<BR>准输入输出函数包含在stdio.h中, 非标准输入输出函数包含在io.h中, 以后在使<BR>用库函数时必须先知道该函数包含在什么样的头文件中, 在程序的开头用#include<BR><*.h>或#include"*.h"说明。只有这样程序在编译, 连接时Turbo C 才知道它是提<BR>供的库函数, 否则, 将认为是用户自己编写的函数而不能装配。<P> 1.1 函数说明<P> 1. 经典方式<BR> 其形式为: 函数类型 函数名();<BR> 2. ANSI 规定方式<BR> 其形式为: 函数类型 函数名(数据类型 形式参数, 数据类型 形式<BR> 参数, ......);<BR> 其中: 函数类型是该函数返回值的数据类型, 可以是以前介绍的整型(int),<BR>长整型(long), 字符型(char), 单浮点型(float), 双浮点型(double)以及无值型<BR>(void), 也可以是指针, 包括结构指针。无值型表示函数没有返回值。<BR> 函数名为Turbo C2.0的标识符, 小括号中的内容为该函数的形式参数说明。可<BR>以只有数据类型而没有形式参数, 也可以两者都有。对于经典的函数说明没有参数<BR>信息。如:<BR> int putlll(int x,int y,int z,int color,char*p)/*说明一个整型函数*/<BR> char *name(void); /*说明一个字符串指什函数*/<BR> void student(int n, char *str); /*说明一个不返回值的函数*/<BR> float calculate(); /*说明一个浮点型函数*/<BR> 注意: 如果一个函数没有说明就被调用, 编译程序并不认为出错,而将此函数<BR>默认为整型(int)函数。因此当一个函数返回其它类型, 又没有事先说明, 编译时<BR>将会出错。<P> 1.2 函数定义<BR> <BR> 函数定义就是确定该函数完成什么功能以及怎么运行,相当于其它语言的一个<BR>子程序。Turbo C2.0对函数的定义采用ANSI规定的方式。即:<BR> 函数类型 函数名(数据类型形式参数; 数据类型 形式参数...)<BR> {<BR> 函数体;<BR> }<BR> 其中函数类型和形式参数的数据类型为Turbo C2.0的基本数据类型。函数体为<BR>Turbo C2.0提供的库函数和语句以及其它用户自定义函数调用语句的组合, 并包括<BR>在一对花括号"{"和"}"中。<BR> 需要指出的是一个程序必须有一个主函数, 其它用户定义的子函数可以是任意<BR>多个, 这些函数的位置也没有什么限制, 可以在main()函数前, 也可以在其后。<BR>Turbo C2.0将所有函数都被认为是全局性的。而且是外部的, 即可以被另一个文件<BR>中的任何一个函数调用。<P> 2 函数的调用<P> 2.1 函数的简单调用<BR> Turbo C2.0调用函数时直接使用函数名和实参的方法,也就是将要赋给被调用<BR>函数的参量, 按该函数说明的参数形式传递过去, 然后进入子函数运行, 运行结束<BR>后再按子函数规定的数据类型返回一个值给调用函数。使用Turbo C2.0的库函数就<BR>是函数简单调用的方法。举例说明如下:<BR> 例1:<BR> #include<stdio.h><BR> int maxmum(int x, int y, int z); /*说明一个用户自定义函数*/<BR> int main()<BR> {<BR> int i, j, k;<BR> printf("i, j,k=?\n");<BR> scanf("%4d%4d%4d",&i, &j, &k);<BR> maxmum(i, j,k);<BR> getch();<BR> return 0;<BR> }<BR> <BR> maxmum(int x, int y, int z)<BR> {<BR> int max;<BR> max=x>y?x:y;<BR> max=max>z?max:z;<BR> printf("Themaxmum value of the 3 data is %d\n", max);<BR> }<P> 2.2 函数参数传递<BR> <BR> 一、调用函数向被调用函数以形式参数传递<BR> 用户编写的函数一般在对其说明和定义时就规定了形式参数类型,因此调用这<BR>些函数时参量必须与子函数中形式参数的数据类型、顺序和数量完全相同, 否则在<BR>调用中将会出错, 得到意想不到的结果。<BR> 注意:<BR> 当数组作为形式参数向被调用函数传递时, 只传递数组的地址,而不是将整个<BR>数组元素都复制到函数中去, 即用数组名作为实参调用子函数, 调用时指向该数组<BR>第一个元素的指针就被传递给子函数。因为在Turbo C2.0中, 没有下标的数组名就<BR>是一个指向该数组第一个元素的指针。当然数组变量的类型在两个函数中必须相同。<BR> 用下述方法传递数组形参。<BR> 例2:<BR> #include<stdio.h><BR> void disp(int *n);<BR> int main()<BR> {<BR> int m[10], i;<BR> for(i=0; i<10;i++)<BR> m[i]=i;<BR> disp(m); /*按指针方式传递数组*/<BR> getch();<BR> return 0;<BR> }<BR> void disp(int *n)<BR> {<BR> int j;<BR> for(j=0; j<10;j++)<BR> printf("%3d", *(n++));<BR> printf("\n");<BR> }<BR> 另外, 当传递数组的某个元素时, 数组元素作为实参,此时按使用其它简单变<BR>量的方法使用数组元素。例2按传递数组元素的方法传递时变为:<BR> #include<stdio.h><BR> void disp(int n);<BR> int main()<BR> {<BR> int m[10], i;<BR> for(i=0; i<10;i++){<BR> m[i]=i;<BR> disp(m[i]); /*逐个传递数组元素*/<BR> }<BR> getch();<BR> return 0;<BR> }<BR> void disp(int n)<BR> {<BR> printf("%3d\t");<BR> }<BR>这时一次只传递了数组的一个元素。<P> 二、被调用函数向调用函数返回值<P> 一般使用return语句由被调用函数向调用函数返回值, 该语句有下列用途:<BR> 1. 它能立即从所在的函数中退出, 返回到调用它的程序中去。<BR> 2. 返回一个值给调用它的函数。<BR> 有两种方法可以终止子函数运行并返回到调用它的函数中:一是执行到函数的<BR>最后一条语句后返回; 一是执行到语句return时返回。前者当子函数执行完后仅返<BR>回给调用函数一个0。若要返回一个值, 就必须用return语句。只需在return语句<BR>中指定返回的值即可。例1返回最大值时变为:<BR> 例3:<BR> #include<stdio.h><BR> int maxmum(int x, int y, int z); /*说明一个用户自定义函数*/<BR> int main()<BR> {<BR> int i, j, k,max;<BR> printf("i, j,k=?\n");<BR> scanf("%4d%4d%4d",&i, &j, &k);<BR> max=maxmum(i,j, k); /*调用子函数, 并将返回值赋给max*/<BR> printf("Themaxmum value is %d\n", max);<BR> getch();<BR> return 0;<BR> }<BR> <BR> maxmum(int x, int y, int z)<BR> {<BR> int max;<BR> max=x>y?x:y; /*求最大值*/<BR> max=max>z?max:z;<BR> return(max); /*返回最大值*/<BR> }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -