你好, 欢迎回来｡
在这节课上,
我想 通过演示解决方案来解决我们以前遇到的难题,
是创建一些函数, 主要是GCD函数和 耦合函数､ 绝对值函数和平方根函数｡
我将创建一个项目,
我可能会给项目函数命名 关闭我现有的项目｡
会是另一个 控制台应用程序｡
我们还没有真正 库或任何图形编程｡
这将是如何 一些功能｡
通常情况下, 您需要 好名字,
但这只是为了学习的目的｡
所以我们就 提供通用函数｡
如果这是一个GCD项目, 我会 写出最大公约数
但首先我们要做是 我们要实施我们最大公约数计划
这个函数 求两个非负整数之间的最大公约数 值,
然后返回结果｡
我们应该提供功能 这样我们就可以调用它们,
函数中的任何位置｡
那就这么办吧｡
对于第一个函数, 是函式宣告｡
为什么我们要做一个函数
声明, 以便我们可以在程序中的任何位置调用它｡
其实我们不必 在调用main函数时在其上面实现该函数｡
这是很好的练习
很容易清楚地看到程序中发生了什么 函数声明｡
这将返回一个int｡
所以请记住, 函数头的第一个 您要做的就是指定要返回的数据类型｡
GCD将返回一个int值｡
它将接着命名 即GCD函数｡
然后括号里是 传递到GCD的数据｡
这将是 也可以是整数｡
我们将传递两项数据｡
所以我们用逗号分隔它们｡
我们指定的数据类型 每个变量和变量名｡
我只想说u和V｡
然后我用分号 结束函数的定义｡
现在, 我可以在下面定义函数 我仍然可以调用它而不会遇到任何问题｡
所以现在当你想要
定义函数实现它, 你做同样的函数 标头int返回值GCD
它必须与 类型声明｡
你可以给它起个别的名字 比如名字的int x, 但我们要保持一致｡
我们只需要输入int v｡
我们知道是函数 因为有方括号来定义主体｡
这是实现代码｡
实际的算法 GCD相当简单｡
你要做的就是写一个循环 并且遍历循环并基于余数查看临时值｡
所以我将创建一个本地 GCD函数中变量
我们怎么知道是本地的 括号里的是12到14
此变量不可访问 在主函数中｡
它只在这个街区附近｡
在这里我只想 调用temp, 因为它是本地｡
我现在还要创建一个循环｡
我将使用while循环｡
我的while循环 直到v, 这是我们最大的公约数
请记住, 最常见的 除数有两个参数｡
它需要一个参数｡
基于这两个参数 它需要创建一个算法来找到最大公约数｡
所以如果我们想找到
除数, 我们必须确保v不等于 零, 我们的第二个参数｡
这只是标准的 部分算法｡
而v不等于 到零,
我们要给循环加上括号
我们要做的是
首先将temp赋值给u mod v的模值｡
然后我们将设置u 等于v, 我们将v设为temp｡
然后我们想回到 数据｡
那么, 我们如何从 函数？
我们使用了return关键字, 我们只返回 要返回的数据｡
在这种情况下, 我们希望返回u｡
记住如果这个函数 未返回任何数据,
则必须将类型更改为void｡
然后我们就可以 有一个没有数据的回报｡
但这是返回数据｡
所以我们必须匹配起来｡
这是我们 再说一遍｡
如果我们不传递数据
我们可以将void作为参数, 也可以 保持它们为空,
这意味着函数不接受任何数据, 但我们传递了两个变量｡
变量u和v是 GCD函数的局部变量｡
我们可以在函数中使用它们｡
这就是我们正在做的｡
这些都是函数的特征｡
返回值､ 使用局部变量传入,
然后返回数据｡
所有这些事情都要注意在 用括号括起来的语法, 然后在顶部加上声明｡
现在我们要试着 请测试此函数｡
所以我们想测试一下 各种不同的东西｡
让我们继续并记住 函数返回数据, 因此我们可能需要在
我们就称之为结果｡
我们可以把它初始化为零｡
然后我们想 基本上就是调用函数｡
如何调用函数？
我们只需要指定函数 名称, 后跟传递给它的数据｡
因为此函数返回 data, 我会说result equals,
然后是函数名.
函数名为GCD｡
我会以150 我第一次考试的成绩是35分
我还要做另外两个测试 传递不同的数字, 但我想做的是
打印出返回结果的数据｡
所以我会说printf 150和35的GCD是百分比换行, 然后结果｡
好吧, 我知道了 所以第10行很重要｡
我们正在从GCD获取数据 我们将它赋给一个变量｡
我们可以调用函数 150和35这两个常数｡
我们还可以传递变量｡
我们调用函数的方式
传递给它的数据在括号内, 我们将值 以逗号分隔, 分号在最后｡
我想做多项测试｡
我将复制第10行 11, 然后输入其他数据｡
我将输入1026 和405, 然后还有83｡
实际上我们可以做的是 而不是返回变量,
我们实际上可以把它放在
调用printf中的函数并打印出来 我们甚至不需要保存它｡
所以我们可以说GCD 83, 240.
我们必须改变什么
我们在这里用硬编码的值打印出来 1026､ 405, 然后还有240和83｡
让我们继续进行编译｡
让我们确保 没有错误或警告｡
我们没有错误和警告｡
那我们开始吧｡
当我们运行它时, 我们应该看到
某些数的最大公约数的三倍｡
所以我们看到150和35的GCD是5｡
1026和405的GCD为27｡
而83和240的GCD为1｡
最大公约数表示 这两个数字的因子,
最大的因子是什么
所以5除以35, 150除以5｡
这是最高的一个｡
27也是405和1026 是两者中最高的一个｡
看起来很有效｡
我们还介绍了 传递数据和返回数据｡
现在我们要练习几个 其他的一些东西,
比如算法和解决问题｡
让我们创建另一个函数 称为绝对值｡
绝对值函数 返回一个浮点数并获取一个浮点数｡
这将是一个 非常简单的功能｡
所以我们要宣布 第五行的函数｡
我们会说绝对浮点数 值, 这是一个名称后面跟参数, 我们只是
浮点数x, 然后以分号结尾.
同样, 请注意函数
声明､ 返回值､ 参数指定数据类型 然后输入函数的名称｡
我们可以继续定义 这个函数位于GCD函数的下面,
它会非常简单
我们用类型定义函数 名称,
然后是参数, 就像 声明,
不同之处在于现在我们使用方括号来开始代码块｡
这很简单因为我们要做的 就是检查传递的参数是否小于零｡
如果它小于零, 那么 我们只需要给它赋一个逆函数,
也就是a-x
所以如果它是负值 它会乘以一个负,
得到一个正
我们想把这些数据返回｡
所以我们要返回x｡
现在我在
我没能提供一个例子 如果您始终返回数据｡
因为我们可以有一堆 if语句, 我们可以在每个if语句中返回｡
因此, 您的函数可以 如果在if或循环中,
就有很多return语句｡
然后你就可以 在底部有一个｡
问题是 真的很难理解｡
如果需要返回不同的 基本上, 代码的一部分只是将数据存储在变量中
并在底部返回｡
但这里这是一个简单的函数｡
我们只是返回一个值｡
让我们继续尝试使用 这个函数很好, 它有浮点数,
所以我们可以 可以将其用于整数和浮点数｡
所以我要创造 我们要传递的几个变量｡
我也要去 以创建整数｡
我会这么做的 在我的主干道上｡
我将创造 F1 F2 F3的浮点数｡
我将创建一个整数I1｡
我将创造另一个 用于存储结果的变量, 但必须是浮点型｡
所以我必须创造
另一个变量, 这里是result绝对值, 我把它初始化为0｡
0.
现在我将调用 功能并打印结果｡
所以我要复制 请在此处粘贴一些代码｡
我可以调用函数并存储 返回的数据, 或者我可以把它传递给printf函数｡
我可能想在这里做一些评论来测试绝对值函数｡
当您在单个 这条线, 它稍微突出了一点｡
所以我在这里贴了一堆调用 值函数, 然后显示一些结果｡
24小时后, 我打电话给 f1绝对值
记住, f1是浮点数｡
等于-15｡ 5.
我将格式化 结果并打印出来｡
然后我也 输出f1｡
所以我们要看看 调用函数时,
结果会发生更改｡
所以我要打印出 调用函数的结果, 然后返回原始值｡
这将告诉我们 一切都变了｡
如果最初是负的 并变为正值｡
在多个 多个测试的行｡
然后在第37行,
唯一 这里的不同之处在于不是将值存储在变量中, 我要把它打印出来｡
所以我必须改变结果 此处为右侧变量｡
所以让我们这样做｡
所以在这里, 我想做那个｡
当我最初编写 程序, 我把它们分开写｡
所以希望我没有犯错｡
把我需要的都换掉 这应该就行了｡
其他的都不是 打印所有变量的结果,
只打印第26行的变量｡
否则, 我们只是 显示结果｡
第一个只是说明 它的变化是因为f1是负值｡
好吧, 让我们来建造这个｡
我们没有错误或警告｡
我们希望的输出 注意只是绝对值输出｡
所以最好 实际上添加了一些换行符｡
在我们展示完最后一个之后, 让我们添加几个换行符｡
更容易阅读和运行｡
现在我们看到结果是15 5.
所以它实际上改变了 从负到正, 因为f1最初是15｡
5.
其他的结果 也是正值｡
最后一个print语句未打印 输出结果时,
它只输出函数返回的值｡
看起来起作用了
最后一个我想 定义是平方根函数｡
这将是一个 计算数字的平方根｡
如果一个否定的论证是 通过,
则将显示一条消息并返回-1｡
因此, 让我们定义 这个函数作用是浮点平方根,
它接受一个任意名字的浮点数｡
而平方根实际上是 以使用绝对值函数｡
所以我们可以在上面定义它 并且由于函数声明的原因仍然使用它｡
让我们来定义它 它需要一个浮点数
所以我们在 定义这些函数､ 返回参数的数据类型､
括号｡
我们将创建一对 本地变量｡
这些只能是 在块内部访问｡
这会帮上忙的 我们的平方根算法
你会注意到在第59行, 我创建了一个常量变量｡
我们还没谈过这个, 但这只是创建常量的一种方法,
而不是使用define｡
我们创建了一个名为 ε, 它是｡ 001,
它有助于我们的平方根计算 确保它在给定范围内｡
我们有一个猜测是1｡ 1和 绝对值声明｡
我们实际上不需要提供 声明, 因为我们在顶部定义了它,
所以我可以去掉它.
现在记住我们必须 检查参数, 我们要进行参数验证｡
如果该参数小于零, 我们要打印一条注释并返回一个负值｡
所以如果x小于零, 打印 将负参数输出为平方根,
并返回负一｡
这就是我们要做的
多个返回值, 我将向您展示如何返回一次 放在最下面｡
否则, 我们有我们的 平方根算法｡
我不打算解释 算法, 因为它与我们学习内容无关
但基本上, 要找到正方形 一个数的根,
我们通过乘以它的绝对值 然后在x中减去｡
所以猜测就是我们要去猜测｡
所以最初我们要猜测
然后检查这是否是算法, 检查它是否在一定范围内｡
如果是的话我们就 把我们的猜测值除以2
是我们回归的猜测｡
所以在最底层, 我们 会说还猜｡
所以我们使用 函数绝对值
它的定义在我们下面, 但是 我们的声明在顶部,
这很好
有一件事是 多个return语句｡
这是完全法律的的, 但它应该 因为它更难搞清楚这个到底是怎么回事｡
所以我在这里要做的是 可能会将这个负数存储在guess以外的变量中, 但是
让我们来看看我们该怎么做｡
所以我猜 初始化为1｡ 0, 我们返回的是负1｡
我可能会再创造一个 变量名为float返回值
我们可以将其设置为0｡ 0.
然后在归还之前
因为这是从数学函数中跳出来的 假设返回值等于-1｡
0而不是返回｡
然后我可以检查一下然后说 如果传回值不相等负1, 则为｡
0, 因为我不 如果我已经有了无效的号码, 一个无效的数字, 我可以用if语句将其封装起来｡
在while语句中, 我可以说返回值等于guess｡
这样我就能返回正确的 如果它是一个有效的条目｡
然后他没有回来 我所做的就是返回返回值｡
这段代码更简洁
因为它只在底部返回一次, 而且更容易跟踪｡
所以返回值要么是负数 一个是无效的参数或者是实际的正方形 如果不是无效参数,
则返回root｡
我们甚至可以 这很简单, 实际上甚至不检查返回值
在这里可能会更容易只是说别的,
使 原始if的else部分｡
所以如果是正数 甚至会使它更简洁, 因为您没有if语句｡
现在我们需要测试一下｡
让我们来测试一下｡
我们就打电话给 功能很多次｡
我们会说测试平方根｡
我不会做任何 这里印刷精美｡
我会确保我 我可以添加一堆换行符, 这样更容易阅读｡
按下插入按钮｡
好吧, 我会的 所以现在我会做一些
printfs, 我将在其中发送一些有效数据和无效数据 我会以同样的方式格式化它｡
这么说吧第一个电话 是有效平方根的平方根｡
首先我们要检查 用负数表示｡
所以我们就说负3 应该会打印出错误｡
否则, 我们将测试它 一些有效的数字｡
所以我们会说16的平方根 我们只需要传递一个int, 它们就会被转换, 我可能会收到一些警告.
我可不想 警告, 我们会做165｡
现在, 让我们运行并测试它｡
让我们满怀希望, 它会编译｡
我确实把float拼错了｡
现在当我运行它的时候, 希望, 我们会得到很好的平方根输出｡
所以这里我们有一个负的｡
我们实际上打印出了底片 辩论得分, 这很好｡
然后其他的是, 我 正确的平方根｡
所以看起来 函数工作得很好｡
我们计算了16的平方根 是4, 25是5, 9是3,
165是12 85.
所以我算错了｡
我在想 15乘以15等于225｡
所以如果我在这里放225 返回15的平方根｡
我将提供这个源代码 让您可以分析它, 但要了解函式宣告, 了解如何定义具有返回类型和
传递数据的参数,
了解局部变量, 了解如何 在底部只返回一次｡
算法本身 并不是那么重要｡
我希望这对你有帮助｡ -谢谢—谢谢