你好, 欢迎｡
我们要开始一个新的部分｡
我们的部分是基于函数的｡
所以我们将讨论一些 函数的基础知识｡
函数是自包含的
为完成特定任务而设计的程序代码单元, 这是一个高层次定义｡
功能基本上是 您可以调用它来帮助您减少代码的重复｡
但它的作用是
独立于代码本身, 它只有一些任务 它所要达到的目标｡
语法规则将 定义函数的结构以及如何使用它｡
所以取决于什么程序 语言,
函数定义可能会有所不同
对于c, 我们将讨论 关于c的特定规则｡
大多数编程语言都支持 函数的概念, 我会告诉你它的优点
以及为什么支持它们｡
c中的函数与 子程序或其它编程语言的过程｡
所以你经常会听到 术语子例程和过程, 与函数是一样的｡
独立的单元, 用于执行 你可以调用的代码｡
某些函数会导致 要执行的操作｡
所以我们很熟悉 功能｡
我们研究了 函数,
该函数将输出显示到屏幕上, 行动, 为你做一些事情｡
我们也观察了 在从键盘获取输入的scanf功能处｡
再一次, 它做了另一个动作｡
但其他功能 实际上可以找到一个值供程序使用｡
例如当我们研究弦时 和字符数组, 我们将学习字符串的函数
操纵和改变事物｡
有一个特别的功能 这将告诉程序员如何
某个字符串的长度｡
它不执行操作 只会把信息反馈给你｡
所以函数将执行 任务,
具体取决于您在
程序, 它要么会导致一个操作, 要么会修改一个 程序值或返回一个值或告诉您一些状态信息｡
功能优势｡
我们将使用函数 因为它有很多优点｡
函数允许 分而治之的策略｡
所以如果你写下
去写一个中等大小的程序或者一个大程序 真的很难维持｡
这很难测试, 如果您有一个大型函数, 请调试并查找和修复任何错误｡
所以, 打破常规,
这样做 分而治之的策略会让我们更容易 查找并修复代码中的错误｡
你能想象一个c程序 我只有主函数, 里面有5000行代码｡
我们也不知道 来解决这个问题｡
这是一个非常非常糟糕的组织｡
你没有任何凝聚力 你就像是一头扎进去试图解决问题｡
所以我们要用函数｡
分而治之基本上意味着 任务可以被划分为若干独立的子任务｡
它降低了整体 代码的复杂性｡
您可以创建单独的函数
然后您甚至可以创建更多的函数来划分 将子任务分解为更小的子任务｡
每次创建这些附加的 功能, 降低了复杂度｡
你的目标应该是 创建这些函数并使用分治法 策略是使您的函数尽可能具有内聚性｡
这意味着要确保 每个函数只做一个任务, 没有一个函数做5
不同的任务或10个不同的任务｡
如果您编写一个读取以下内容的函数
从键盘输入, 让它从键盘读取输入, 不要 让它检查字符串或显示输出或类似操作｡
函数必须很小, 并且 它们需要非常有凝聚力｡
但是各个击破 策略真的很好, 因为它降低了复杂性｡
而不是有一个主要的功能 只要5000行代码,
你就可以有很多很多的函数 正在执行特定的任务, 您可以非常快速地识别它们｡
所以函数会 减少代码的重复｡
当您减少重复时 它可以保存您在编写､ 测试
和调试代码｡
它也会重新减少 源代码的大小｡
为什么函数会减少 因为如果你有一个任务而不是去做 一遍又一遍地完成任务, 一遍又一遍地编写相同的代码
然后再一次将任务封装到函数中 调用该函数,
每次调用该函数时, 该函数都会为您执行此操作
没有任何重复｡
如果你必须完成某项任务
在程序中多次调用, 则只需编写适当的 就像我提到的｡
你不需要 多次编写代码｡
这样程序就可以使用 在需要时发挥作用｡
你也可以用同样的 不同程序中的函数, 这就是库的组成部分｡
我们一直在做,
我们一直在使用printf函数, 它来自 标准输入输出库｡
这只写过一次 我们一遍又一遍地引用它｡
如果这个函数不存在
必须将该函数的实现放在我们的 然后不断重复｡
所以功能可以保存很多
它们可以减少您的源代码, 反复使用它们｡
所以它也是一个软件 重用技术｡
它还有助于提高可读性｡
当你模块化你的程序时
当你创建这些独立的函数来 执行特定的任务, 程序变得更有条理｡
就像我提到的, 如果你有一个主 例程,
一个主函数, 里面有很多代码,
它将 要比调用5个函数的主例程更难遵循 这些函数执行特定的任务｡
因此, 它有助于计划的组织｡
它有助于程序维护｡
它更容易阅读, 更容易 以更改或修复任何源代码｡
记住, 维护 阶段是软件生命周期中开销最大的阶段,
这
是你修复bug的地方, 程序已经发布, 在这里您可以添加新功能｡
越能更好地组织 程序就越容易维护｡
所以这个组织 可读性,
这是能够跟踪 你的源代码非常重要, 函数帮助吨.
分而治之法
也允许程序的一部分被开发､ 测试 和调试｡
当你真实的走出去
当你开始编写代码时, 你会注意到 程序是非常非常大
而且有很多人 数百人甚至数千人参与这些项目
当你让这些人
如果您在程序中使用 如果你有一些小的任务, 是独立的｡
你摸的不一样 源代码,
您可以更轻松地执行任务｡
当你这样做的时候 多个人在一个项目上工作,
可以减少整体开发 这又减少了维护成本,
减少了开发成本｡
这些函数也可以重用 这又将减少时间｡
我们再一次用 printf函数, 请重用它｡
但是当你写你自己的用户 定义的函数, 您可以在程序中一次又一次地重复使用它们｡
所以软件重用是一个大的､ 功能优势大｡
当你在想 关于这些功能｡
设计的另一个好处是 你的函数程序就是把它想象成一个黑盒子｡
当你当你 把它想象成一个黑盒子, 你所考虑的只是输入
函数和输出｡
当你专注于 在输出中输入, 它可以让您将设计视为一个整体
然后再开始实施｡
所以一般来说, 函数 让你进入这种思考模式,
专注于设计｡
我提到设计很重要｡
设计是当你开始规划 你的计划, 你将如何组织它,
如何 您将编写代码｡
做好这个计划很重要 甚至在您开始编写代码的实现之前｡
通过思考函数
只考虑输入和输出, 您可以考虑 程序组织方式以及需要创建函数
所以你不用担心 只是在细节上的实现｡
这一点很重要,
因为 在编写代码之前, 您首先要做是思考 设计的时候, 你就不想开始考虑实施｡
很多问题让学生 第一次编写代码时的
就开始实施｡
他们想都不想
问题, 他们不会思考如何解决问题, 他们就开始写代码｡
从来没有一个好的方法｡
当你想写作的时候
代码和函数, 请将其视为输入和输出 它会帮助你进行设计｡
让我们看一些例子｡
我们使用了内置函数, 如 如printf和scanf一样｡
这些都在标准 由c编程语言提供的输入输出库｡
所以我们对 函数是因为我们已经用过了,
但是我们还没有
如何定义函数或如何实际传递函数的详细信息 数据转换成函数, 不是这样的｡
但是使用printf函数, 你应该注意到它确实需要数据｡
您可以将数据传递给函式｡
数据是参数 在函数名后面的括号中｡
我们将有一整个 其他关于参数和参数的讲座来解释它们｡
但在高层次上要明白 您可以将数据传递给函数｡
要明白这一点 在printf函数中｡
printf的第一个参数
传递给它的数据是一个字符串 字面上, 它是双引号内的所有字符｡
我们也有争论
可能有0个或多个变量参数, 返回一系列要显示其值的变量或表达式｡
所以请记住, 如果我们有任何格式
第一个参数中的说明符, 那么我们将在 在随后的参数中｡
所以你能通过 数据到printf函数｡
你也应该注意到 可以接收从函数返回的信息,
则可以将数据返回给您｡
在scanf函数中, 一个 是如何存储数据｡
所以你会通过它 变量, 而该变量的值
使用者在键盘上打字｡
所以我们可以想到 作为函数中的返回值｡
所以函数非常有价值, 因为 它们可以将数据放入其中,
然后从其中返回数据｡
一个函数的编码示例 这只是我们要调用的函数
但这是主要功能｡
我们很熟悉 主函数,
程序的入口点｡
但看看这多好｡
我们调用函数 阅读列表排序和平均｡
我们只有3行代码｡
我们必须去实施那些 函数, 但它使程序更有组织,
因为我们立即 知道这个程序在做什么｡
这个程序将读取
然后对列表进行排序 显示列表的平均值, 并且列表包含浮点数｡
所以它的可读性很强 非常容易维护｡
如果我们有任何错误 程序中,
我们将立即知道如何查找或隔离错误｡
如果bug没有排序, 我们 可以转到排序功能｡
如果bug在平均中, 我们可以使用平均函数, 很容易隔离错误｡
所以当我们实施这些 函数,
我们只是调用它们｡
为了实际实现功能, 您必须在函数体内部编写代码｡
您可以使用 是由c语言实现的, 如printf,
或者您可以创建 您自己的用户定义函数｡
您不必实现
printf函数或库中的任何函数, 则 只实现您自己的函数｡
在前面的例子中 读取列表排序和平均值, 我们必须
必须实现该功能｡
我们必须提供一个函数 头,
实际执行阅读 列表､ 列表的排序和列表的平均｡
我们并不是仅仅通过定义 函数, 我们必须实现它们｡
当您实现
函数时, 您总是希望使用描述性的函数名称 以清楚地说明程序的作用和组织方式｡
在上一个示例中, 我们有一个 这个函数名为read list, 它作用很清楚,
函数名为sort
我们没有把函数命名为x, y或z｡
我们描述了该函数｡
这是同样的事情当 你在描述或创造变量,
有意义的名字｡
如果你让这些函数
它们是通用的, 它们实际上在做一些事情 而且他们使用的是通用数据,
你就可以 在其他程序中重用它们, 就像库函数一样｡
同样, 支持软件重用｡
在接下来的讲座中,
我们将讨论如何定义函数 具体语法,
如何调用函数, 以及如何 传递和返回数据｡
这就是我们要关注的 在接下来的讲座中｡
我还想提一下
我们在每一个 c程序, 这是一个函数
主要功能是一个专
在c系统中可识别的名称, 它指示 程序将开始执行
所有的c程序总是有一个main｡
主要功能可取
数据､ 命令行参数或它 不需要获取数据｡
它还具有可选的 它可以返回的数据｡
你会注意到我们使用 返回0主函数
通常, 当你 希望返回错误代码｡
但我们使用了特定的函数
最重要的功能是主功能和 这也有助于组织代码｡
我们总是知道 程序正在启动,
因为我们只需要找到主程序｡
这是一个高级描述 功能的优点
以及函数到底是什么｡
现在我们想谈谈 关于实施的｡
-谢谢—谢谢