>> [视频回放]
>> 数学-A胜利 和机械技能
这是伟大的新自动 计算器在哈佛大学。
在数学复杂的问题 把通过机器以编码形式
在磁带上精确地解决了 的时间分钟馏分所需
人类计算。
为了加快各种形式的 数学和科学的研究，
巨型机械的大脑会工作 美国海军直到战争结束。
>> [结束播放]
>> DAVID J.马兰：这是CS50。
过去是一个神奇的 的地方，但如果你曾经
不知道这是什么设备 在哈佛科学中心，
这的确是部分 哈佛大学的马克我，这是
现陈列有 在过去的许多年。
你会看到什么 嵌入问题集
一个是幕后看看 在什么设备做了，确实，
哈利·刘易斯教授，谁是谁非 计算机科学系在这里。
因此，更多的是在短短位。
>> 但是，今天我们开始转型 从上周到这一点，
我们会带提 在这里，人们的照片
这实际上是颇负盛名。
有谁知道这是什么 这里是在屏幕上？
至少根据神话。
是啊。
听众：第一个病毒。
DAVID J.马兰：所以这是假想 在计算机中的第一实际错误。
现在，在现实中字错误， 为程序中的错误，
已经伴随我们一段 时间在物理世界中，
这是第一个 记录的时间，其中确实有人
弹拨大蛾子出来的标志 II计算机，将其放在粘合剂，
然后记录了它 作为第一个已知的bug
到其实已经发现了身体。
所以这样被输入 这为今天的绝杀。
从去年的一​​切 每周在网上提供。
特别是资源，你可能 不一定注意到，特别是
如果来到这里的人。
因此，教学研究员之一，每 一年做一个规范的集合票据，
所以你不必守 你的头，试图
抄写任何东西 这可能发生在这里上课。
因此，认识到这些 所谓[？ Scribd？]注意事项
在线，肯定是幻灯片和 我们在课堂上使用的源代码。
我们充分文字成绩单 可用。
所以，如果你依稀记得一些 长期，想看看它一点点
更容易，实现所有 那是在线搜索。
除了演练为好。
事实上，今天我们首先来看看 较低级别的编程语言，
很快就被我们所知道的 为C，这是很容易
以经过短短几分迷路 片刻时间，然后进行排序奇迹
我们如何真正得到了一些 复杂的例子，从最简单的。
所以，实现我们的樱桃 挑类中的一些中
的代表性的例子，但 认识到这么多也
可在网上这样你就可以工作 通过它按照自己的节奏，
然而，你最舒服。
>> 但是当我们离开了与 这只是该计划。
于是我点击绿色旗帜， 而这是什么节目呢？
说，你好，世界。
它使猫说 你好在他的小世界
在顶部左侧 的划痕的用户界面。
但是，我们开始引进 上周一些术语。
因此，像这样的事情，我们叫什么？
可能是什么通称呢？
是啊。
方法或声明。
当然，这是一个动作。
做这个。
然而，有 其他形状划伤，
除了这些所谓的 声明中，他们也
像这样的事情，我们叫什么？
是啊。
这样一个循环。
在这种情况下，这个事 重复序列，很明显，10倍。
有一个永远的块。
有一对夫妇他人。
而今天我们要看看如何 翻译这一个更现代世界，
如果你愿意，即使它 要乍一看
要更加神秘。
但这些确实循环。
然后，我们喜欢的东西 这一点，其中有这样的形状，
而且基本上问的问题。
我们将其称为什么呢？
>> 听众：布尔表达式。
>> DAVID J.马兰：是的。
布尔表达式。
东西是真或 假，是或否，一个或零，
但您要查看的世界。
但是，我们叫那些布尔 表现形式，我们将它们插入
为条件，或分支机构。
和在世界 从无到有，一切都很好
在其形状方面联锁， 如果它使逻辑意义的话，
但你不必停留在只 做一件事有条件，
你可以有一个谚语 岔路口
做非此即彼，如果 条件是真还是假。
然后，你会看到， 如果你还没有准备好，
你甚至可以嵌套这些块。
所以划痕生长填充形状 您可能要插入进去，
这样你就可以真正表达最 你可能想要做的任何逻辑。
>> 公告现在的几句话 对于在这里和纽黑文。
所以切片从今天开始。
该网址，这是在球场上的 网站，对于那些不熟悉的。
段将是一个 机会相聚
在一个更亲密的环境 比[？桑德斯？]允许，
用10至20的同学用 助教在不同的轨道，
和不同的速度，如果你选择。
事实上，课程提供 不同的部分
对于那些不太舒服，更 舒适，介于两者之间，
和拇指这里的作用，是 有没有正式的定义，
但如果你不舒服， 那种你知道的。
你是一个勇敢一点对 踩着脚下，也许，回理念
在课堂上，或显示 长达一个在部分之间。
如果你因为你是编程 是六岁，更舒适，
也许你。
而如果它是一种胜负难料， 这正是之间的中
就是要。
>> 现在，在此期间， 一类这种规模，
它需要我们相当长的一段时间，部分 每一个人，所以我们所谓的，
超节，来了这 周末及下周初，
所以看看在课程的网站 对于那些过程宽，
并且还拍摄了那些 谁也无法使它们。
而部分本身将启动 在本周三CS50零指标。
习题集0已经是 在球场上的网站。
并意识到你必须 9晚天这学期。
所以这是从去年升级 今年，当我们有五晚了几天。
>> 所以，如果你想知道， 我们有九习题集。
你有九晚天，每个 你只能花一，每周上。
这实际上使所有的 问题集将于周五公布，
但我们的目标是把一个小 心理压力位
你试图让 事情在周四
因为你很快就会发现， 是好还是坏，最
一切都在软件世界结束 以比预计的要长很多。
因此，认为这是一种 机会帮助
自己到周四目标， 但感到欣慰的是，是的，
一切都将于周五公布。
如果你提交他们 周四，这是美妙的。
有没有奖励积分或额外 信用为满足这一最后期限。
它的意思是只有一个拐杖。
>> 和办公时间，无论是 在这里和在纽黑文，
在人，如果你想 与我们的课程满足
教学研究员和CA的援助。
>> 好吧。
所以，现在，让我们这个更真实。
一时间它会启动 得到多一点神秘，但很
迅速上周五和 下周我们将
能够这样做大大超过 我们可以迄今在划痕。
因此，我们推出了代码的最后 本周，尽管pictoral。
这是拼图。
我们形式化，这是 所谓源代码，
但也没有什么样子的？
那么，它看起来有点 这样的事情。
而且，事实上，只是那种 逗，我们可以去与此有关。
我要继续前进， 这里打开一个窗口，
我只是要选择新的文件。
而且我要保存此文件 因为像招呼C点。
更重要的是选择 也就是说在短短的时刻。
这是一个人怎么可能 去写一个程序。
包括标准I / O点H，INT主要 虚空，然后打开大括号，关闭
大括号，printf的招呼逗号世界， 反斜杠N，分号，保存，完成。
行。
我已经写了我的第一次 程序，但是它是怎么回事
是难以置信腻味 因为当我真正
运行，当然这个程序， 通过先写使招呼，
然后斑点削减招呼，我们将 通过这个更加详细
在一个时刻，这就是它所做的。
不弹出打开的任何窗口。
它不会做任何事情 特别花哨。
它所做的是什么，我告诉它 这样做，但我们怎么去的？
我们如何建立在那？
好吧，让我们来介绍几个 不同的概念在这里。
>> 所以之一，我们即将开始 使用被称为编译程序。
编译器存在于Mac OS，Windows中， Linux中，任何数目的操作系统的，
我们会尽快为您介绍 环境，我们将使用，
但一个编译器只是一般 术语，指的软件
这需要源代码和 从它产生的目标代码。
换句话说，如果 有作为输入源
代码，像我刚才输入的， 它最终生成目标代码。
代码和目标代码实际上只是 说它输出一个奇特的方式
零的和一个人的。
换言之，源 代码，即使它
会显得有点神秘， 又有点不太友好
比刮乍看之下， 它至少东西
我们人类能理解。
那种它看起来和听起来像 英语，即使它非常简洁。
而在零的编程和 一个人的，因为我们的前辈不得不这样做，
几年前，不是 特别有趣的挑战。
然而，这就是 电脑还是可以理解的。
因此，编译器会让我们从 源代码，目标代码。
这就像用打开文件 编译器，当你保存它，
你得到这些零和一。
所以我们会看到怎么办 在短短的时刻。
>> 但是，让我们现在试图提供一个 上周，这之间的桥梁，
这样即使我们得到红 这类事情，大括号，
和分号，和括号，并 所有这些智力有趣
编程的各方面，这非常 可以理解早早就绊倒人组成，
认识到，所有的思想 今天，是与上。
所以最后，我们看到了这个例子 在这里，Hello World程序。
好了，从今天开始，如果我们想 实施同样的计划，
它会看起来 有点这样的事情。
我们将长期INT什么才解释， 和主，和无效的，和所有的
是，但至少我在这里看到 早已熟悉的Hello World。
>> 同时，这样的事情 功能，打个招呼，
很简单的将是一个 很简单的声明是这样的。
PRINTF的hello world，一些 引用，用反斜杠，
用分号，但 更多的来。
循环，同时，这是一个循环，， 当然，说世界你好一辈子，
而这个人会看起来 多一点在过去的怪异，
但如果我说些什么 像，而真实的，我
然后可以打印出世界，你好 一遍又一遍又一遍。
然后，你可以种 的开始在这里推断，
使用此约定 大括号是一种
像拥抱 代码缩进行那里。
代码的printf的行很像 黄色的一块拼图了上面。
因此，我们不会说永远， 我们要说的，而真正的，
但我们会看到这是为什么在短短的一点。
>> 同时，如果我们有一个循环是这样， 你重复的东西是有限的地方
数字时代，这一个了它的 要采取一些习惯
，但它会说，对于int 我得到零，我不到10，我++，
然后printf的一次。
但是，将是格局。
而对于那些你熟悉的 与AP计算机科学或Java，
或任何数量的其他语言， 几乎所有这些构建体的
迄今为止应该大多是熟悉的。
>> 所以变量。
所以这里有一个简单的划痕摘录 设置一个所谓的计数器为零的变量，
然后永远说的计数器， 然后它改变由一个计数器。
因此，它具有零启动， 再一，二，三。
那么，怎么可能我们介绍，在 这种新的语言有点相似？
诠释计数器等于 为零，而真实的，这
与以前同样的想法 做事永远的，
而我只是去给printf。
而现在它变得有点怪， ％的我，但更多的是前来，
但这些想法是完全一样的。
我们刚才要坚持 计算机是语法
将我们的需求。
>> 布尔表达式，像 SX小于y或x除y以下，
和y小于ž。
这将看起来少了一些 这样，用括号只
像数学中的好措施，只是 确保操作的顺序
是因为我们打算。
而现在，条件。
因此，如果x小于y，表示x是少 比Y，否则，如果x大于Y，
说x大于Y，否则 从逻辑上讲，x必须等于y。
所以，你可能实现 像这样的划痕，
或者你可能实现 它在这个语法。
再次，花括号是种 给我们相同的形状拼图
件，但语法，现在，也许是 开始跟着一些模式。
>> 那么，是什么让我们在这里？
所以我们当时在我们的主程序。
让我们实际上，现在， 用它做什么。
因此，在这种非常第一 行，我们看到犀利包括，
标准I / O，点H，和 然后一些奇怪的角度
括号低于。 INT主要 虚空，然后printf的世界你好。
因此，只要采取的一个步骤。
有人谁以前从未编程， 至少解释这些线中的一条。
使用也许有些 上周的行话。
什么是printf的，例如？
是啊。
>> 听众：[听不清]
>> DAVID J.马兰：是的。
这是一个函数，或者声明， 从上周的术语。
而且它是一个行动 这在做什么。
现在这个功能，或者 这种说法，确实
它似乎需要一些类型的输入？
以及在何种意义呢它 似乎采取的输入，如果是的话？
输入，请问我的意思？
是啊。
>> 听众：[听不清]
DAVID J.马兰：是的。
所以划掉了一些拼图 在这里你可以参数化的。
你可以告诉重复 阻止多少次重复，
所以这是一个输入 排序，并就像划痕
有一个白色的小占位符 你键入的数量，
这样做，我们在此使用 文字世界括号
给我们，圆形 在其中，我们可以将我们的输入。
毕竟，几十年前 当这种语言，称为C，
被发明没有人 预计这是我们的一员，
这些若干年后，我们就 想要一个函数，打招呼。
对？
这将会是很好，如果有一个 拼图，或关键词，
这就是所谓的打招呼，说 从字面上只是说你好。
但是，我们不需要这样。
我们可以有一些低得多 的水平，就像一个普通的打印
命令，这需要投入， 并打印任何我们想要的。
所以现在看到的格局 这将开始出现。
开括号，括号接近是 显然拥抱输入，
然后我看到双 报价两端。
还有奇怪的反斜线 N，但希望现在你
可以开始至少是想象 的printf正在采取某种形式的输入。
还不如用户友好 从无到有，但它只是
就像插在一定的价值已经出现。
>> 好了，现在让我们来实际 做一些与此有关。
所以，有些人可能知道，从 面前逛过类，
与朋友聊天时， 对于许多年
我们使用了一种叫做 该CS50设备。
这是描述一个技术术语 称为虚拟机，这
是一个软件，你的 前辈会下载关闭
课程的网站上免费。
他们还将免费下载一个 软件称为虚拟机管理程序，
一些所谓的像VMware， 或VirtualBox的，或任意数量的
其他工具，并在他们的Mac或PC 或者他们去年无论电脑
而在过去的几年中，他们 将双击图标
运行此软件 所谓的虚拟机管理程序。
然后里面那个节目 他们会打开CS50设备。
和效果是 无论是你的前辈
在运行Mac OS或 Windows中，他或她再
随后有一个新的窗口，他们的 屏幕上运行CS50的环境。
因此，虚拟机可以让你运行一个 的另一个内的操作系统，
而这正是我们所做的事情。
纵观大多当然，我们的 使用称为操作系统
Linux的，特别是 Ubuntu Linux操作系统，并且这
在过去几年的一个非常好的方法 确保每个人都在使用过程中
只是有相同的环境。
你可以使用任何类型的 计算机你真正想要的。
间的缺点，但是， 是它就像两个千兆字节
下载这个东西。
它并不一定工作超好上 人，他们的电脑，也许只有
有这么RAM演出，或者，还是不 CPU速度的太多千兆赫，
所以今年， 这个和其它原因，
有，我们已经过渡 这种环境。
所谓CS50 IDE，它是 基于开源软件，
和支持的平台 一家名为Cloud9
支持在欧洲，那 让我们有本质
这完全一样的环境中 过去几年，但在所谓的云。
>> 那么，什么是云计算？
你可能已经点击 它在你的Mac或PC图标。
什么是云计算？
是吗？
大声一点。
是啊。
它只是一堆电脑 其他地方存储数据和运行
软件等。
因此，它实际上只是这个词去 描述[的法律？可出租？]
居住在其他地方的计算机。
那你，你自己， 不一定拥有。
所以，当你的数据，或者你 计划，是在云中，
它只是意味着它是在人 其他地方的其他人的电脑，
不，最有可能的，在你的 物理笔记本电脑或台式机。
所以这就是CS50 IDE现在。
>> 从此以后，你会去到一定 这将向您介绍网址
要在问题设置1，后面的 周，将接着，在记录在，
给你这样的环境。
而就像刮了 涉及到几个不同的面板，
这样做CS50的IDE有完全相同的。
在左上方这里，你 要看到一个熟悉的文件浏览器。
所以任何一个文件，你 投入这个环境
只是要在那里列出。
文件和文件夹。
在这里顶， 你会看到一个地方
在这里你可以真正编写代码。
最初的C，后来在 长期在PHP和JavaScript，
和，或许为最终 项目，Ruby或Java或Python的
或任意数量的语言 在这种环境下的支持。
它不是在所有绑 到CS50明确。
>> 然后在这里的底部边角， 特别是对于那些更舒适，
你有什么 所谓的终端窗口。
而这个终端窗口允许 你执行任何命令你
想在这个云环境。
它可以让你安装 任何额外的软件
你想要的，因为你所谓的 根或管理员权限。
因此，换句话说，即使这 在云最终主持，
尽管我们有 简化它在一定程度上
默认情况下，从字面上介绍， 感谢Dan Armendariz环，和迪诺，
和CS50的团队在丹·布拉德利 过去数月，一个不舒服
模式隐藏了许多的 最初混乱的干扰。
一切都存在于 代表一个典型的计算机系统
你可能在现实世界中使用。
>> 那么，这一切意味着，和 我们能真正用它做？
让我们实际采取在偷看的程序。
所以，我要打通 实际的环境在这里，
这仅仅是我们的Chrome浏览器 浏览器，它可以是火狐，
可能是IE浏览器， 或一些其他的浏览器为好。
它的全部筛选这里的时刻。
我想实际挑逗 除了这是什么节目了。
因此，让我们来看看，通过放大了 顶部，我做什么，我怎么来到这里。
因此，这里的这些精确 同一行的代码。
因此，这是语句， 正如你前面提到的。
该功能打招呼。
大括号，在 四号线和六号线，
大概是一种包络 该行把它关联
我的节目的本质。
所以实际上，这个关键字为主， 这是在那里上三线，
你能想到的，作为等价物 的，当绿旗点击，
阻止划伤。
所以，这就是我们这里有，是当 绿旗点击，打印，或者说，
你好世界。
>> 但是，让我们来猜测，现在，在什么 这第一个，更神秘的线，是。
夏普包括，开成角 支架，标准I / O点H，
关闭尖括号。
什么，也许这样做， 特别是如果你编程
之前在某些其它语言。
是吗？
>> 听众：[听不清]
DAVID J.马兰：是的。
没错。
因此，这是给你访问 图书馆，可以这么说的功能。
和函数库是 功能别人
中写道，无论是近期 还是很久以前，这样你
不必推倒重来。
举例来说，我们不这样做 要知道，在2015年，
如何编写代码，这使 字符我的屏幕上。
别人已经想通了 用printf函数
这样我可以排序的抽象 远离，或层
之上他或她的 代码，而现在只取
理所当然地认为，任何程序我写的 可以打印东西到屏幕上。
因此，在第一步中这第一行 包括所谓的头文件
为标准库。
所以看到的，在语言 这是我们现在工作
有一个标准库 有很多的功能。
PRINTF就是其中之一，和 该代码的第一行
指给我的访问 这些功能，让我
不必重新发明该车轮。
>> 现在，让我们去下面的窗口 做正是我以前那样。
刚才，当我 通过代码呼啸，
打字出来的第一次， 我很快打字，让你好。
那是什么一回事，你会猜到的？
我到底在做什么？
是吗？
没关系。
是啊。
听众：编译它。
DAVID J.马兰：是的。
这只是编译它。
对？
即使这是完全不熟悉 给你，这是相当英语等。
这当然不是零 和的，所以我还是
需要通过所谓的运行它 程序，编译器，这是怎么回事
把它作为输入，产生输出。
至少，就目前而言， 这个Linux环境，
但这不是先决条件， 这仅仅是我们将开始，
你一般互动 计算机系统这样的
由一个所谓的命令行。
因此，与闪烁 及时和你的键盘，
并没有那么多你的鼠标，而不是 如此多的窗口和图标和菜单，
而一切都是文字。
而且即使这样的感觉，在第一 一目了然，也许，就像一个退步，
它实际上是一个更 强大的表达方式
控制计算机的 尤其是你，
自己，变得更 舒适的少。
这将让你做了很多 不仅仅是微软更多的事情
或者苹果可以让你做 他们的图形操作系统。
>> 所以，当我按下回车键，现在， 什么也没发生这一次
因为很明显的 节目你好是最新的。
什么是命令 我跑了之后呢？
点斜线打招呼，你好世界。
现在，让我们退一步 回来只是一瞬间。
事实证明，让你好只是一个 编译程序的简化的方式。
让我们只是介绍 一块行话，
但随后离开 从它，因为它不是
那么有趣 对于今天的目的。
我们要开始使用编译器 被称为铛，为C语言。
这是所运行的只是一个程序 就像我们在命令行上。
所以，如果我想 编译一个程序，我
已经写在一个叫你好点文件 C，我从字面上只需要输入铛你好Ç
进入。
>> 有趣的是， 由于历史的原因，
如果我不指定 该方案的名称
我想输出，如果我不 对于那些零指定文件名
和的，很奇怪 公约获得通过年前
它觉得那种一 在当时很好的答案，
那么让我们来只是随意调用 第一个程序，我们编译一个点出来。
一个是第一位的字母。
出，它的输出。
因此，我们将调用程序 默认情况下，点了。
这很好，因为如果我想 基于此文本运行程序
环境，我只需要输入 点斜线点了进去。
它会像之前一样，运行。
因此，让我们看到了真正的快速。
>> 所以，如果我回到我的 在CS50 IDE的源代码，
我不是这样做，铛你好婴儿床 c输入，通知，似乎什么都没有发生，
但几乎总是在 这个Linux环境，
没事的时候不好似乎发生，那 意味着好东西居然发生了。
如果您没有看到错误 消息，一切都可能是很好。
事实上，如果我现在做点斜线点 出来进去，我跑我的相同的程序。
我仍然有hello程序 从早期的，因为事实上，它是
将这么多漂亮只是 键入make，而不是记忆
这些咒语 命令，但让我们看看如何
可能会改善在此，仍然。
>> 所以，这是命令 编译代码。
这是运行命令 此后编译代码。
我怎么可以指定一个文件名？
那么就让我们介绍 多一个行话。
当你在此 基于文本的环境，
你会想指定 东西叫做命令行参数。
这是说只是一种奇特的方式， 换句话说在提示符
调整的行为，无论 计划你正在运行。
那么具体的我节目 运行时，通过输入名称铛，
被称为锵的计划。
因此，这是和老同学 中双击相当于
在Microsoft Word或 有些程序的图标。
我不是只键入其名， 但在这个版本的命令，
然后，我有几许O空间 你好你好空间C点。
所以，即使你从来没有 之前效力于这个世界上，
只是采取一种猜测是什么 不划线Ø招呼吗？
或者，究竟说明了什么铛做什么？
是啊。
>> 听众：[听不清]
DAVID J.马兰：是的。
它只是设置文件的输出为 你好，而不是愚蠢的一个点出来。
而且，事实上，让我们试试这个。
所以，如果我现在做的，第一 让我们做到这一点，R M你好。
这就是删除。
它会说删除 普通文件你好，这
是不必要的晦涩难懂，但它只是 手段你要删除的文件，
我键入y（是）。
同时注意，如果你在顶部一眼 离开了，但它并从那里消失。
现在让我做铛破折号o和 我要继续前进，做打招呼，
全部大写，你好点以下。
现在，如果我做点斜线 你好，你会期待什么？
>> 也许这是区分大小写的。
也许这不是。
让我们来看看。
没有这样的文件或目录。
我们可以种作弊被 只是看着左上角。
我是怎么明显 拯救计划的？
所有帽你好。
所以事实上，这是怎么回事 有所作为。
所以，现在的hello world又回来了。
现在，这是一切优秀和良好， 和所有非常令人麻木，
以获取排序在这些陷入困境 细节，但理解它们
是好的。
>> 键入这些越来越多 长咒语
不会是特别 好玩的，所以人们在世界
发明了另一种方案， 几年前，叫
做，那很简单 可以让你输入make，
节目的名称 你想，使
是聪明的，因为它会查看 当前文件夹，又名目录，
如果你有一个文件 名为hello点C，
这是它会编译文件 你到一个名为hello程序。
因此，它是一个更简单的方法 做更隐蔽的命令
我们做了前面。
我们已经预先配置 CS50 IDE知道
它应该做短线O和一些 其他标志，或命令行参数，
过不了多久，我们就会看到。
>> 但是，让我们现在实际上做 更有趣的东西。
只是打字的hello world所有 时间是不是所有的引人注目。
因此，让我继续前进，变革 这个节目，说，你好大卫。
现在，我要在这里下去。
我要继续前进，做让你好。
并再次现在你看到的 使正显示出你的时间越长
命令序列，它的 这样做是因为我们已经预先配置
这样的说法，但我们 不用担心，现在
它在做什么其他的比它 编译点斜线你好，你好世界。
怎么了？
是啊。
>> 听众：[听不清]
>> DAVID J.马兰：是的。
因此，noobie错误。
我注意到这是超级微妙， 但这里的星号，在标签，
只是意味着你没有保存它， 和浏览器和其他程序
做到这一点的时候。
因此控制s或命令 小号应该保存它。
现在让我继续前进 并重新运行该程序。
重新编译。
对，所以这是一个多步骤的过程。
其中没有一个是特别复杂， 但任何时候我们更改文件，
我们需要改变由此而来 零和一，和点斜线打招呼。
哇。
因此，这是很给人留下深刻印象 我们刚刚打印出这一点。
让我们把事情 多一点活力，现在。
>> 那么事实证明，那个喜欢 从无到有，C支持变量。
而事实证明，如果你想 为具有可变，其存储，
不是数字像我们 通常没有与划痕，
但像一个字，或 短语或一个名字，你
可以指定一个可变 是string类型。
所以，我们会看到更多的 这些一会儿就好了，
但事实证明，C，和 很多喜欢它的语言，
有非常特殊类型的变量。
这不只是喜欢代数， 你在哪里得到一个x，一个y和z
而这些都只是始终 号码，在一种编程语言
你可以存储数字，你可以 存储单个字符，
你可以存储整个单词，你可以 存储整个图像，整个声音文件，
和类似物。
因此，我们需要指定哪些 我们的变量的类型。
而按照惯例，我会打电话给我 变量s只是因为它的简洁，
和s代表字符串。
>> 然后，我要保存 这个变量的内部，
就像有划痕 当我使用了一组块，
我将使用 赋值运算符C，
这很好地够平等 签署，但等号做到这一点。
它移动的东西从右侧进入 表达式的左侧。
所以我做了什么，要清楚 五号线，是我已经声明的变量。
我已经告诉了电脑，给我 内存变量，称之为为s，
并且事先知道我要去 要把一个串中它。
而一个字符串仅仅是一个 字符序列。
这是一个词，或一个短语或段落， 但它是一个字符序列。
这不是数字。
是什么字符串我将是 投入的变量？
那么，显然引述 引文结束，“汉娜”。
现在可以看到的新兴模式。
有一个左手的表达。
有一个右手的表情， 由等号分隔。
而只是采取一种猜测，如果 陌生尽管如此，
什么分号做。
什么是它大概是做给我们？
是吗？
>> 听众：[听不清]
>> DAVID J.马兰：是的。
这只是终止该行。
对？
这些计算机想要成为直言 告诉记者，从字面上看，该怎么办。
象花生酱和 果冻三明治的例子，
如果不指定 正是你想要，
它可能会留下来判断或错误。
分号表示， 这就是它的这个命令。
它是超精密，它的 一个很容易的事情离开了。
所以，现在这个计划似乎并没有不 以不同方式表现任何直到我
使其更具活力。
因此，而不是硬可能我自己 名字，让我把一个占位符值。
而事实证明，我知道这 从已经阅读文档，
和所使用的功能为年，即 printf的被设计为动态的。
你不必预先知道 你想要的话把它。
你可以代替有 占位符，比如％的s，这
是要告诉 电脑，放了串在这里。
>> 这串做的，我们要放在那里？
威尔原来，这两者之间 括号，这还记得，划定
的输入的函数，如果有 逗号分隔的事情列表在这里，
我们实际上通过在多个 输入到一个函数。
所以就像一些划痕 块，你可能不
已经打了他们 您的项目还没有或根本，
一些划痕块有两个输入。
两个白色的盒子，你可以 输入数字或单词之中。
因此，为了不C已将类似的功能 printf的，可以采取两个输入。
再次，这个逗号 被隔开。
因此，在英语，再有就是 你从来没有编程之前，
由逻辑printf的是一个函数， 采用两个输入，其中之一
是一个占位符，你会希望 printf的是要与此输入？
这是怎么回事打招呼 汉娜，有希望。
因此，要做到这一点，我们需要保存它。
我要缩小。
我要背下来去这里 并说，让你好进入。
呵呵。
什么是错的，而实际上 这是一个相当巨大。
我有6行代码 而像12行错误。
因此，期待这一点。
所以，这是怎么回事吗？
因此，拇指这里最好的规则， 特别是当你开始了，
不要被分心 东西在底部。
其实，我很刻意 只是向上滚动
因为很多时候，一台电脑 不是所有的明亮的装置。
这将混淆。
如果它看到一件事， 它不理解，
它可能会误以为其他 行代码是不正确的，
即使他们是完美的罚款。
所以，你总是想工作 在错误自上而下。
诚然，这是 超级神秘的时刻。
>> 错误，使用未申报 标识字符串。
难道我的意思是标准？
不，我的意思是字符串。
而它的指向，也许这是一个错字。
有点像，拼写检查的 十分怪异的方式，但在这里的原因，
你就会知道这 仅仅通过实践，是
它原来是串 在C中不存在事实上，C
是一个非常古老的语言， 而且这是非常低的水平，
而且它不会很多功能 您可能已经长大了
有，如果你有，事实上，程序 在Java中，因为一些你有，
但你可以教它新的东西。
事实上，我们已经做到了这一点CS50， 即使在学期结束时，
所有这些培训车轮 将已取消，
我们所做的这些 最初几周
最初是我们还 你包括CS50点小时。
这是一个头文件。
更上的未来。
>> 这是一个包含函数的文件 我们已为你写好。
而这些功能中的 获取输入功能
从用户，像字符串，和 号，和实数，等等。
但它也有一些快捷方式。
它定义了布尔作为数据类型。
C没有真的还是假的。
但是，我们可以给它的概念 真的还是假的这个库的方式。
它也没有一个串 内置的，直到我们有这条线。
因此，这行代码指示 编译器，哎，铛，看
在这个文件中的一个整体 一串代码CS50
写这样 使用此文件的人
可以认为是理所当然的 他们已经添加的功能。
>> 所以，现在让我继续前进 并清屏，
如果好奇，我只是说控制 l每个时间来清除屏幕，
或者你可以键入清晰。
我只是现在要继续前进， 类型做出招呼，一切都很好。
还有一个神秘的输出，但 这不是一个错误的信息。
现在，如果我做点斜线打招呼，并作为 一旁，点斜线是不熟悉的大多数。
这只是意味着，点手段 当前目录。
所以，如果你曾经使用过 DOS或Linux或UNIX
你可能做了什么 如CD点点，哪里
点点意味着倒退 时间，或者倒退，或者更高了
在目录中。
点只是意味着看在 当前目录。
我希望你好，这是在这里。
事实上，现在它汉娜说你好。
如果我再改 玛丽亚，重新编译
它将使你好，点斜线 你好，该计划不断变化。
>> 但是，这仍然是一个 非常愚蠢的计划。
如果我想船这个程序， 或者把它送给一个朋友，
还是把它给玛丽亚和汉娜 对于这个问题，这很好。
我可以自定义为他们两个， 但它永远不会是动态的。
一旦它编写的，他们不能改变它 下到这些零和一。
所以，我们做了一些更聪明？
如果有什么，而不是硬编码 到程序这个人的姓名，
如果我们只是得到了什么 对需求的字符串？
>> 因此，换句话说，让我做到这一点。
我要重新编译该程序。
让我放大在底部了。
让你好点斜线打招呼。
现在什么也没有发生。
我们可以得到一个快速的志愿者 使事情发生？
上来吧。
你叫什么名字？
>> PANCHO：潘乔。
>> DAVID J.马兰：Pacho？
上来吧。
一旦你在这里得到了，这是 将是非常给人留下深刻印象，
但它更有趣 比我打字吧。
如果你想继续前进，键入您 名字，我做了这个节目只为你。
只要输入你的名字。
输入。
太好了。
好，非常感谢你。
>> PANCHO：非常感谢你。
>> DAVID J.马兰：OK。
>> [掌声]
>> 这是很亲切。
干得好。
我们做了什么？
因此，我们终于，至少 做这个节目的动态。
现在，它仍然是肯定 设计给人留下深刻印象，
但我们终于有能力 现在写代码提前，多
如printf的作者， 然后动态地
适应基于输入已是 递，或者由程序员，
或由人谁实际上 与节目进行交互。
因此，让我们其实现在就试试 做一些其他结构
看看如果我们不能使节目 自己更复杂。
因此，让我们继续前进，而不是 写这篇从头开始，
我要进入​​今天的 源代码，而这一切
可在球场上的 网站，你可以将它拖放
到你自己的环境 周五来一次问题
集1给你 说明，或者你可以
这样做在命令行 很好，但更多的惊喜P中设置1。
>> 让我们来看看这是什么程序 这里所说的，加法器C点。
现在，我已经评论 它，但什么是新的？
乍看之下，什么线 代码是完全新的？
也许不能从根本上 陌生了。
>> 听众：[听不清]
DAVID J.马兰：是啊， 因此INT x等于得到n个。
我们从来没有看到任何这 前，但int是可能
什么样的符号 变量，[？从？]一个整数。
所以诠释的整数。
这只是更加 简洁。 x只是随意的。
x和y和z是仍然 对数字相当合理，
但一般我们使用的话，一旦 我们的程序变得更复杂。
获取当然，INT， 就像GET字符串，
很可能会得到 从用户一个int，
然后我们要 做同样的事情与年。
而且显然，尽管这 最后一行，24，看起来比较复杂，
它会说，这个总和 而且，它是此其他东西。
>> 而百分之通知我 大概是指什么呢？
什么样的角色％的 我显然是服务？
这只是占位符。
对？
百分比S为字符串， ％的i是整数。
还有的将是百分之˚F 对于浮点值，这
仅仅是一个数字带小数点。
换言之，一个实数。
因此，让我们实际编译这个 真正的编程速度快，不作加法。
哎呦。
好机会。
所以注意在这里，这段时间我的用户 名称此帐户jharvard。
我是在CS50 IDE，又名IDE50。
而现在这里用蓝色，是一提，但 从环境中我的。
而事实上，如果我放大到顶部 在这里，请注意，我有一个IDE50
我看你种这个词， 把你的头转向一侧，工作区。
概括地说，事实上， 我看到波浪线斜线工作区
意味着，在这个文本 基于命令的环境，
我在文中相当于 这种图形文件夹在这里。
所以，当我做点斜线 加法器，它说没有规则
使目标加法器停止。
我不知道这意味着什么， 但它的坏的某些原因。
没有这样的文件或目录 更清晰。
它在哪里呢？
根据我的点击 前面打开该文件。
哪里会是什么？
>> 这可能是在源 1瓦特，周三，
我可以看到它，的确， 如果我打开了。
还有加法点C，但在 这种基于文本的环境，
再次，我必须要超明确。
如果我想改变目录到 源的1个星期三，我需要输入，
CD空间源的1个 周三进入现在
我迅速变化 给我一个视觉提示
我，真的，别的地方 在我的环境，
但现在我能做到让 加法器，它似乎工作，
点斜线加法，给我一个整数。
一。
二。
一和二的总和为3。
但是，如果我不配合， 让我们看看得到INT一样。
给我一个整数。
第
重试。
行。
精细。
50。
好吧。
因此，它终于合作。
而这部分的 功能，这些功能
可以有内置的为您服务。
>> 因此，实现内部 弄INT，什么编程
上周构造可能是在 有强迫重试的这种行为，
重试，重试？
是的，有可能是 某种循环。
这将看语法 从头开始的块不同，
但是这确实是 什么是里面的文件。
而在几个星期的时间，我们将 其实看看CS50库
至于里面有什么，但有 一个循环气势正是这么做的。
>> 让我们玩一个愚蠢的小 比赛在这里与此文件。
零点零一C点。
我们只是去一般 从零开始计数。
我一直滚动过去 有些东西在上面。
在这里用蓝色，划定了所有 这些明星和斜线，
你们谁编程 之前，那是什么？
为什么我们保持跳过它？
什么？
>> 听众：这是一个注释。
>> DAVID J.马兰：是的。
这只是一个评论。
这是对人类评论 阅读，在我们的情况下，
告诉我们的文件的名 是谁写的，和它做什么，
这样你就不必 通读代码
知道这个文件是一回事。
这只是一个说明，但 在功能上它是无关紧要的。
而且我甚至可以从删除 我的文件，并没有任何影响。
该多汁线是这些 前两个在这里，现在。
INT主要空隙是等效 我们当绿旗点击，
所以我们要离开的是 今天，我们会回来的，
最终，至于是什么 int和无效的，但现在，
请注意我做了什么 在这里，你还可以，
如果你有一个在网上 发表评论，如果您有
一想到要分享 关于一个特定的代码行，
在C约定是做斜线 斜线，然后几个简洁的话，
不是一个完整的句子， 一般不是一个段落，
这只是说明了你，或者你 TF，或其他读者或同事，
你的代码做。
因此，而不是一定要看 在这一点，从线推断
9和10中，是什么 该做的，八线
我只是给了评论 问用户的一个整数，
然后，我没有想太多硬 什么线九10的。
我只知道，那是什么 总的来说，他们正在做的。
>> 怎么样？
那么，这里的提示。
下面是整型的获得。
以及基于所述前一 的行为，好像GET INT
是足够聪明，以确保 人类配合并给它
一个整数。
但是，现在我们看到的这个。
这让人想起划伤。
我声称我 分析用户的输入，
但有些不准确。
而这显然是在C是怎么 我们表示了，如果其他人的一个分支，
一个岔路，但我 说有点不准确。
这是什么程序的错误吗？
关于进一退？
是啊。
>> 听众：[听不清]为零。
>> DAVID J.马兰：是的。
所以，如果我输入零，让我们考虑 正是这样的情况下，或墙角的情况下，
如果你愿意。
如果我输入为零，因此它的 块将会显然抓住它？
该如果还是别的？
在其他，它会说， 你选择了一个负数。
事实上，零是不应该 是正或负，
因此，这将是错误。
这将是一个错误。
那么，如何才能解决这个问题？
有人谁以前从来没有编程？
你想要 -
>> 听众：[听不清]
>> DAVID J.马兰：缩回？
>> 听众：[听不清]
>> DAVID J.马兰：哦，你有吗？
有人谁以前从未编程。
想试试你的手在 这一点，在红色的衬衫吗？
上来吧。
哦对了，上来吧，如果你不介意的话。
所以从未编程 之前，你叫什么名字？
LAUREN：劳伦。
DAVID J.马兰：劳伦，没事的。
因此，修复这个bug给我们。
你从来没见过C，据推测， 大概没有其他语言。
因此，解决这个问题的程序我们。
很高兴见到你。
无压力。
LAUREN：是的。
>> DAVID J.马兰：但同样，如果这 豪赌按计划进行，
外卖，这里将 是，刚刚再次启动
注意图案和 从现有的语法推断
怎么回事，你可以表达 你自己，没有双关语意，为了
捕捉到一些额外的场景。
因此，我们说，否则，如果。
printf的，不错。
而与CS50通知 IDE和frankly-- IDE
代表综合 开发环境。
这说法只是一种奇特的方式 一个程序，可以帮助你的程序。
它确实人性化之类的东西 当你打印一份括号，
它会自动给你其他的。
该假设是，你是 最终将要键入，
而且还做它用引号。
>> 所以，我很喜欢23行。
99％的存在的方式。
有人想附和小费？
我听到分号观众。
好。
这样就完成了。
而现在，我只是有一点点 惊愕与线21。
我们想得到怎样的表现呢？
什么样的问题，我们希望 问，你觉得呢？
所以以前我们问的问题， 如果n大于零，做到这一点。
否则，做到这一点。
因此，我们需要选择一个 要问的问题在这里。
听众：[听不清]
DAVID J.马兰：好。
因此，如果n等于零。
优秀的。
因此，让我们暂停一下。
谢谢你这么多顶着这一点。
让我给你一个小当之无愧 压力球，或许还有。
因此，我们快到了。
事实上，劳伦，如果你不 心，让我做一个调整位置，
刚需，甚至一致 我们在划痕看到的，是什么
做我想做的事与线 21和24，只需再次基础
我们如何在划痕这样做，也许？
>> 听众：移动它。
>> DAVID J.马兰：是啊，动不起来。
所以其他条件，第三，或 第四或第五或最终分支，
应该已经来了以后， 这还只是按照惯例，
只是因为如果你愿意。
所以，我需要做这样的修改。
我需要把我的 大括号回到这里。
而现在，这一计划将编译。
我们是如此接近，但有 一个非常，非常微妙的错误。
让我们看看会发生什么。
>> 首先，让我继续前进，缩小。
我要继续前进， 键入使病情为零。
哦，我撒谎了。
现在，编译器 其实很聪明。
我真的不明白 它的错误消息。
使用赋值的结果 作为不带括号的条件，
显然是不好的。
但是，这是什么意思？
>> 好了，寻找模式 在代码中，我们以前见过，
什么是17行实际上做， 尽管劳伦稍微意
除此以外？
是啊。
>> 听众：[听不清]
DAVID J.马兰：是的。
所以请记住等号，显然 正如我们以前使用过它，不等于。
它的任务，由右至左。
因此，线17的那一刻 是一个条件，它的
括号内执行代码， 但该代码执行时，
什么是发生在零值？
什么是发生在n的值？
成为零。
因此，如果n变为零， 并再次，根据上周，
我们一般说是零 是假的，一个是真实的，
或者是一个没有为零。
所以，真与假，一年0。
如果n为17行的已 给出的值0，是零真的吗？
第
根据定义，零是假的。
这是我们的约定 要坚持前进。
所以才会线18，19和20 现在以往任何时候都适用，逻辑？
他们不能。
因此，我们问的问题 但不太精确，
你不会不知道这一点，除非 你已经看到了，在C解决方案
就是当你想表达 平等，你说等于平等的。
所以等号已经用完 通过转让，由右至左。
等于等于手段平等的。
如果你真的想你的心 弯曲，JavaScript和PHP，
还有等于等于平等，这 意思是另一回事，
但我们会去，不久。
>> 所以这是一个简单的修补程序，但实现 超级容易犯这个错误，
然后不知道奋斗 对于分钟，如果没有一个小时，
为什么我的代码不 执行我打算？
这是因为你没有告诉 它正是你的意思。
所以这几乎是 完美的，这是伟大的
我们跨越这两个小迷迷糊糊 的事情，因为现在如果我们解决这些问题，
我做的做条件为零 点斜线条件为零，
我想一个整数吧。
让我们来看看。
第
它会强迫我去做。
所以42。
我挑了个正数。
所以，现在我该怎么办证明 这个程序正确吗？
如果你是一个数学家，你不能 真正通过反复试验证明了这一点，
对？
你不能只是校对 例子，但至少
作为一个程序员，我们不是 要试图证明现在
这其实是 正确的，但我也许应该
测试一些代表性的案例。
>> 我测试过42。
我可以测试43。
我可以测试44。
测试45。
对？
但我可以这样做很长一段时间。
什么会更多一些 有趣的情况来试试呢？
听众：[听不清]为零。
DAVID J.马兰：所以零。
当然可以。
不错，我们已经知道了这个时候， 由于劳伦的新代码。
什么是另一个很好的例子来试试呢？
听众：消极的。
>> DAVID J.马兰：负之一， 或许真的有点大，
所以也许负42， 但在一般情况下，当
测试你的程序 向前走，你
将要思考 给自己，喜欢什么
是根本不同的情况。
我敢说负的情况下， 一个正的情况下，和一个零的情况下
相当多轮这些了。
让我们来看看这虽然的一个变种。
条件之一。
这是一个正确的解决方案在这里， 所以，你会看到两个和网上，
如果通过行走 演练，一般会
这些增量逐步直到我们 得到完全正确的方法。
如果我们想问问 两个问题在一次？
>> 让我开了这个代替。
非开关，其原因 我们会看到另一个时间。
什么是新的语法吗？
目前，我正在玩游戏 其中，电脑提示
我，给我一个整数 1和10之间，
然后我判断用户的输入。
在英语的基础上， 你在这里看到的代码
在蓝色的，这是什么程序在做什么？
听众：[听不清]挑 一个或大或小的数目。
DAVID J.马兰：是的。
这只是裁定是否 我挑了个大，或中，
或基于一个非常小的数 小，中任意定义，
和大型这里，但通知 语法这就是新的就是这个。
有没有比int或等于少 签，或大于或等于签名，
其中一个是比其他，您 可以表达如Microsoft Word。
因此，在一种编程语言，你 通常只是做两个字符，
一前一后。
又是什么这可能 代表，符号与符号。
听众：[听不清]
DAVID J.马兰：是的。
这只是意味着因为它 事实证明，C的作者
使用单一符号， 你可能会认为
将是完美的概念 的和，已经用完，
居然这么符号与符号 抓住我们真正想要的情况。
>> 现在让我们在两个东西绊倒。
让我去进取，不断开拓的。
东西是有点令人担忧。
不精确C点。
让我介绍了两件事情。
一，请注意，我们所能做的 数学，因为就像以前一样，当
我们做了加两个数，x和y的。
这是什么程序显然是在做什么？
我不评论它， 我已经介绍％的楼
但我很快前面说 百分比f为浮点
值，这是实数。
东西带小数 点，这不是整数。
你觉得这个计划是 试图证明我在屏幕上？
是吗？
听众：一个比10的结果。
DAVID J.马兰：是的。
什么是1的结果除以10。
对，因为大家都有可能 长大了知道一个超过10
是什么？
是的，这只是1/10或0.1。
对？
因此，让我们看看这实际上是。
因此，让我继续前进，并保存。
让我去到这里。
请不精确点斜杠 不精确，并且还请注意，
在Linux环境下，你不 必须输入了不准确，并采取
整天。
它通常，如果你按下Tab键，就 将完成你的思想给你，
基于那些词语 可在当前目录。
行。
所以，你是对的。
一个除以10，事实上，0.1。
不过，我有点好奇。
而事实证明的printf 支持某些功能
因此，你可以指定不止 小数点的默认数量。
所以，如果我想看到10进制 点我可以做个百分点，
为占位符，点 10，给我10小数点，
然后还是浮点 值，和，为一边，
这是什么反斜线Ñ 显然，我们一直使用的是？
事实证明，这是一个 符号为一个新的生产线。
这是非常明确的方式 说法到计算机，
将光标移动到下一个 之后，你行就大功告成了。
我们将看看会发生什么 当我们不这样做。
>> 让我重新编译做出不准确。
现在点斜线不精确。
行。
仍然是对的。
一个除以10。
现在，我得到一个 有点好奇，但。
如果我看20十进制 指出，重新编译，重新运行，
并作为预留 速度快，你也可以使用
你的向上和向下箭头 翻阅历史记录，
所以你不必守 重新输入这些命令，回车。
呵呵。
我不知道在小学。
好了，所以让我 看到像29的地方了。
也许这只是一个侥幸。
也许我的电脑怪怪的。
这不是一个东西，对不对？
它做的事情确定性。
因此，请不精确。
OK，这是搞砸了。
那么到底是怎么回事？
>> 因此很明显，你 老师一直趴
给你这一切时间 原因，我们不久就会看到。
但是，让我们结束与另一个程序。
这是一个小程序 有人在几年前写的，
它实际上是一个比赛的一部分。
没有人真正编写代码 这样，如果你这样做，
这是文体上的问题。
但人们做到这一点的吹牛的权利。
要写出最混乱 看程序，
但是做一些有趣的事情。
和记我以为我们会离开 今天，在科尔顿发挥我们在这里，
要运行这个程序， 其中，即使在只使用
下在该文本为基础的 环境，给了我们这一点。
该死。
>> [笑]
>> 支持。
[听不清]Ç破折号L M。
你会看到神奇 咒语，我们不久就会看到。
[听不清]好吧。
现在，你甚至可以 做这样的事情。
就是这样。
对于CS50，我们将看到你在星期五。
>> [音乐播放]
>> [掌声]