模块化程序的组成
编写一个规模较大的程序,可按其功能划分为若干相对独立的模块。
好处:
- 程序开发更易控制
- 利于软件重用
- 避免重复代码
- 容易调试和维护
每个模块由一个函数实现
函数的概念
- main()函数
- 由多个函数组成的程序
- 程序的执行顺序
- 库函数(标准函数)
- 标准输入/输出函数
- 数学库函数
- 字符串处理函数等
- 用户定义函数
函数的定义
1.函数定义的一般格式
一个函数由函数头和函数体两部分构成。
- 函数头中通常包括函数名,形式参数表以及函数的返回值类型,其中形式参数表必须包含在一对圆括号中。
- 函数体-由一对花括号扩起来的语句序列组成。
2.函数值类型-即函数的返回值类型
- 返回简单类型 如:int、long 、float、double、char等
- 返回结构类型
- 返回指针类型
- 返回引用类型
注意:如果函数无任何返回值,这时函数的返回值类型应标
记为void。void类型称为无类型或空类型。
3 形式参数表(即形参表)
函数的参数表用于实现函数间的数据联系。形参的说明格式:类型 形参名
- 当有多个形参时,各参数说明之间用逗号分隔,如:
- 类型 形参名1, 类型 形参名2,…,类型 形参名n
注意:每个形参必须同时给出形参的类型和名称
如:int max(int a,b),作为函数首部定义是错误的。
因为形参b缺少类型说明符,即使与a类型相同,但作为形参说明也不能省略类型符int
形参的说明
- 定义函数时需考虑设置形参,形参的个数及类型根据需要
设定(也可以没有参数,称为无参函数)- 形参可以接收主调函数传递的实参的值。在函数中对形参
进行处理,并将处理结果返回到主调函数- 形参是在函数调用时分配存储空间,同时接收实参的值。当函数执行结束后,系统将自动释放形参所分配的存储空间。因此,形参属于函数的局部变量,只能在该函数中使用
- 当形参为引用类型或指针类型时,利用形参不仅可以访问实参的值,还可以改变实参的值
4. 函数体
- 由{ }括起来的语句序列构成,是实现函数功能的主体
- 函数的编写过程类似于主函数。在函数中可以调用其它函数
- 在函数体中,使用return语句返回函数执行的结果
- 对于无返回值的函数,也可使用return;将控制返回到主调函数
注意:在一个函数中允许出现多个return语句,但在函数执行期间只能有一个语句起作用。在函数体的最后位置,一个无返回值的return;语句可以省略
例子
例如:编写半径为r的圆面积的函数area。
这是一个求值的函数,函数中设置一个形参r,用于接收圆的
半径。将参数类型和返回值类型定义为double。
double area(double r)
{
double s;
s = 3.14 * r * r;
return s;
}
例如:写一个函数,将给定的一个字符连续显示n次。该函数实现一个操作功能,无须返回结果值;但需设置两个形参,一个接收显示的字符(使用char),另一个接收显示的次数(使用int
void print_char(char c, int n)
{
for(int i=0; i<n; i++)
{
cout << c;
}
cout << endl;
}
函数的声明
- 在C++中,程序编译的单位是源程序文件(即源文件),一个由多个函数构成的程序可以组织存放在一个或多个源文件中
- 在源文件中,函数之间的排列顺序没有固定的要求,但要满足**“先定义后使用”**的原则
- 对于标准库函数的使用,在程序开头使用
#include
命令将所需的头文件包含进来即可 - 对于自定义的函数,要么在调用之前定义,要么在调用之前作函数声明
函数的声明是指在函数被调用之前对函数的类型、名称以及参数等信息所作的说明。函数声明的格式如下
类型名 函数名(类型1 形参1, 类型2 形参2,…);
或
类型名 函数名(类型1, 类型2,…); //可省略形参
在形式上就是在函数定义的首部后加分号(;)构成。函数声明说明了函数所采用的形式,称为函数原型。
举例
#include<iostream>
#include<cmath>
double area(double a, double b, double c);
using namespace std;
int main()
{
double a, b c;
cout << "请输入三角形三边长" << endl;
cin >> a >> b >> c;
cout << "面积为: " << area(a, b, c) << endl;
return 0;
}
double area(double a, double b, double c)
{
double p, s;
p = (a+b+c) / 2;
s = sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
声明:一般在头文件里,对编译器说:这里有一个函数叫function() 让编译器知道这个函数的存在
定义:一般在源文件里,具体就是函数的实现过程 写明函数体