在定义函数时,在函数类型前冠以extern,表示此函数是外部函数,如,extern int fun(inta,int b)
函数fun()可以为其他文件调用。C语言规定,如果在定义函数时省略extern关键字,则默认为外部函数。事实上前面所用的函数均为外部函数。下面是一个调用其他文件中外部函数的简单例子。
【例5-18】编写程序计算矩形面积和长方体的体积。体积及面积由函数来完成。
文件file.c的内容如下:
【程序说明】
(1)本程序的工程文件由file.c、files.c和filev.c三个源文件组成。
(2)如果将后面两个文件中函数定义的前面加上static,则上面的程序将不能运行。
综合实训
最近共同祖先
如右图所示,由正整数1,2,3,…组成了一颗无限大的二叉树。从某一个结点到根节点(编号是1)都有一条唯一的路径,例如从8到根节点的路径是8,4,2,1,从结点11到根节点的路径是11,5,2,1,对于两个结点x和y,在它们到根的路径上所经过的共同的结点成为x和y的共同祖先,而其中距离x和y最近的结点,称为最近共同祖先。例如,结点8和结点11的共同祖先是1和2,但它们的最近共同祖先是2,编程求解最近的共同祖先。
项目小结
函数是C语言的基本组成单位,任何复杂的C程序均由函数构成。每一个C程序有且仅有一个main()函数,而且总是从main函数开始执行的,调用其他函数后最终都会返回到main()函数结束,而不论main()函数在程序中的位置。可以将main()函数放在整个程序的最前面,也可以放在整个程序的后面,或者是放到其他函数之间。
函数是C语言中的重要概念,也是程序设计的重要手段。使用函数不仅可以提高程序设计的效率,缩短程序的开发周期,还有利于扩充和维护。本项目重点介绍了函数定义与调用、函数参数的传递、函数的嵌套与递归调用、变量的作用域于存储类别以及内部函数与外部函数等。在编程过程中,应反复练习函数的使用,在实际应用中,函数的应用是必不可少的,本项目的知识内容是非常重要的,应该牢固掌握。
课后习题
一、单项选择题
1.在C语言程序中,下列叙述正确的是( )。
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义和调用都可以嵌套
D.函数的定义和调用均不可以嵌套
2.在C语言程序中,下列叙述错误的是( )。
A.形参是局部变量
B.不同的函数中,可以使用相同名称的变量
C.在一个函数的内部,可以在复合语句中定义变量
D.main()函数中定义的变量在整个文件或者程序中都有效
3.在C语言程序中,下列叙述正确的是( )。
B.实参和对应的形参共占用一个存储单元
C.形参是虚拟的,不占用存储单元
D.只有当实参和对应的形参同名时才共占用存储单元
4.在C语言程序中,下列叙述正确的是( )。
A.实参可以是常量、变量或表达式
B.实参可以是任意类型
C.形参可以是常量、变量或表达式
D.形参与对应的实参类型要求可以不一致
5.在C语言程序中,简单变量作实参时,它和对应形参之间的数据传递方式是( )。
A.地址传递
B.单向值传递
C.由用户指定传递方式
D.由实参传给形参,再由形参传回给实参
6.下列关于return语句说法正确的是( )。
A.必须在每个函数中都出现
B.只能在除main()函数之外的函数中出现一次
C.可以在同一个函数中多次出现(www.xing528.com)
D.在main()函数和其他函数中都可以出现
7.C语言中规定函数的返回值的类型是由( )。
A.return语句中的表达式类型所决定
B.调用该函数时的主调用函数类型所决定
C.调用该函数时系统临时决定
D.在定义该函数时所指定的函数类型所决定
8.如果要限制一个变量只能被本源文件中的函数使用,必须通过( )来实现。
A.静态内部变量B.外部变量声明C.静态外部变量D.内部变量声明
9.以下叙述中错误的是( )。
A.在C语言中,调用函数中,只能把实参的值传送给形参,形参的值不能传送给实参
B.在C语言的函数中,最好使用外部变量
C.在C语言中,形参只是局限于所在的函数
D.在C语言中,默认的函数存储类型为extern
10.在一个源文件中定义的外部变量的作用域为( )。
A.本文件的全部范围
B.本程序的全部范围
C.本函数的全部范围
D.从定义该变量的位置开始至本文件结束
11.若有以下函数调用语句:
fun(a+b,(x,y),fun(n+k,d,(a,b)));
在此函数调用语句中实参的个数是( )。
A.3 B.4 C.5 D.6
12.以下程序的运行结果是( )。
A.7 B.6 C.5 D.4
13.以下程序的运行结果是( )。
A.8,17 B.8,16 C.8,20 D.8,8
14.以下程序的运行结果是( )。
A.7 7 7 B.7 10 13 C.7 9 11 D.7 8 9
15.以下程序的运行结果是( )。
A.12,2 B.不确定C.5,25 D.1,12
16.以下程序的运行结果是( )。
A.360 B.3600 C.1080 D.1200
二、填空题
1.运行以下程序,输入100,其输出结果是_________。
2.以下程序的运行结果是_________。
3.以下程序的运行结果是________。
三、编程题
1.编写一个程序,计算任意输入的整数的各位数字之和。
2.编写一个程序,验证哥德巴赫猜想:任意一个不小于6的偶数可以表示为两个素数之和,例如:8=3+5,10=5+5,12=5+7,…
3.用递归方法求12+22+32+…+n2。
4.编写一个程序,完成十进制整数到任意进制的转换。
5.编写一个递归程序,实现将一个整数进行逆序输出。
6.编写一个程序,从键盘输入一串字符,逆序输出。要求采用递归函数实现。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。