函数
概述
模块化程序设计
基本思想
将一个大的程序块功能分割成一些小模块
特点
- 各模块相对独立、功能单一、结构清晰、接口简单
- 控制了程序设计的复杂性
- 提高元件的可靠性
- 缩短开发周期
- 避免程序开发的重复劳动
- 易于维护和功能扩充
开发方法
自上而下,逐步分解,分而治之
C是模块化设计语言
C程序结构
C程序
源程序文件1
源程序文件i
源程序文件n
预编译命令
函数1
函数n
说明部分
执行部分
- C是函数式语言
- 必须有且只能有一个名为main的主函数
- C程序的执行总是从main函数开始,在main中结束
- 函数不能嵌套定义,可以嵌套调用
函数分类
从用户角度
- 标准函数(库函数)由系统提供
- 用户自定义函数
从函数形式
- 无参函数
- 有参函数
使用库函数时应注意
- 函数功能
- 函数参数的数目和顺序,及各参数意义和类型
- 函数返回值意义和类型
- 需要使用的包含文件(头文件)
函数的定义
一般格式
函数类型 函数名(形参类型说明表)
{
说明部分
语句部分
}
函数类型
- 函数返回值类型:int,double,float,char…
- 缺省int型
- 无返回值 void
例 无参函数
printstar()
{ printf("************\n");}
或
printstar(void)
{ printf("************\n");}
例 有参函数
int max(int x,int y)
{
int z;
z = x>y?x:y;
return z;
}
空函数
dummy()
{}
函数的调用与返回值
返回语句
return (表达式);
或
return 表达式;
或
return;
功能:是程序控制从被调用函数返回到调用函数中,同时把返回带给调用函数 说明
- 函数可有多个return语句
- 若无return语句,遇}时,自动返回调用函数
- 若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换——函数调用转换
例 函数返回值变量类型的变换
max(float x, float y)
{
float z;
Z=X>y2x:y;
return(z);
}
main()
{
float a,b;int c;
c=max(a,b);
printf("Max is %odln..c);
}
此例中虽然变量C定义为整型,但函数max()的返回值Z为浮点数,所以C的变量类型也转化为浮点数
函数的调用形式
函数名(实参表)
说明:
- 实参与形参个数相等,类型一致,按顺序一一对应。
- 实参表求值顺序,因编译系统而定,(Turbo C自右向左)
函数类型说明举例
函数参数及其传递方式
形参与实参
- 形式参数:定义函数时函数名后面括号中的变量名
- 实际参数:调用函数时函数名后面括号中的表达式
说明
- 实参必须有确定的值形参必须指定类型
- 形参与实参类型一致,个数相同
- 若形参与实参类型不一致,自动按形参类型转换—函数调用转换
- 形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放
参数传递方式
值传递方式
方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值 特点:
- 形参与实参占用不同的内存单元
- 单向传递
地址传递
方式:函数调用时,将数据的存储地址作为参数传递给形参 特点:
- 形参与实参占用同样的存储单元
- “双向”传递
- 实参和形参必须是地址常量或变量
函数的嵌套和递归调用
|