C语言程序设计基础

刘新国

1

第五章 函数

结构化程序设计(Structured Programming)

将复杂程序分解为若干个简单的模块,用函数进行实现

模块之间相对独立,通过参数进行调用

C语言中的函数

众多函数是平等的兄弟关系

函数main是第一个被执行的函数

函数之间通过调用结合在一起

学生成绩统计程序

学生成绩统计程序的层次结构图

3

一、函数是什么?

函数是指完成一个特定工作的独立程序模块。

库函数:由C语言系统提供定义

如scanf()、printf()等函数

自定义函数:需要用户自己定义

如计算圆柱体体积函数cylinder()

main()也是一个函数,C程序有且仅有一个main()

函数定义

/* 计算圆柱体体积 */

double cylinder (double r, double h)

{

double result;

/* 计算体积 */

result = 3.1415926 * r * r * h;

/* 返回结果 */

return result;

}

二、函数的定义

函数类型 函数名( 形式参数表 )

{

函数实现语句

}

函数类型:返回值的类型

例如void、int、float,等等

如果返回类型不是void,必须使用return语句返回函数值

形式参数表:

类型1 参数名1,类型2 参数名1,…,类型n 参数名n

不能把cylinder的形式参数写作:double r, h

double cylinder (double r, double h)

{

double result;

result = 3.1415926 * r * r * h;

return result;

}

指出函数类型、函数名、形参、函数头、函数体、返回值?

double cylinder (double r, double h)

{

double result;

result = 3.1415926 * r * r * h;

return result;

}

无结果的函数

函数也可以完成一系列操作步骤,不返回任何运算结果。

void 函数名(参数表)

{

函数实现语句

}

void不可少,否则默认为int

可以没有return语句

可用return提前结束函数(一般是在分支语句中)

三、函数的调用

定义一个函数后,就可以在程序中调用这个函数

调用标准库函数时,在程序的最前面用

#include

命令包含相应的头文件

调用自定义函数时,程序中必须有相应的函数定义。

函数调用的形式

函数名( 实际参数表 )

实际参数表与形式参数表对应

可以是常量、变量、表达式

返回结果的函数调用(使用返回值)

volume = cylinder(radius, height);

printf("%f \n", cylinder(radius, height));

无返回结果的函数调用(完成操作)

pyramid(5);

函数调用的过程

计算机在执行程序时,从主函数main开始执行

如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后,将返回主函数。然后再从原先暂停的位置继续执行。

在函数中,如果执行完所有语句或者执行到return语句,那么将返回主函数

分析函数调用的过程

#include

int main( void )

{

……

volume = cylinder (radius, height );

……

}

double cylinder (double r, double h)

{

……

return result;

}

/* 调用函数 */

/* 实参形参 */

/* 执行函数中的语句 */

/* 返回调用它的地方 */

函数调用的参数传递

函数定义时的参数被称为形式参数(简称形参)

double cylinder (double r, double h);

函数调用时的参数被称为实际参数(简称实参)

volume = cylinder (radius, height);

实参形参

在参数传递过程中,实参把值复制给形参。

形参和实参一一对应

数量、类型、顺序

实参:常量、变量或表达式

形参:变量,用于接受实参传递过来的值

函数结果返回

函数结果返回的形式:

return 表达式;

return (表达式);

对于void类型的函数,表达式为空

函数返回的两种情况

完成运算,将结果返回给主调函数。

只是完成工作,无需返回结果给主调函数

函数类型为vo