大卫·马兰:所有 没错,所以这是CS50。 而这显然是一个星期五。 而这是一个星期的末端。 所以,你可能还记得,我们不放过​​, 最后一次,有各种各样的悬念。 我们借以揭露这个谎言,没有 不管你被教导成长 向上,1除以10不是在 事实上,0.1或0.100或0.10000。 事实上,如果我们编译这个 计划,因为我们没有昨天,有, 使不精确性,然后 做点,斜线,不精确, 我们了解到,这是什么 1除以10实际上是。 所以这不是真的相当的情况下。 但是,这确实暗示了一些 电脑的基本限制。 事实上,中 我们将要做的事情 今天就来看看为什么这有 事情发生了,有什么意义这有, 人类如何失败 掌握这一些很 严重situations-- 在其结果 已经相当惨烈 和expensive--也 看看我们如何 实际上可以捍卫 针对这些种类的限制。 所以直觉,也许, 为什么是1除以10, 根据我的电脑 这里,不只是的1/10,0.10? 是啊。 你有什么感想? 观众:基数是不同的? 大卫·马兰:该是什么? 呵呵,基数是不同的? 因此,不完全是。 它实际上更多 基本的硬件。 其他的想法? 是啊。 观众:他们 表示数字不同? 大卫·马兰:所以they--权。 他们代表的数字不同。 不准确,很明显。 这样is--好, 不同于什么? 或者从谁? 从我们呢? 观众:是啊。 它们不使用小数 系统[听不清]。 大卫·马兰:OK。 因此,从某种意义上说,他们不 使用十进制系统。 在系统底层, 一切,的确,二进制, 这就是相关的,其实。 但是,它甚至更简单 解释比。 是啊。 观众:他们 只有这么多的位。 他们最多只能存储一定 某种程度上,像小数。 大卫·马兰:是的。 这是什么真正得到它。 事实证明,计算机 通常情况下,将永远只有 使用的信息的有限数量 代表什么。 对? 毕竟,我们只有一个固定的 量的硬盘空间。 我们只有一个固定量 的RAM,或计算机的内存。 如果你只有一个 固定金额的东西, 当然你不能真正计数 到无穷大或任何你想要的数字。 你有种,有 挑选什么范围 值你要支持。 因此,例如,一两个星期 以前,当我们谈到ASCII, 我们谈了8位, 或字节,可以这么说, 最大数我们可以 有8位表示是什么呢? 255。 我们可以表示256个总价值 但如果我们把其中的一个 在0--好了,但如果我们 花其中的一个0, 那么最大的数 是,当然,255。 所以,事实证明,这是 的情况下也一样,在这种情况下。 我们开始谈,最后一次, 有关浮点数字, 来自整数不同,在 他们有一个小数点 并希望一些数字 在这之后,但是它们太。 一台计算机通常只打算 使用32位,也许64位 来表示一个浮点值。 因此,即使我们已经长大了 学习数学和了解 你绝对可以有 数的无限数量 小数点后不 如果你有有限的内存。 你有种,有圆形, 或者挑选哪些 你会数来表示。 所以,你能想到的,从某种意义上说, 这是计算机的最接近 近似​​的值的1/10 它可以得到,只有32左右位。 而且它不只是1/10。 举例来说,如果我改变这 1/3,我们认为这是更简单。 因此,1除以3。 让我保存文件。 让我继续前进,重新编译它。 让我重新运行它。 在这里,显然,三分之一没有0.3 然后3的无限数量 其后。 你有这样的不精确性在最后。 所以,我们人类是正确的,什么 你了解,其实,正确的, 但是我们撞了 针对一些限制。 而我的想法 我们今天会做,是开始 通过看,坦率地说,在 这种悲惨的后果 有时,人类的时候 并不完全实现 针对这一现实,这些限制。 而且我们会看到一系列的小插图 从历史频道的需要 一起来看看如何事情已经出了问题。 这是约8分钟之久, 我们将在这之后回来 看一看在完全相同 还有什么可能出错。 如果我们能昏暗的lights-- [视频回放] -Computers,我们都逐渐接受 经常令人沮丧的问题, 和他们一起去。 错误,病毒,和软件 故障都是小的价格 支付的便利。 但是,在高科技和高速 军事和航天计划的应用, 可以最小的问题 被放大成灾难。 1996年6月4日,科学家准备 启动一个无人阿丽亚娜5型火箭。 它携带的科学 卫星设计 建立精确如何 地球的磁场相互作用 与太阳风。 火箭是专为 欧洲航天局 并从其工厂升空 在法属圭亚那的海岸。 - 和大约30秒后进入 飞行中,他们首先 发现了一些打算错了。 使喷嘴被旋转 在某种程度上,他们真的不应该。 约40秒后进入飞行, 明确了车辆遇到了麻烦, 而当他们提出的 决定摧毁它。 随着一系列安全主任 巨大的勇气按下按钮, 炸毁了火箭之前,它可能 成为危害公众安全。 - 这是处女 阿丽亚娜5的航程, 它破坏了 地方,因为一个缺陷 嵌在火箭的软件。 在-The问题 阿丽亚娜是,有 是一个数字,需要 64位表示, 他想转换 它以一个16位的数。 他们假定数 从来没有将是非常大的, 大多数的这些数字中 64位数字是0。 但他们错了。 一-The无力 软件程序接受 所产生的那种数 另一种是在失败的根源。 软件开发已经成为一个 的新技术非常昂贵的部分。 阿丽亚娜-4火箭一直非常 成功的,那么多的软件 创造这也是 用在阿丽亚娜5。 -The基本的问题是,阿丽亚娜 5增快,加速快。 而且软件早已不是 占了这一点。 火箭-The破坏 是一个巨大的金融灾难, 全因一分钟,软件错误。 但是,这是不是第一次 实时数据转换问题 一直困扰现代火箭技术。 -in 1991,在开始 第一次海湾战争中, 爱国者导弹 经历了类似的一种 数转换的问题。 其结果是,28人, 28美国士兵 被打死,约 100人受伤, 当爱国者,这是应该 以防止传入的飞毛腿导弹, 没有发射导弹。 - 当伊拉克入侵科威特和美国 在1991年年初推出沙漠风暴, 爱国者导弹部署 保护沙特阿拉伯和以色列 从伊拉克飞毛腿导弹攻击。 爱国者是美国,中程 表面对空气系统 由雷神公司制造。 爱国者拦截-The大小, 本身就是约,约20英尺长。 而且它的重量约2000磅。 同时还可以进行about--的弹头 我认为这是约150磅。 和弹头本身, 是一种高爆炸药, 它有它周围的碎片。 弹头的外壳是 设计像鹿弹。 -The导弹 进行,4%的集装箱, 并通过半拖车被运送。 -The爱国者反导弹系统 追溯到现在至少需要20年。 它最初的设计 作为防空导弹 击落敌人的飞机。 在第一次海湾战争, 当战争来了, 陆军希望用它来 击落飞毛腿导弹,而不是飞机。 伊拉克队还是没有 这么多的问题, 但陆军担心飞毛腿导弹。 因此,他们试图 升级爱国者。 -Intercepting敌人 导弹行驶在马赫5 将要进行足够的挑战。 但是爱国者的时候 被冲进服务, 陆军不知道的 ,使得伊拉克修改 他们的飞毛腿导弹几乎是不可能的打击。 - 什么事,是飞毛腿的 要来的,是不稳定的, 他们摇晃。 这样做的原因, 是伊拉克人,为了 让600公里出 300公里的射程导弹, 把重出前弹头 并提出弹头更轻。 所以,现在,爱国者的苦思 在飞毛腿,并且大多数时候, 绝大多数的 时间,它只是由飞毛腿飞。 - 一旦爱国者系统运营商 实现了爱国者偏离目标, 他们引爆了爱国者弹头, 为了避免可能的人员伤亡,如果它 被允许倒在地上。 - 那是大多数人所看到的, 那些大火球在天空中, 和误解为 飞毛腿弹头的拦截。 虽然在夜间 天空,爱国者亮相 要成功地 摧毁飞毛腿导弹,在达兰, 有可能是没有错 关于它的性能。 在那里,爱国者的雷达系统 失去了进入的飞毛腿的轨道, 永不推出, 由于软件缺陷。 这是谁首先发现了以色列人 该系统不再是上, 越大时间差异 成为,由于一个时钟的嵌入式 在系统的计算机。 - 关于前2周 悲剧发生在宰赫兰, 以色列人报 国防部, 该系统是浪费时间, 该后约8小时的运行, 他们注意到,该系统 变得明显不太准确。 国防部回应 告诉所有的爱国者电池 不离开系统 上很长一段时间。 他们从来不说什么很长一段时间了。 8小时? 10小时? 千小时? 没有人知道。 -The爱国者电池 驻扎在军营 在宰赫兰的,其有缺陷的内部 时钟,已经在超过100小时 2月25日的晚上。 - 它跟踪时间精度 约一秒的1/10。 现在1/10秒是 一个有趣的数字 因为它不能 按二进制,没错。 这意味着,它不能 表示,准确地说, 在任何现代数字计算机。 很难相信,但 使用这个作为一个例子。 让我们来数的1/3。 三分之一不能表示 十进制,没错。 1/3是0.333持续了无穷大。 有没有办法做到这一点,有 绝对精度,十进制。 这正是相同种类的 问题发生在爱国者。 该系统运行更长的 更糟糕的时间误差成了。 -After运行100小时,误差 在时间只有一秒钟的约1/3。 但是,在针对一个方面 导弹5马赫旅行, 它导致了跟踪 对600多万米的错误。 这将是一个致命的错误 对于战士在宰赫兰。 - 什么事,是飞毛腿发射是 通过预警卫星探测, 他们新的飞毛腿是 即将在他们的大方向。 他们不知道有人来了。 现在 - 它要由雷达 爱国者系统的组成部分, 保卫达兰,定位和保持 跟踪来袭的敌方导弹。 -The雷达是非常聪明的。 它实际上跟踪 飞毛腿的位置 然后预测哪里 它很可能是, 接下来的时间,该 雷达发送的脉冲输出。 这被称为距离门。 - 然后,一旦爱国者 决定时间已够 传递回去检查下 具体地址为检测对象, 它可以追溯到。 因此,当它回到了错 地方,然后看到没有对象 和它决定,没有 对象,这是一个错误的检测, 和下降的轨道。 传入飞毛腿消失 从雷达屏幕上, 几秒钟后,它 撞上了军营。 飞毛腿杀害28是最后一个 第一次海湾战争期间,人开火。 可悲的是,更新的软件 抵达宰赫兰的第二天。 软件缺陷有 得到修复,闭合 在陷入困境的一章 爱国者导弹的历史。 [结束播放] 大卫·马兰:所以我们就来看看 一些类似的限制,只是有点。 但首先,让我们来 过渡到一些仅供参考的。 因此,埃德蒙顿这个周末,有 将超级部分, 这意味着可以取代 定期的部分,这 将一个星期,因此启动。 看看在CS50的网站 对于这些详细信息。 他们也将被拍摄下来,流 住那些无法参加。 问题1是关于 当然,本已网站, 我们将看看 在只是一点点。 而办公时间也将采取 至周四把这个星期一。 因此,这是最典型 节目中,我们看了最后一次。 这就像最简单 程序,你可以用C写的, 即使这是一个有点大胆索赔。 对? 因为有很多的 似乎复杂此。 所以,让我们快速浏览一下 什么一些这些元件中的 分别为,然后尝试提供 如何的心理模型 这些简单的程序 工作,然后我们将开始 看事情越来越复杂。 因此,这条线在这里,现在强调的, 在黄色的,没有大家说什么,最后一次, 这为我们做? 什么是它服务的目的是什么? 任何人从更远了? 是啊。 观众:[听不清] 大卫·马兰:好。 所以,它给你的访问 为命令,或让我们 给他们打电话的功能,有人 别人写的,被声明, 可以这么说,在一些其他的文件。 所以我们会看到什么.h文件 是对.c文件,最终。 但现在,只知道 该printf的,例如, 是其中已被功能 在其他文件中声明,在某处 否则云计算的硬盘驱动器上 允许我们访问printf和使用 而不必重新发明 那个轮子自己。 同时,主要的。 什么是主要的,上周的模拟? 是啊。 观众:绿旗点击。 大卫·马兰:是的。 划痕的,当绿旗点击。 这就像一块拼图 该踢东西了。 所以同样,做世界 几年前的决定C, 和一堆其他语言, 如果你想编写一个程序, 你的第一个功能 已被调用,主。 而且它有看起来像这样。 但是,我们会回来的, 另一次,是什么,INT, 并且,无效的,意味着在这方面。 就目前而言,花括号样 像划痕的拼图形状 它封装线的一些数字。 而就在电线之间 在这里,这是一个在这里。 printf的是,其目的在一个函数 生活是打印的格式化字符串。 而到格式化的,我的意思是你 可以在占位符值堵塞, 你可以指定多个小数 点,有多少数字打印 后一个小数点等。 和printf,当然,需要一个 以上参数或参数, 否则已知的,更简单地说,作为输入。 所以printf的,想了很多 函数的输入参数。 而这些输入被接受 由两个括号这里。 而那些里面是一个输入。 这是一个字符串,因为我们已经把它称为, 这是一个字符的只是一个序列, 像一个字,或短语,或整个 文章甚至在双引号之间。 这就是发生了什么事情来影响 当然,printf的行为,因为, 它只是一个普通的打印功能。 它不会知道是什么 打印,除非你告诉它。 然后,一些细枝末节。 那么,我们能说这个奇怪 的符号序列是? 是啊。 观众:新行。 大卫·马兰:新行。 所以,事实证明,你不能只打, 进入,当你写的程序。 通常,编译器是会得到 有点困惑,你的意思。 相反,你必须从字面上 说,给我一个新的生产线在这里。 所以/ N是我们一般 调用一个转义字符。 因此n,新线路。 而编译器知道 当它看到/ N, 它实际上应该诱导计算机, 最终,或printf,在这种情况下, 打印出一个新的实际 行,像打了,进入, 键盘上的键。 最后,做什么我们说 这一块的语法是什么? 这是什么代表什么呢? 是啊。 观众:[听不清] 大卫·马兰:这只是 该行的末尾。 它是语句的末尾。 并认识到我们不 把它们无处不在。 我们当然不会把他们 在每行的末端。 举例来说,有没有对 第一行,有没有上线 有,主,有没有 花括号后, 但你会开始看到并获得 熟悉的地方,它被称为为。 它是一个功能之后几乎总是 致电或发表声明,一些行动 你的确服用。 而现在知道,特别是如果 在那些不太舒服, 这些都是种愚蠢的事情 你会最终不小心撞 你的头撞墙了。 因为你会在逻辑上 相信在某些问题 你已经解决了问题 集,该死的东西只是 将无法编译,甚至运行。 所以通常情况下,在初期,它会 是因为你错过了一个括号, 或者你错过了一个分号。 所以只是留心 中,这样的东西 并尽量不要被沮丧 因为他们很快做到这一点 成为旧帽子。 但它很容易得到 受挫早上,作为一个结果。 所以,现在,让我们来看看如何 这条线是实际工作 再看看一个稍微 更复杂的之一。 所以我们在这里,在 能够得出这样的屏幕上。 让我们假设 这是我的电脑屏幕, 但我写的,你好程序, 而我还没有实现,printf的。 别人已经实施,printf的。 谁愿意自称 已经实施了,printf的? 如果我们可能吗? 好吧,你叫什么名字? 学生1:[?柯巴。 ?] 大卫·马兰:Copal的,拜托了。 上来吧。 好吧。 因此,我们有,在这里,一些名称标签, 因为我们会做出这样的小游戏。 我们会打电话给你,printf的。 如果你想要到这里来, 我刚刚在屏幕上绘制, 这是相当简单的,还有我,这。 所有的权利,所以,你好我的名字是, printf的,如果你想要把那。 好吧。 如果你可以去展台 通过在计算机屏幕 就好像你是功能 来到这个计算机系统。 而你的人生目标是 实际打印的东西。 但是,就像节目我们 刚刚在屏幕上,在这里, 我们将不得不 实际上给你一些意见。 所以,如果我的输入,在这里, 显然,什么是传递给printf, 让我们种的讥笑它是这样的。 我将字面上写上 一张纸,“你好,世界” 反斜线N.而且要明确,什么样 我刚刚画在这张纸上, 看起来是这样的。 所以,当我运行这个程序,而这 代码黄线被执行, 就好像我,hello程序, 我交给一些输入开了一个功能 别人写的。 如果你与你的手指, 居然可以,用你的手指, 在屏幕上绘制什么 这是你一直在流传, 的效果,最终,是 看到正是这样,在屏幕上。 和一个小角落的情况下在这里。 而良好的,我们不应该看到 的,新线,在这一点上。 这将是不正确的你 明确地得出新行。 但是,如果我们不停地写上的字 屏幕上,他们最终会低于。 所以,非常感谢你,但坚持 这里只是一个瞬间各地。 我们现在需要一个其他 志愿者,如果我们能, 那将需要发挥的作用 of--这只是人们在乐团 现在。 如何about--确定。 就在这儿。 上来吧。 你叫什么名字? 学生2:[? Ivay。 ?] 大卫·马兰:对不起? 学生2:[? Ivay。 ?] 大卫·马兰:阮经天,上来吧。 没有? 难道我得到的错误,甚至 你说了两遍之后? 上来吧。 这是很难听到了这里。 行。 我很抱歉,你叫什么名字? 学生2:[? Ivay。 ?] [?大卫·马兰:Ivay。 ?] 行。 现在,如果你不 心,你的GetString。 学生2:确定。 酷。 大卫·马兰:所以,如果你想 站在这里只是一瞬间, 让我们来看看一个稍微 更复杂的程序,即 现在有三行代码。 因此,我们有,其一,说明用你的名字 printf的;二,一个电话给GetString, 随后分配到一个 变量调用,字符串s,或称为S; 然后再次调用,printf的, 但是这次使用两个输入。 因此,我们已经做状态 你的名字,或者更确切地说,我们已经 已经做了printf的电话。 所以我会写,说出你的名字。 所以,有什么我要去 通,printf的,在短短的时刻, 是很简单,这一点。 所以,如果你想继续前进,得出这样的 在屏幕上,这是现在你的输入。 好吧。 而忘记字符串,我们现在有 我们自己的行代码在这里。 所以,GetString的,我们需要 实际调用,GetString的。 所以,你的人生目标是只走 外面的乐团,如果你能, 并得到某人的名字。 但是,让我们给你 东西把它。 如果你想,去 进取,得到一个字符串, 得到某人的名字上 一张纸,如果你能。 好吧。 我们将看到,在短短的时刻, 他的名字我们得到。 同时,我所要 有现成的,是一张空白 纸,其中,我要去 存储任何值它 是,GetString的是返回给我, 我,作为一个所谓的字符串变量,S。 好吧。 所以,你有什么吗? 聂。 好吧。 因此,我们有聂的名字在这里。 因此,这是字面上 已返回 对我来说,可以这么说,通过GetString的。 我,现在,我准备 执行左手侧 那表情,在这里我简单的 抄下来,今天的目的,聂。 所以,现在,我有一个变量 所谓,S,存储聂的名字。 我已经交给 printf的,以前的说法。 但是,在我们的第三个,也是最后的行 代码,我实际上是手的printf 东西有点different-- “你好,%S,”反斜线ñ。 这样一来,最后一行我要去 到send--的最后一件事,我 要现在写下来,是这样的。 所以两行代码,或 而代码的最后一行, 要求两inputs-- 之一,这和两个,这一点。 所以,如果我们的printf函数 现在可以把这些作为输入, 让我清除屏幕为您服务。 其实也没什么,你可以继续。 我们会离开它,因为 它是在相同的程序。 我们应该看到,你好,聂。 好吧。 因此,这是相当多的 箍跳通过,只 写,说明你的 名称和,你好,聂。 但消息传递的这个简单的想法, 输入的传球和输出接收的, 正是我们将不得不模型 即使是最复杂的功能。 所以,谢谢你这么多,你俩。 我们有一个可爱的压力 球在这里为你。 谢谢你对我们的GetString 和printf志愿者的一致好评。 谢谢。 好吧。 谢谢你们。 因此,我们一直在谈论 迄今为止,大部分是关于串。 而事实证明,C能实际 了解几个不同的数据类型。 事实上,让我们 一起来看看这些在这里。 因此,C,和很多语言, 认识事物称为字符。 一个char通常一个是 单字节或8位。 它代表一个字符, 像字母A或资本 字母A,或小写字母 A,或感叹号, 或任何字符,你可以键入 你的键盘,有时甚至更多。 我们也碰巧看到彩车。 浮子是,一般情况下, 32位值,或四个字节 因为再次,一个字节是8比特。 所以一个float是一个浮点值, 大一些的小数点。 事实上,这就是 这部电影是说 ,当他们谈到浮动 点值,一些固定位的数目 被用于表示一个实数。 但也有东西叫做双打。 这些存在于Java中, 如果你已经采取了APCS, 和双,正如其名字令人欣慰 顾名思义,是两次大如浮动。 它仍然是一个实数, 它只是有更多的位 与要更加精确, 或存储更大的数字。 int是容易的。 我们谈到了这最后的时间。 这只是一个整数。 而且它是一般32 位,或四个字节。 所以,如果你有,我们现在看到的, 32 bits--我们0周这样做, 曾经如此briefly--,如果您有 32位,什么是最大的 数可以表示为一个整​​数? 给予或采取? 这样4十亿, 而这只有当我们 仅代表正数。 如果你有32位,并且要 表示负数为好, 你的范围是,从本质上讲,负 2十亿转正2十亿。 但是总体来说,我们将开始 在0升至4十亿。 你不必准确地知道,但 我们可以看到这一点,事实上,如果我只是 开了一个小计算器,点击这里。 我可以做2的32,和 这正是有多大, 有多少价值,你可以 表示,具有32位。 而且它的约4十亿。 因此,我们会继续看到这个数字 在几个不同的地方。 但是如果你需要更长的 数比, 原来有 一些所谓的很长很长。 而一个很长很长的 通常64位,这 意味着它是一个数量级 比int更大。 所以,我甚至不能发音最大 你可以代表数字, 但它明显更大。 现在,顺便说一句,从历史上看, 如果一个int是32位, 和很长很长为64位,怎么样 大是一个长期的,而不是一个很长很长? 你会认为这是比int长 但也许少长不是很长很长, 但它实际上依赖。 所以它变成一颗颗 过的挫折, 对某些系统编写代码, 是,并不是所有的这些数据类型的 有预先确定的值。 有时候,这多少位。 有时候,很多位。 所以,你居然要知道, 有时,哪些硬件 您正在运行的软件。 值得庆幸的是,其他语言和 现在还存在着其他的数据类型, 让您更精确。 好了,我们看到的字符串, 而我们看到的布尔也 但事实证明,这些都 只与CS50库。 因此,那些不建 到C.这些替代, 进来叫该文件 CS50.h,我们最终会 剥开的层。 但现在,他们只是 附加数据类型。 一个布尔值是真还是假,和 串是字符序列, 就像一个字。 现在printf的,我们已经看到,有 占位符,%S就是其中之一。 你也许可以,到现在为止, 从这些其它实例中,如何推断 你可以有一个占位符 对于不同的数据类型。 例如,以此来猜测,如果你 想使用打印出单个字符 printf的,占位符大概%C。 如果你想打印出 整数的占位符,%我。 %LLD是一个很长很长的十进制值, 但很长很长,所以映射到这一点。 然后%f浮点 点值或双, 所以有时候他们重新使用 在不同的上下文。 所以我们会看到和使用 其中一些随着时间的推移。 和printf等功能也 支持别人的转义序列, 有时,这些都是必要的。 所以反斜杠n是一个新的生产线。 反斜杠T,没有任何人 要采取刺? 观众:标签。 大卫·马兰:标签。 所以,如果你真的想 打印出标签,而不是 的空间的固定号码,但实际的 制表符,你不打你, 标签上,在键盘上键,通常, 你其实反斜杠吨。 反斜杠双引号, 为什么我会永远想的? 对? 为什么我不能只是输入 我的键盘上双引号? 观众: 因为,否则,它是 会认为这是结束 对喜欢您的打印[?文本。 ?] 大卫·马兰:没错。 请记住,我们的 printf的例子,当我们 被传递的输入对printf, 在该输入字符串的左 并在该输入的右 春天,当然,是一个双引号。 如果你自己输入有双重 报价在中间的那个, 计算机可能潜在地 感到困惑,因为到, 这是否双引号 属于中间? 它是否与左边的归属? 是否有一个正确的归属? 所以,如果你想使超 明确的,你做的反斜线双引号, 因此,它的逃脱了,可以这么说,和 它不是混为一谈别的东西。 而且还有其他几个人在这里, 反斜线R,单引号,0, 我们可以看到随着时间的推移,以及。 而现在,怎么样的功能呢? 这样我们就可以采取迄今的行动 在这种语言,C,好了,我们已经看到, printf的,当然,所有的 屏幕上的其他人的, 在这里,我们将使用的 当然第一个只有少数几个星期, 来当CS50库。 他们能够更容易,在 C,实际获取用户输入。 事实证明,在C和 坦率地说在几种语言, 它在脖子上做一个真正的痛苦 简单的东西,比如提示用户 为键盘,为他或她的输入。 所以,这些功能更容易。 它也有错误 在整个检查, 这样一来,当你 记得上周三,我们 看到了,重试,警告, 当我不配合, 而我输入一个字,而不是数字? 我们早做了繁重 在确保用户合作。 但这些都只是培训 车轮,我们将最终, 并迅速,起飞。 因此,要回顾一下,然后, 让我们快速浏览一下, 就像我们有划痕,在没有 C.在一些典型结构 这是为了,排序 的,是一个旋风之旅, 只是让你有一个参考 那你首先看到的东西。 但是,我们来看看实际的编码 使用其中的一些积木。 所以,就像在刮, 当我们已经报表喜欢, 或者说,等待,在C,我们确实有 功能以及,如printf。 如果我们想表达的条件 在C,它是类似的,在精神上, 该拼图的 看起来是这样的划痕。 但是相反,我们 从字面上只写,如果。 然后,在括号 我们把一个条件, 其中,该条件是我们将 打电话,再次,一个布尔表达式。 再次,这是有点伪的。 而且,事实上,//是注释。 这只是英语单词我自己。 但是,这是一般 的一个,如果,条件结构。 但是,我们会看到具体的 例子在短短的时刻。 如果你想有一个 两路的岔路口, 就像我们与我们的志愿者在做 周三你可以有一个,否则,如果。 如果你想有一个第三和 最后一个条件,或者默认的情况下, 你可以只是一个其他块,还有。 同样,用布尔表达式, 你可以,而且,它们在一起。 而且我们看到在周三,即 它不是一个单一的符号, 它的2,为低级别的原因 我们最终会看到和发挥。 的OR-ing的东西放在一起 是2竖条。 根据美国的键盘,这 通常是一个关键 与上面的Shift键 您的Enter键或Return键。 此外,还有这些东西 我们将使用也许一次或两次。 它们是功能上等同于 你可以用做的,如果,否则,如果, 否则,如果其他人,建设, 但他们称为交换机。 他们看起来非常不同,但我们会 看到我们的一些分配代码, 对于未来的习题集,最有可能的, 它有时只是一个漂亮 表达一个整体的方式 一堆条件, 无需大量的花括号和 很多括号和缩进的。 但他们给我们没有更多的 功率比我们已经。 现在循环。 而这其中,我们来看看 在慢一点。 但随后,我们将开始使用这些, 特别是对于那些已经熟悉。 这是规范的方式,如果难以置信 神秘的方式,用C编写一个循环 现在,在划痕一个循环是 很简单。 你有一个,永远块。 你有一个,重复,块与 只是一个数字,你必须输入内容。 而伴随着,for循环,可以 同时实现这些想法, 但它是一个多一点的技术。 但坦率地说,这也是 相对简单。 一旦你知道的顺序 操作,你从字面上 只是要在价值观堵塞 并告诉计算机做什么。 因此,这里有一个例子。 这是一个循环的是,相当 简单地说,从一个人数多达计算 通过另一个。 而就扫一眼 它,即使你有 没有以往的经验 这种语言,什么号码 它可能开始计数? OK,0。 我猜那是因为你 看到有一个int和我, 这是一个变量。 它初始化为0。 再后来,它看起来像 我们传递的printf,一个值。 而且,事实上,我在这里做一个小错字。 但是,这容易固定。 我要补充的,我在这里。 我们现在有printf的存在 通过该占位符值。 这有什么经历来算呢? 听众:50。 50。 49。 大卫·马兰:49。 所以50,乍一看,似乎是正确的。 但是,事实证明,将是 我们的条件,我们继续检查。 而且我们要停止一次 i是不再小于50。 所以这个循环中,反之,应 执行,只要i小于50。 但只要它变为50,或51, 或者更糟,它应该自动停止。 好吧。 那么究竟是什么发生在这里? 因此,这是秩序 操作为一个循环。 一,你有 所谓初始化。 这种黄色高亮块 代码首先执行, 并且它有一个,每效果 周三,你可能想象。 它创建了一个名为i和它的变量 在变量存储值0。 所以i为0,在这一点上的故事。 接下来的事情, 发生在这个结构, 是该条件被检查。 于是我立即检查, 为i小于50? 当然,答案 现在来看,毫无疑问,是的。 是的,因为我是0, 这是肯定小于50。 然后发生了什么,是这 行代码被执行。 而事实上,如果有多个 的代码中的那些大括号线, 他们都得到执行此起彼伏。 并且在这里的效果,是 显然,打印出 的编号i,这是会 为0,然后1,然后2。 但为什么? 它为什么会得到增加? 那么,第四件事, 碰巧的是,这个语法 被执行,分号之后。 我++是一个说速记的方式; 取的i的值,并把它加1; 再下一次,加 1到它;而下一次, 其加1。 因此,如果我们继续下去, 什么会发生 接下来就是我不打算 以后再初始化我。 如果我一直在初始化 i到0,本实施例 永远不会结束,因为 我会停留在0。 但什么事情发生是 该条件将被检查, 该行代码会被执行, 在我将增加, 条件将被检查, 代码会被执行。 它再次保持骑自行车, 又一次,又一次, 直到我++诱导值50。 条件接着说, 比50 50少了呢? 当然,答案是否定的, 所以整个代码停止执行。 如果你有在屏幕上更多的代码 向下跌破,那接下来会发生什么。 它弹出来,这些花括号和 继续打印后更多。 所以,现在开个玩笑,从狐步舞,那 你也许现在明白了。 它总是有趣的。 这就像笑 样的过滤, 然后你意识到你不应该 是笑的幽默是这样。 但是,有一些外卖 在这里,教学法,太。 所以,事实证明,我 缺了一块的语法, 或狐步舞的失踪 一块语法在这里。 现在缺少的,我们已经有 在每一个其他实施例,从而多远? 返回,在那里,所以 这是别的东西, 我们再回过头来不久。 缺少了什么有关系吗? 是啊。 观众:该 初始化[听不清]。 大卫·马兰:OK。 所以呀。 所以实际上,这个is--嘛, 和计数初始化 上述起来,或者说,上述宣布了起来。 因此,这是做的另一种方式。 但不是在一条线是有效的,但。 怎么在这里? 观众:是不是大括号? 大卫·马兰:是的。 因此,大括号丢失。 但是这个代码,我的意思是,他们的信用, 实际上,语法上有效。 事实证明,你不 需要花括号 如果你只有一行代码 要在循环内执行。 现在我们总是在课堂上和 我们所有的分销代码, 包括大括号 无论如何,仅仅是为了清楚起见。 但要意识到,在教科书 和网上的例子, 你很可能看到大 牙套有时失踪。 这没关系,如果你 已经缩进和预期 是代码只是一个单一的线,而不是 多行代码,潜在的。 好吧。 所以相关的问题 不精确,溢出的问题, 在这个意义上,类似地, 确实整数必须限制他们 就像浮点值? 在世界上的浮点 价值观,我们只能是如此精确, 在此之后,有时 不好的事情都可能发生, 而我们的方案可以是越野车和错误。 现在,即使是整数, 你会遇到的问题。 现在的整数不具有 小数点或之后的数字。 它只是一个自然数,一般。 那么,什么可以去错了一个int? 如果我用一个int来 计数,有什么可以去错了吗? 似乎简单了很多。 是啊。 观众:如果 数字变[听不清] 大卫·马兰:是的。 如果算上如此之高,你有什么 无法用语言表达的真正的大数目。 对? 在某些时候,你会 超过界限 的一个32位值或64位的值。 现在,再次,我不知道怎么样 发音一个64位的值, 但我知道,有一个32位整数, 它可以是最大的值, 如果它是唯一积极的 值,是约4十亿。 所以,如果我尝试数到5十亿, 事情将要发生。 但是,让我们看看,其实都有可能发生。 在整数世界 溢出,在那里你,从某种意义上说, 溢出的能力 整数,会发生什么事情? 所以这里有一个二进制数, 这是一个倒退到0。 这是全1,和占位符 在那里,有2的幂, 所以这是二进制的。 因此,这些都是8,1位在屏幕上。 如果你还记得或 你快做数学题, 什么样的价值正在被代表 这里这八个1位? 255。 即使你是不是很确定 数学的,你可以做出来。 或者你可以只种 原因通过它, 等一下,如果我 较8位值, 我已经得到了256个可能的值, 但其中第一是0, 我只知道, 最大的将是255, 而这正是这一个可能。 因此,假设我尝试添加1到这个值。 你会在年级做 加入学校的时候1,而且 并不真正适合,因为 你必须随身携带的1? 这是什么数将 当你加1变成什么? 这将变为0。 对? 因为如果你有更多的bits--,我会 尝试,种,它这里 - 打出来 如果我们有更多的位,我们 可以在这里做的是添加1, 然后我们会得到这一点。 哎呦。 我们希望有一个1位一路看过来。 但是,如果这是一个有限 值,这是只有8位, 这就是预先确定 由计算机, 这1实际上是不存在的。 正中下怀它掉下悬崖。 所以,如果你添加1到255,有什么 值你显然得到什么呢? 0。 所以意外的数字, 或许,无意间, 最终披着这样。 那么什么可以是这意味着什么呢? 嗯,有一些不同的东西。 所以之一,它最终看起来 如0,无意间, 但你可以种看, 即使在现实世界中, 是好还是坏, 表现这种思想的限制。 例如,任何你谁 玩过乐高星球大战, 没有人知道发生 硬币的最大数目 您可以在乐高星球大战收集? 以基于猜测 当今领先的问题。 这是大于256或255。 它的4间十亿。 所以,事实证明,和 有一些people-- 一些谷歌上搜索确认最后night-- 已经得到了4个十亿金币, 或者诸如此类的东西,在乐高星球大战。 虽然很明显,有 一种方法来欺骗游戏, 有一个错误或功能,可以让你 只是累积很多很多的点。 但最大的可能 值,根据 这个屏幕截图的人,我 网上找到的,确实是,4个十亿。 现在,这是为什么? 这正是4个十亿, 可能是因为有人决定, 谁在写本场比赛, 他们可以做4组十亿, 什么,什么,什么, 像值我忍了 用计算器较早,但 它只是一个少许清洁剂对人类 说的最大数量 的coins--或螺栓, 他们称之为them--你 可以收集4十亿。 所以,这是为什么? 如何为乐高游戏 实施反 那就是维持轨道的 硬币有多少? 他们使用的是什么? 观众:它停止 4个十亿后计数。 大卫·马兰:它停止 4个十亿计数后, 这意味着你可以 推断,作为一个程序员, 他们很可能 使用32位的整数。 就像程序员真的只是 类型化,INT,在他或她的代码, 这就是可变的类​​型 他们使用存储别人的代码。 因此,有其他表现 这些类型的限制。 所以,我没有玩过这个game-- 而我读了历史 确认作为much--但在 文明,那里的原始版本 你显然与每个互动 另外,可以发动战争或和平, 甘地被认为是一个 最和平的角色,因为我 理解,在第一 版本文明。 而事实上,在范围为1至10, 他的侵略性只是一个1。 所以永远是那么温和 侵略性,显然。 但是,在某些时候,你可以很明显 在地理上安装民主。 如果你安装的民主 到你的游戏版本, 那么你的攻击水平下降。 这是一个很好的事情。 人们更安静 显然,在这种情况下。 但很显然,有人做 没有一个,如果,条件 在代码中的原始版本。 所以,甘地的侵略水平由去 正1,负2,负1, 但游戏不 了解负数。 所以,事情的经过是甘地的侵略 从1级去了,到0,负1, 这具有的效果 折回是 最积极的角色 在比赛中,以255的值, 上的比例为1至10。 从那时起,还有的是 更化身这场比赛, 他们已经把它作为 一种复活节彩蛋的, 甘地显然是 这么可怕的攻击性。 但它是一个结果 很简单的编程错误 在游戏中的该非常早期版本。 现在更令人不安的是,多 最近,波音787 被记录为具有 错误,不是那种设备 你特别想有一个bug。 且症状,我会读 在这里,从网上的文章, 是这样的,一个模型787飞机 已连续供电 248天就失去了所有 交变电流,交流, 电功率,由于 发电机控制单元, GCUs,同时 进入故障安全模式。 因此,这是发出警告 当这个问题被发现。 这种情况是由于 通过软件计数器, 内部的GCUs,所以 整数或一个变量, 248之后溢出 连续功率天。 波音是在过程中 开发GCU软件升级 将弥补的不安全状态。 那么像导弹 方案中,其中, 他们有一些类型的变量 被计数,计数, 和计数,但渐渐溢满 其能力的界限, 同样做了该死的飞机 具有可变的溢出 经过足够的时间运行。 这样一来,舌头在脸颊的方式 解决此问题的工作 是真正的,重新启动,你的飞机每 247个天,使得存储器被擦拭 和可变回到0。 但要意识到,这是一个非常 大型化身软件, 但特别是当我们听到苹果 操作系统进入汽车, 并从谷歌自驾车车, 任意数量的软件的化身 在我们的日常生活中,电视 和手表等, 实现由软件所包围, 所有这一切都写的是我们人类。 正如我们都会很快就会发现, 它很容易和非常典型 编写软件时犯错误。 如果你不抓住他们, 一些不好的事情都可能发生。 现在有时,一些 有趣的事情都可能发生, 或者至少有时候我们 知道会发生一些不良。 因此,0除以0,从等级 学校,一般是一件坏事。 这是不确定的。 而事实证明out--,让如果我们看 我的麦克风可以选择此up--苹果 曾与这一些有趣的最近。 所以,我有一个iPhone在这里。 我要谈的Siri,问她 给我的答案0除以0。 什么是0除以0? SIRI:假设您有0 饼干,和你平分他们 在0朋友。 多少饼干确实每个人得到什么呢? 看到了吗? 它没有意义。 而且饼干怪兽是悲哀 有没有饼干。 而你伤心, 你有没有朋友。 大卫·马兰:这是一种令人厌恶的。 所以这就是刚才说有。 这是不确定的,它没有定义, 而事实上,许多编程语言 或者,真的,编译器会 当您,检测程序, 试图除以0 0。 更多乐趣比这虽然是 ,显然,饼干怪兽 是在Twitter上的这些日子。 他回答了,这一点, 这是绝对可爱。 但是,让我们快速浏览一下 一对夫妇的其他构造, 然后把一些这方面的 代码中使用,以良好的方式。 所以,事实证明,除了 对循环,有 一种叫做while循环,即 看起来不同的,是实现 一个小differently--和 我们最终会看到examples-- 但在某种意义上, 它的简单,因为它 不允许初始化和 环路的边界之内更新。 你仍然可以实现它。 所以,你可以做同样的事情 与while循环,与一个for循环, 但你的语法,ultimately-- 因为我们最终会 see--将是不同的。 甚至还有一个do while循环,这 其实是有一点不同, 在而一个for循环 和while循环总是 首先检查自己的条件,如果 你看过这个东西从上到下, 那种看起来它会 检查它的情况最后,因为它是 真正的最后一行代码。 事实上,这将是有益的 在我们编写某些程序, 如果你想只是盲目地做一些事情 最终检查的条件。 这不一定是坏事。 如果我们想要的变量,我们可以做 它在几个不同的方式。 而我们的狐步舞看见 卡通,做的一种方法, 在这里你声明的变量, 如int计数器分号, 然后later--说不定下 行,也许10线later-- 你居然初始化。 因此,这2行代码 声明一个int类型的变量 并称之为反,所以它给 我足够的位来容纳一个int。 然后最终,它把 值0到该变量。 它排列0和1的在一个 模式,我们知道上周, 代表我们所知道的0号。 或者坦白地说,你可以做这么多 更简洁地说,就这样。 现在,我们也有 能够调用函数。 而事实上,这里有一个2线 程序,或它们的摘录, 这使我们能够真正 编写一些代码, 得到来自user--字符串多 就像我们的志愿者一时ago-- 结果存储到 一个名为名称的变量, 和then--很像我们的志愿者 与printf--打印出这些值 通过传递两个参数, 串,其次是可变 叫,名称本身。 因此,让我们来看看,前 我们再回过头来马里奥那里, 在一对夫妇的这个现在的例子。 我要继续前进,开 了,让我们说,功能0.c。 和往常一样,这个代码是 可在球场上的网站, 这样你就可以在一起玩 回家看它以后。 但这里有一个程序在它的 本质上,从线17至22。 主程序所在 计划总是会启动。 这一方案,显然,是怎么回事 打印出你的名字,冒号。 它随后将打电话的GetString, 就像我们做了与我们的志愿者。 然后,这是有趣的, 它会调用PrintName。 事实证明,这一切的时候,有 似乎是被称为PrintName函数。 可打印某人的名字。 我们并不需要用printf从 昔日,有PrintName。 但是,这是误导 因为PrintName不 配备了C.人们不 一些40年或50年前发明了它, 我这样做,而不是。 而事实上,如果我滚动 进一步下降,通知 我怎么能写我自己 在C函数我们最终会 解释为什么我们一直在说, 无效,在少数地方, 但今天,让我们 光看这个名字。 在第24行,如果你想 创建自己的功能, 你从字面上写的 功能的命名。 我选择了PrintName。 在括号,你 然后指定哪几种 投入,有多少你 希望此功能可走。 在这种情况下,我想带 1变量调用,名称, 而这将是 型,字符串,因此它会 是一串字符。 然后,这个program-- 就像在刮, 你可以定制拼图pieces-- 将有这种自定义行为。 这将调用printf 传递,你好,占位符, 然后它会堵塞 在任何用户调用。 所以这是一个例子是什么 计算机科学家会 调用抽象或功能 分解,这只是 花哨的方式saying--是,如果 你喜欢这个高层次的想法, 像我想功能, 打印某人的名字,绝对是你 可以从字面上写的printf然后 通过在你想要的参数, 并计划将工作, 因为它有自周三。 但是,你可以开始抽象掉 打印名的概念。 你可以给它一个名字, 像PrintName,和这 这种想法从0周分层的。 从今往后,我和你不必知道 或护理PrintName是如何实现的。 是的,它使用printf的,也许它 不,谁知道什么用? 谁在乎? 现在,我说在这里, 而不是到这里的。 事实上,作为我们的计划获得 更加先进和复杂, 我们将继续采取理所当然 较低级别的拼图存在。 因为我们写了他们 或者别人没有,所以 我们可以再建在它们上面。 让我们来看看这个 变型,功能之一。 所以这一块是一个有点多 先进的,但事实证明, 在CS50的图书馆, 这里只有一个调用getInt功能。 我们没有想到,几年前,到 实现GetPositiveInt功能。 这是一个有点恼人,因为如果 你们正在编写一个程序,其中 你想获得一个积极的 从用户的整数, 你完全可以使用调用getInt。 你完全可以用检查 条件,也许一个循环 如果int是更大 比0和骂的用户 如果他或她不给 你正数。 但是,让我们建立这个 建筑挡住自己,一, 定制刮片,如果你愿意。 我将有一个程序 在这里,最终,我 希望能够调用 GetPositiveInt,我想成为 能够打印出什么那int是。 但是,这是现在的抽象化了。 它只是被赋予了很高的水平 名称它做什么, 这是美妙的,因为它是 非常直观,现在读。 如果我做不在乎什么是底下 引擎盖,让我向下滚动。 这是一个有点吓人 在第一,尤其 如果这是你的第一个程序, 但让我们一起来看看。 我不再说的,无效的, 因为事实证明功能, 就像GetString的,可 返回一个值给我。 他们不只是有 打印到屏幕上, 他们实际上可以手 我的东西回来。 和而PrintName之前, 我没回来需要什么。 我需要的副作用 东西显示在屏幕上, 但我并不需要一个人 递给我的东西回来。 这里,与GetPositiveInt, 像调用getInt, 我想交到东西回来。 所以我说不是的,无效的, 在线路23,但整型, 它说,该功能 我正在写, 称为GetPositiveInt是要 递给我回一个整数,没有什么, 不作废。 同时,要采取不 投入,所以我,善良,推翻它。 我不给GetPositiveInt任何 输入时,我希望它给我的输出。 然后现在会发生什么? 因此,这里就是我可以声明一个变量。 我一直在循环之外做了, 对于原因,我们最终会看到, 但是这只是给 我的32位调用,N, 我已经预先确定 他们存储的整数。 而下面这一点,做while结构, 这就是为什么它是非常有用的。 从字面上做到这一点, 而n小于1。 因此,让我们看看会发生什么。 我打印出来,请 给我一个积极的INT。 然后我得到一个int,使用CS50的 功能与存储在n个。 然后,什么样的代码行可能 下一个被执行,逻辑? 哪条线是多少? 是啊,所以31。 你不会知道,直到你 被告知或排序的推断是, 但是这是真的。 不言而喻从上到下 然后不断重复。 所以,如果我已经输​​入中说,数 负1,为n比1负少? 是啊。 因为负1小于1。 那么会发生什么情况? 我要做到这一点 而n是小于1, 所以我打算回去线28。 而每一个时间 - 让我们运行this-- 让功能1编译它, 现在点斜线功能1。 如果我型负1,这是 要保持吼我 直到我合作,因为每个 我的输入小于1 如果它而小于1, 我将继续这样做。 如果我终于给它一些像50, 值得庆幸的是,它说,感谢50。 为什么呢? 因为只要n是不小于 1,我停止陷在这个循环中, 而这种新的关键字的今天, 返回时,从字面上做到这一点。 所以,我刚刚实施,在 感,GetString的相当于, 在那里我递回 不管是谁用我的,一定的价值。 它并不必须是 一个字符串,它是一个int。 因此,一个简单,快捷 举例来说,但我们会很快 看到一些更复杂 版本还在。 事实上,让我们来看看一个 数字1,这是所谓return.c。 而这其中实际上 简单一点。 因此,在这个方案的目的 life--让我们编译并运行它, 所以要回报,点 斜线,return--通知 程序简单立方体的价值2。 它是非常愚蠢的,这是很难 代码,它没有采取任何投入, 但它确实说明另一个 我写我自己的功能。 所以在这里,我宣布一个 可变的,所谓的类型为int x,, 等于数字2, 完全是任意的。 这仅仅是一些蓬松打印。 它说,x是现在,这样的和 这样,多维数据点点点。 而神奇的是显然的第21行。 我打电话调用的函数,立方体, 我交给它的一张纸 用数字2写在上面, 和什么样的价值,数学, 我想出来的吗? 正如完整性检查? 8。 对? 我想2立方回,2〜 3的力量,所以8回。 那么,是立方体实现? 好吧,发现它在这里实现了。 就如同之前,从逻辑上讲, 即使语法可能是 很新,你们中许多人, 我想这个功能 递给我回来的片 纸,上面有一个int。 所以,我有一个int,该 名字是随意, 可方便地称为立方体。 输入到它,是n 整型,所以这是 我怎么可以通过在数 2上一张纸。 然后事实证明C支持 数学,所以你不用X的的时间, 你只需要使用星号 乘法。 而这个返回n次n次 N,这是一个简单的立方值。 那么,我们要与这一切? 这绝对是一个 旋风之旅,放心, 在超级节 而在问题设置1, 你可以通过走 这一切全愈。 而在问题设置1,我们将过渡 从头开始的图形世界 到更多的东西命令行 在C.但我们会汲取灵感 从此这里的游戏 从昔日的,其中, 使用C和的标准版 p将您将实现马里奥的金字塔。 而在的黑客版 p将,如果你选择选举, 您将实现多一点 有两个高峰挑战金字塔。 您还可以实施 算法,贪婪算法。 原来有 一些有趣的逻辑 过程背后 运行出纳站 实际上交给 有人背的变化。 有一种算法,是相当 简单的,你甚至可能 直观地把握,当你第一次读到 它 - 意识到这就是我一直 做我已经给了一些人的任何时间 钱back--,让你永远 最小化的数量 纸币或金属币 您正在移交给用户。 而这,当然,是引人注目 因为如果你去CVS或诸如此类的东西, 你不想成为手 一大堆的人 或者一大堆便士。 你想最少 硬币,大概,可能。 最后,你也可以挑战 在水世界玩水 而实际上得到升值 对于流动速率之间的映射, 都喜欢,水淋浴, 到底有多少水被使用。 而其中的典故, 将这个片段在这里, 我们将结束对 短短60秒,即 描绘了一幅图片 低流量的淋浴喷头。 [视频回放] -好吧。 我在这里得到的一切。 我得到了旋风F系列, 水润,Jetflow,斯德哥尔摩 Supersteam,你的名字。 - 和你有什么建议? -你要买什么? -Power的人。 电源。 样丝克伍事件。 - 这就是辐射。 -这是正确的。 - 现在这是什么? - 这就是特种兵450。 我不卖这个。 - 但是,这就是我们想要的。 这是一个突击队450。 - 不相信我。 它仅用于马戏团。 这是大象。 -I'll支付任何费用。 - 什么对杰里? - 他不能处理。 他细腻。 哦耶。 [结束播放] 大卫·马兰:好的。 那如果CS50。 我们会看到你下周。 扬声器1:[?斯卡利?],[?伊恩?] 只要这个尾奏项目, 你有什么家伙想出了? 扬声器2:好了,我们已经给 它的各种思想, 我们认为,最好的办法用于: 扬声器3:我? 扬声器2:是的。 通过一切手段,其实。 扬声器3:所以我觉得 我们可以总结一下我们的想法 对于一个word--什么的片尾。 大卫·马兰:没事? 扬声器3:没有。 大卫·马兰:这是什么意思? SPEAKER 3:片尾是关于什么。 扬声器2:嗯,我的意思是,在哲学, 我的意思是,没有什么是永远的东西。 扬声器1:所以what's-- 有什么前提? 扬声器3:所以它就像生活。 行。 今天你做了什么? 大卫·马兰:我站起来,有 早餐,来到工作。 扬声器3:这是一个片尾曲。 扬声器2:但是,我的意思是,不应该 事情发生在他身上的the-- 扬声器3:不,不,不,不。 什么都没发生。 扬声器1:那么,为什么我们看什么? 扬声器3:因为 这是一个尾奏的CS50。 大卫·马兰:还没有。