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