《C语言程序设计基础》课件第7章.ppt
实训任务十三熟悉函数的功能及其使用方法
实训项目1围绕以下问题,开展讨论,给出答案。
(1)程序设计中模块化程序设计的内涵意义是什么?
(2)?C语言中如何定义函数?定义函数要考虑那些问题?
(3)?C语言中如何根据功能模块设计函数?
(4)?C语言中如何实现函数调用?
(5)?C语言中变量的作用域含义是什么?如何实现参数传递?
(6)?C语言中如何声明一个函数?如何引用系统函数?
(7)?C语言中什么是函数的嵌套调用?
(8)?C语言中什么是递归调用算法以及如何用函数实现?
实训项目2分析以下问题,从每一题的4个备选项中选择一个正确项。
(1)?C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递是()。
A.地址传递
B.由实参传给形参,并由形参传回给实参
C.值传递 D.由用户指定传递方式
(2)在C语言程序中()。
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义和调用均可以嵌套
C.函数的定义和调用均不可以嵌套
D.函数的定义不可以嵌套,但函数的调用可以嵌套(3)?C语言中形参的默认存储类别是()。
A.自动(auto) B.静态(static)
C.寄存器(register) D.外部(extern)
(4)以下函数调用语句中,含有的实参个数是()。
fun(x+y,(e1,e2),fun(xy,d,(a,b)));
A.3 B.4
C.6 D.8
实训项目4分析程序,在下划线处填写适当的语句代码,使程序能够正确运行。
(1)下面程序的功能是:在一个函数中按从小到大的顺序对传入的数组进行排序,在主函数中,调用这个函数,并输出结果。
数组原始数据为23,8,5,12,34,21,45,59,38。
(3)程序功能:在一个函数中将两个字符串进行连接。在主函数中输入这两个字符串,并输出连接后的结果。实训任务十四学习模块化程序设计的方法
完成以下项目问题的程序设计,并上机调试,使其实现所要求的功能。
实训项目1编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格或其他字符的个数,在主函数中输入字符串以及输出上述结果。
实训项目2编写一个函数,将一个给定的二维数组(3×3)转置,即行列互换,在主函数中定义二维数组,初始化原始数据,以矩阵形式输出转置后的数据。
实训项目3编写一个函数,求两个整数的最大公约数。在主函数中输入两个整数,调用这个求最大公约数函数,并输出结果。
运行结果:
分析:在主函数中,a既在局部变量的作用范围,又在全局变量的作用范围,此时a用局部变量的值,b用全局变量的值,所以函数调用是max(8,5)。实参值传递给形参a,b,在max函数中形参起作用,全局变量a,b不起作用,调用返回值为8。(2)如果想在定义点之前的函数中使用外部变量,C语言是允许的,但要在该函数中用“extern”作外部变量说明,表示该变量在函数外部定义,在本函数内部使用。声明的一般形式为
extern类型说明符变量列表;
这样就扩大了外部变量的作用范围。外部变量说明和外部变量定义的作用意义是不一样的。外部变量定义在函数之外,只能有一次。而外部变量说明是在要使用的函数之内,可以有多次说明。系统根据外部变量定义给变量分配存储单元,而不是根据外部变量说明。
运行结果:
分析:在main函数中,x既是局部变量又是全局变量,应取局部变量的值5,y是全局变量,在main函数中有效,所以函数调用为mul(5,4)。在mul中,对外部变量z作了说明,可以引用z的值。因此函数返回值为x*y*z=5*4*5=100。
(3)由于全局变量能被一个文件中的各个函数引用,因而在一个函数中改变全局的值,在其他函数中可以引用改变后的值,相当于将一个函数中的值传递到其他函数中。所以,利用全局变量就增加了函数间数据传递的通道。利用外部变量提高函数间数据传递能力的同时,也会给程序设计带来一些负面影响:
(1)会使程序的通用性降低。因为如果将一个函数移植到另一文件中,还需要将相关的外部变量及其值一并移植。若所移植的外部变量与文件中的变量同名,就会出现问题,从而降低程序的通用性和可靠性。
(2)使用全局变量会使程序清晰性变差。因为在分析程序时,很难把握全局变量的动态值。
(3)全局变量在程序运行的全过程中一直占据存储单元,过多使用全局变量,不利于存储器资源的有效利用。
综上所述,在程序设计中,只有非用不可时才定义全局