计算机程序设计c++ 5:问题的模块化求解

模块化程序的组成

编写一个规模较大的程序,可按其功能划分为若干相对独立的模块。
好处:

  • 程序开发更易控制
  • 利于软件重用
  • 避免重复代码
  • 容易调试和维护

在这里插入图片描述

每个模块由一个函数实现

函数的概念

  • 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() 让编译器知道这个函数的存在
定义:一般在源文件里,具体就是函数的实现过程 写明函数体

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值