>> [音乐播放]
DAVID马兰：大家好。
这是CS50的超部分。
分配的部分将不 开始一个星期。
所以今天，我在这里with--
>> 玛丽亚：玛丽亚。
DAVID马兰：--to实际 看看问题
设置之一，课程的 第一周的材料，
让你用面向CS50 IDE，有点 的Linux，操作系统那的
上IDE中运行，以及 看看一些过渡
从零开始到C领先 长达问题集之一。
>> 因此，事不宜迟， 在问题集中的一个，
你会是 推出CS50 IDE，它
这是基于网络的节目 我们为了使用环境而定
写程序。
它的设计看起来非常 让人联想到典型的计算机
运行的操作系统 系统称为Linux。
但是，它在所谓的云， 这意味着每个人都在类
其实可以有他或她的 自己的帐户，并使用它，以及。
>> 因此，大多数人可能从未使用过 之前或者Linux环境
甚至一个命令行环境。
和命令行 环境是不同的。
它的所有文字。
它的所有键盘命令。
而且它没有鼠标移动，没有图标， 没有对话窗口，没有菜单。
这是纯粹的文字。
所以刚开始，它种 的感觉就像一个步
向后复杂的条款。
但它最终被很多 功能更强大，当然，
对于计算机科学家，最终。
>> 因此，让我们一起来看看。
在这里，我在CS50.io，通过这 您可以登录到CS50 IDE。
而就像在刮，有 三个主要方面来此屏幕。
等的左手侧，我们有 会是怎样的文件浏览器。
还有的这个文件夹中 顶，这是正确的，现在空
因为我摆脱我所有的 超部分之前的文件。
而这也正是我们将 保存我们写的C文件。
在右上角，我们有一个地方， 我们所有的代码会得到写入。
事实上，如果我点击这个加号，这 是打算让我选择新建文件。
在这里，我可以开始写C代码，或者， 确实，任何数量的其他语言。
>> 然后在底部的地方 说jharvard @ ide50--和你的将
说的东西有点 different--什么这个叫什么？
终端窗口。
是啊。
因此，终端窗口 所谓的命令行
接口，通过它，你可以进行交互 与底层操作系统。
而现在，我们要 让很少使用this--的
只是编译，看看 我们看到错误消息，
并运行我们的程序。
但最终，我们将 这样做的多，以及。
你甚至可以安装软件 和管理您的工作空间
CS50在IDE中，也是如此。
但更多的是一些其他的时间。
>> 因此，让我们继续前进，写 一个非常简单的程序只是
经过一个热身 hello.c的，这也许就是
我们可以写出简单的程序。
我已经打开了一个新的标签。
我要继续前进， 说包括标准io.h.
然后，诠释的主要（无效）。
然后的printf（“你好，世界” 反斜杠N，密切报价，
关闭括号和分号。
>> 好吧。
所以，现在发现我的窗口没有标题。
所以，我很快会 上去文件，保存。
而且它是非常重要的 我把这种不是“你好”。
所以有一个非常常见的错误， 尤其是在问题的设置之一，
是意外只是打电话给你 节目“水”和“贪婪”和“马里奥”
或“信用”等。
但是，你真的想使 确保您有文件扩展名
因为这是唯一的方式， 编译器和还代码编辑器
知道你 实际上编写C代码。
因此，让我继续前进，然后点击保存。
>> 现在也一样，什么CS50 IDE 已经为我们做的这也是
语法高亮一切。
因此，它是由一切非常丰富多彩。
而整个目的 不能正常工作。
这只是吸引我的目光投向 在概念上不同的部分
这个方案的。
因此，让我们继续前进，编译这个。
我可以编译此 在几个方面。
并且在一个星期的 老派的方式，我们做了
这是字面上的 命令line--“铛hello.c的。”
然后，我敲回车。
而且似乎什么都没有发生 在终端窗口。
但没有改变的IDE？
其中，再次，IDE只是手段 集成开发环境。
它是说一个奇特的方式 这个集成开发
环境，用于开发软件。
那么，在UI没有变化？
你有没有注意到什么 这是不同的，玛丽亚？
>> 玛丽亚：我发现了一些 在IDE50夹在这里。
>> DAVID马兰：是的。
所以在这里，不仅 我们是否有“hello.c的。”
我们也有“的a.out”，这是 样一个程序一个愚蠢的名字。
不过说实在的，这是一个默认的名字 当你只是编译代码的程序
不要告诉编译器 什么样的文件输出。
所以，如果我要运行这个，我 需要告诉compiler--
或者说，我需要 告诉工作区，我
要运行调用的程序“的a.out。”
输入。
还有的“你好， 世界“。现在的”./“。
其实是很重要的。
虽然通常我们只 写的命令的名称，
当它是你已经计划 写的，你要说“./”
因为这明确地告诉Linux 要运行一个名为程序
“a.out的”这是在这一点，在那里点 意味着这个目录是我目前
中，这恰好是 所谓的工作空间，“a.out的。
因为如果我只是说：“a.out中，”回车， 我要得到“a.out的命令不
找到“因为computer-- 因为我发明了“a.out的;”
它没有附带computer-- 不知道去哪里找它，
即使它是正确的 在我的鼻子，可以这么说。
好。
所以，我们可以改变这 是“铛邻打招呼hello.c的。”
如果我敲回车，什么程序 这是怎么回事输出给我吗？
什么是文件的名称？
是啊，在后面。
那就对了。 “您好。”
因此，“你好”将是 节目的名称
因为我们使用了所谓的 命令行参数，这仅仅是
改变的行为的一种方式 编译器实际输出
特定的文件名。
事实上，如果我放大 并寻找在这里，
现在我不仅是“的a.out”和 “hello.c的”，而且“你好”，以及。
所以，现在我可以做“./hello，”回车。
还有的“你好，世界”。
但lastly--这 现在将公约
我们在整个​​使用 学期，typically--
是你也可以只是说“让你好。”
事实上，它说这完全取决于 迄今为止，因为它已经存在。
让我继续前进，捞出，用 rm命令，这两个“的a.out” -
并说“删除普通文件a.out的？”
这只是意味着，你 确定要删除吗？
我会说是的。
然后，我会删除 “你好”，而不是“hello.c的。”
我会说“是”明确， 但“y”为足够，以及。
>> 如果现在通知我 键入ls--其中，召回，
意味着列表中 - 它列出了所有 在我的文件夹中的文件。
事实上，如果我放大 出去看左上角，
它证实了什么 此文件夹中，甚至
虽然它在这里标注为IDE50 而不是工作空间，它只是“hello.c的。”
所以，现在在这儿，如果我 执行“make你好”，回车，
现在我看到一个更长的命令，但一 那将会更复杂的命令
将在今后数周内有用。
现在我可以说“./hello。”
>> 因此，让我们快速浏览 一些其他的Linux命令。
那么我们为什么不采取一步 回来居然看C的具体
一般，从头开始转变 到C，然后总结了一下
在第一个问题 在C设置的所有权利。
所以我要继续前进，只是干净 我的工作区控制-L刚
保持屏幕整洁。
但是，没有功能 影响并非如此。
>> 回想一下，我们已经看到 一些命令了。
因此，我们已经看到了铿锵，通常你 不必手动执行了。
我们将改用化妆。
但是，我们也看到了LS，它显示了 在我的目录中的文件清单。
现在为什么那里 - 有两家 现在的文件，“你好”和“hello.c的。”
为什么会出现一个明星或 之后，“你好”星号？
那是什么表示，基于 对我们在每周一看见？
你怎么看？
什么是星意味着什么？
>> 玛丽亚：For--节目“你好”？
DAVID马兰：“你好*”。
是啊。
哦耶？
哦，可执行。
那就对了。
这样就意味着 “你好”是可执行的。
因此，我们确实，这就是为什么 我能做到“./hello。”
好吧。
所以，还有什么我可以做吗？
嗯，事实证明，我可以 还创建目录。
因此，让我继续前进，创造， 例如，一个“PSET1”目录中。
而问题集规范 可以让你做的正是这一点，
所以你不必今天记住。
但“MKDIR PSET1”似乎 到没有影响。
但同样，没有错误信息 通常是一件好事。
所以，如果我输入“LS”now--啊，现在 我有一个名为可执行文件
“你好，”一个C文件名为“hello.c的。”
然后是斜线，所以 讲，意味着这是一个目录。
>> 因此，我们确实，现在我要打开它。
我不双击它像 在图形用户界面，图形环境。
我不是说“CD PSET1。”
输入。
没有什么有趣的似乎有 除非发生了我的小提示
这里 - 这是提醒Linux的方法 我我在哪里，所以哪个文件夹打开。
这只是明确地告诉我， 相对于图形。
如果我键入“ls”，为什么我看到另 立刻提示，你认为，
当我列出PSET1的内容是什么？
玛丽亚：你可能不 在有什么。
DAVID马兰：是的。
然后我们还没有明显 在那里创造了什么
因为我刚刚创建的目录中。
现在，如果我想创建一个file--为 例如，我可以创建一个新的文件。
然后我会去 保存并保存为，
像“mario.c”如果你正在做 PSET的一个标准版本。
然后，像任何Mac或PC，只 选择文件夹“PSET1，保存。
而现在的文件是空的。
但是，让我们再次放大一秒钟。
让我们在这里做的LS。
现在我们看到的“mario.c”。
>> 因此，有一些其他的命令 值得记住了时间 -
清除或控制-L是我所 被击中; MKDIR我们已经看到了;
RM我们所看到的，还有，这是 去除或删除文件。
当心你可以also--，如果你看看 在网上的教程，你将RM -rf
是说一个很常见的方式 删除有东西在它的文件夹。
只要是超级，超级小心。
-rf意味着递归 删除不管它是什么
你想删除 并强行将其删除。
这样循环的手段，如果它是一个文件夹 与文件夹的文件夹的文件夹，
删除所有的人。
并强行手段甚至不 问我是或不是，我是肯定？
所以这是一个超级危险方法 删除很多东西很快。
但beware--往往做一个勇敢的 学生意外删除，也就是说，PSET
1，例如。
>> 玛丽亚：如果他们只是 做-r，他们会
问他们的每一个文件。
>> DAVID马兰：这是 适度烦人。
>> 玛丽亚：是的。
>> DAVID马兰：所以这就是为什么 我们这么多人，自包含，
我在使用-rf的习惯。
但它是危险的。
因此，买家当心。
然后，MV是怎么样的 有趣的命名。
因此，这是移动命令， 这感觉有点怪异
因为你的确可以用它来 从一个地方移动到另一个文件。
举例来说，假设我搞砸了。
假设我创建 一个新的文件处理器集。
我将它保存为“greedy.c。”
但是假设我不小心将它保存 在IDE50--所以在我区本身
而不是在PSET1。
>> 你可以看到尽可能多的左上方。
有“greedy.c。”
还有的几个解决方案。
所以一个，我可以使用 超级用户友好的方式
只是拖放。
而这实际上 解决这个问题。
但是今天，我们想看看 更神秘而强大的方式
对这样做。
因此，让我走“LS”的PSET1。
而我只看到“mario.c。”
让我继续前进，做“CD ..”。
所以CD再次改变目录。
“”是指什么有关系吗？
上次我说：“CD PSET1“进入PSET1。
所以当我说“CD ..”，我在做什么？
向后。
是啊。
>> 因此，这将所谓的父母。
进入上一层，像 退出了一个文件夹中。
所以输入。
事实上，看看它的所作所为。
这让我感动刚刚进入工作区，而不是 成PSET1，这是在工作区中。
而现在，如果我输入“LS” 有一大堆的东西。
在有“greedy.c”。
所以，现在让我用MV来字面上 移动“greedy.c”到PSET1。
所以很多Li​​nux命令 工作完全是这样。
他们没有参数或者他们需要一 参数或他们采取两个命令行
参数等等。
在这种情况下，它的 从字面上做什么
它说，尽管succinctly-- 移动greedy.c到PSET1。
输入。
好像没有什么改变。
但是，如果我再次做了LS，贪走了。
如果我做“CD PSET1”，回车，然后 LS再次，现在是在正确的地方。
顺便说一句，如果 一些reason--特别是
如果你有间歇性 网络连接
或者你走动 校园里与你的笔记本电脑的盖子
关闭，然后打开它 再次和您的工作空间
似乎有点不同步，没有什么大不了的。
只需重新加载浏览器 窗口，它应
重新同步，以使左侧 文件浏览器看上去完全
如终端窗口。
不用担心。
如果有疑问，重新载入页面，所以 只要你已经保存的文件。
好。
因此MV也可用于重命名文件。
让我们来看看 在这份最后的命令。
所以suppose--并且这是 超级常见的，也很早。
有些学生偶尔创建一个文件 所谓的，让我们say--什么别的？
像“WATER.C。”
所以，我就吆喝，为 没有任何理由，全部大写。
但是这不是 正确的文件名，
如果仅仅是因为我们的问题集 规范没有告诉你
将文件保存为全部大写“WATER.C。”
相反，我们预计 小写的“water.c”。
而且，事实上，这是 问题的，因为check50，
你要去一个程序 在的问题，以满足
设置一个自动测试 你的代码的正确性
是要骂你，如果它不能 发现在所有的小写字母“water.c”。
>> 所以我需要解决这个问题。
因此，许多不同的方式来 做到这一点，其中第一个
需要控制或右键单击 文件名，只需要改变重命名。
完全好这样做。
但同样，今天，让我们 做一个小票友。
让我们用MV来改变 “WATER.C”到“water.c”。
所以，你还可以用第一个参数 将其重命名为第二个参数
如果第二个参数是不是在 事实上，文件夹或目录名。
>> 好吧。
最后，一​​点点trick--所以我在 此刻我的工作区目录。
如果我想进入PSET之一， 我当然可以键入“cd PSET1。”
但它是如此繁琐的输入“PSET1”或 长文件名或目录名
仍然。
所以，很多时候在Linux中，有什么 你能做的就是开始输入“PSE”
和刚刚获得无聊，打标签，并让 计算机数字出来给你。
超级有助于进入这个习惯。
唯一的缺点是，如果你有 启动多个文件或文件夹
以字母“P”或 “PS”，你可能有
键入前几个 电脑知道该怎么做。
>> 玛丽亚：我们喜欢的快捷键。
>> DAVID马兰：这将 为您节省了很多时间。
而且，正如我们所说的讲座，你 可以在历史上滚动，上下，
找最近执行 命令，以及。
好吧。
所以，现在，让我们把注意力转回 以一个简单的程序，你好世界。
因此，我们完全编译这一点。
而现在，我们为什么不拿 看看数据类型
然后从一些过渡 相应的划痕块C.
玛丽亚：真棒。
所以，现在你已经开始 C语言编写程序，
我们将开始讨论 有关数据类型和变量。
因此，某些数据类型，你 想知道从现在开始
是那些是 以蓝色突出显示。
因此，我们有INT第一， 它代表的整数。
而持有整数，因为你 可能具有guessed--所以1，2，3，
和任何其它整数 你能想到的。
>> DAVID马兰：而且也不利。
>> 玛丽亚：而且还消极的，是的。
和0。
然后我们有花车，其中 是浮点数。
所以这是所有的实数 有小数点。
所以5.0，5.2，并且甚至更 小数点后的数字，
同时，也是消极的。
然后我们有焦炭这是一个字符。
因此，我认为我们谈论 这在今天的讲座。
但是，我们有字母，example-- A， 乙，C--可以存储作为char。
但是，我们有更多的符号 可以存储为char。
而这些被存储为ASCII。
>> 然后我们有布尔， 这是布尔值。
而那些评估为True或 假或1和0。
DAVID马兰：重温使 布尔来自CS50库。
所以，它没有内置到 C，但它的超级有用
以具有真假的概念。
而且即使你 可能think--有趣的事实。
布尔技术上需要多少位， 确实，表示真与假？
多少位，你认为 你需要，最大限度地？
是啊，只有一个。
所以，事实证明，Ç 不能给你只是一个位。
度量的最小单位 你可以为8。
所以这是一个有点浪费他们你 使用中的整个字节或八个比特，
代表真或假。
但是，这只是它的方式 由CS50库中实现C语言。
玛丽亚：然后那些我们 不是要谈论的广泛
右now--双， 这是更大的浮动。
龙多空 还可用于整数。
DAVID马兰：的确。
在PSET一个黑客版， 我们实际使用很长很长。
但对于标准版， 它不应该是必要的。
玛丽亚：酷。
好。
所以operators--你应该 可能熟悉其中的大多数。
此外，+;减法， - 。
对于乘法，我们有*。
所以不是在X，我们平时使用。
事业部，我们有反斜杠。
和模是我们最后的运算符 我们要谈论现在。
这是一个运营商，使我们能够 拿一个除法的余数。
因此，如果我们有4％2，4分 由图2是2用的0剩余部分。
所以4％2为0。
4％3是1。
4％，5 4，你可能已经猜到了。
请记住，当使用所有这些 经营者利用PEMDAS规则。
>> DAVID马兰：所以要清楚，如果你 做4％2，为什么是0，到底是什么？
>> 玛丽亚：因为4除以 图2是2用的0剩余部分。
因此，模给我们，剩下的作为 反对分裂的结果。
DAVID马兰：事实上， 我们会发现这是很有帮助的
为是，在一些问题 这并不一定是，
如果你想拥有 限制自己的作用
一个数字范围 像0到的东西，
您可以使用模环绕 早于像2十亿
或四十亿值 我们已经谈到了讲座。
>> 玛丽亚：是的。
即使在“贪婪”我们可能。
DAVID马兰：是的，在 问题集之一，也是如此。
玛丽亚：是的，不错。
DAVID马兰：好的暗示。
玛丽亚：对不起。
布尔expressions--所以 布尔型的操作，
我们要谈的所有 这些是你在这里看到。
所以现在，我们有两个 等号列出的平等。
因此，这些都是进行比较。
到目前为止，我们只看过一等号。
这时候，我们分配 一个值的变量。
因此，如果我们已经看到INT N = 5，则 我们给5到变量n。
但是，如果我们想用==进行 相比之下，我们可以检查如果n == 5。
而如果n == 5，那么这是真的。
>> 所以布尔运算符 让我们，基本上，
评估布尔 表达式为真或假。
所以没有equals--我们有 感叹号和equals。
因此，我们也可以查看如果n 不等于5--因此n！= 5。
小于，小于或等于， 大于，大于或等于，
然后我们有逻辑 与和逻辑或。
而那些让我们能够评估 多个布尔表达式一起
基本上走到一起 一个完整的布尔表达式。
因此，如果我们想找到一个号码，说： 大于5但小于15
与此同时，我们将使用 逻辑AND运算，以查看是否n是
大于5 &&Ñ小于15。
DAVID马兰：在这里， 同样，它真的很容易
早早就意外 只使用一个单一的符号
或单竖线。
并希望编译器会 骂你，因为他们实际上
具有非常不同的含义。
对于那些好奇，他们是 用于位运算，
操作上的各个位。
但是，你想对他们在这里。
和超级重要的是， 第一个，等号，
这是运营商的平等作为 反对赋值运算符。
>> 玛丽亚：与竖线 位于删除和收益之间。
DAVID马兰：是的。
在一个典型的美式键盘。
>> 玛丽亚：是的。
因此，让我们直接进入 条件语句。
在刮，你 已经看到，大概，
if语句，让您 检查如果事情是真的，那么
做别的事情。
所以，你可能会想 检查你的精灵是
接触一些其他的精灵 或者你的屏幕边框。
然后你可能会想 结束游戏或做其他事。
这样的语法说 是“如果（条件）。”
所以，如果你的精灵是感人的东西， 然后要做的就是花括号内。
>> 然后我们有if-else语句。
否则让我们做一些事情 如果条件我们
在开始时检查是不正确的。
因此，如果精灵的触摸 边境做到这一点，否则做其他的事情。
因此，否则做别的事情。
然后我们有一个简单的例子这一点。
因此，如果（military_time <12），我们 想给printf“早上好！”
否则我们将 printf的“晚上好！”
基本的例子。
>> DAVID马兰：好。
>> 玛丽亚：酷。
所以现在我们有switch语句。
交换机一般都能发言 让我们做了很多同样的事情
我们刚才讲 有关使用if语句。
例如，现在我们有 switch语句的一般形式
这使我们能够 一个变量调用ñ
并比较了很多 不同的值，在这里我们
呼吁CONSTANT1，CONSTANT2。
我们可能有更多的。
而那些被称为案件。
>> 因此，如果我们有一个开关 statement--这个作品
仅用于integers--我们有一个 变量在这种情况下n值。
如果变量n是 等于CONSTANT1，我们
将执行一些代码段 或者说，我们想要做的事情。
然后我们将打破。
因此，突破意味着， switch语句
将停止，如果执行 n等于CONSTANT1，
然后你的程序将继续进行。
这将退出的出 switch语句，它会
继续做别的事情。
>> 然而，如果n不等于 CONSTANT1，然后案例CONSTANT2
将被检查。
因此，如果n等于CONSTANT2，其他 的代码段会被执行。
然后它会打破 如果这是等于它。
然后我们就可以有also--不 不一定，though--默认的情况下，
如果n不等于将发生 任何你所列举的案例。
与在默认的情况下，我们还 不需要休息不一定
因为switch语句就知道了 它需要的默认后结束
情况下，如果是这样的话。
>> DAVID马兰：但在风格上， 我们始终把它放在那里。
>> 玛丽亚：是的。
>> DAVID马兰：是的。
因此，特别是在开始的时候了， 尤其是在那些较少
舒服，我会亲自 只是建议坚持与IFS
和IFS-别人的和的if-else-IF-别人的 等等，如果仅
因为他们是一个小 更直接。
这是一个很好的优化，或者 有时甚至是美学上它
使得代码更易读。
而事实上，可能 期中，我们将看到一个问题
设置它只是看起来更好 并且更容易阅读的人
通过使用switch语句。
不过不要担心 执着于这个为时尚早。
>> 玛丽亚：是的。
如果你有if语句很多， 它可能只是不是很可读。
它可能不是非常快 让你通过它。
所以，sw​​itch语句可以 是非常有用的，也是如此。
而且，不要remember--不 忘了把休息时间在那里。
>> DAVID马兰：不记得这一点。
>> 玛丽亚：因为这样你可能会下降 通过从一个案件到另一个。
所以我们可以说这种情况下CONSTANT1 没有一个break语句在里面。
然后，我们可能告吹 里面的情况CONSTANT2。
同时，我们也不想这样做，如果 我们已经达到的情况下CONSTANT1
它是等于n。
>> 因此，例如，如果我们有一个可变 n表示包含一个类号，
我们希望看到什么 如果n等于50级的is--，
我们要打印“CS50是 计算机科学导论一。“
然后，我们要打破。
就是这样。
然而，如果n等于 51，我们将
打印“CS51是介绍 计算机科学II“。
然后，再次，我们要打破。
但是，如果那么我们就把124，61，任何 你可能会想其他的号码，
或程序是不会 认识到这一点。
因此，它会说，“对不起，我 不熟悉的类。“
而这将打破。
DAVID马兰：所以你真的可以看到 中频，否则的话，其他人的想法在这里。
这只是不同的语法 表达完全相同的想法。
>> 玛丽亚：没错。
现在，我们有我们的三元运营商。
因此，三元运营商 3 parts--的条件，
事做，如果 该条件是真的，
然后事做 如果该条件为假。
所以你看，基本上， 的是，这里的语法。
我们有问号， 那么the--我们怎么叫呢？
DAVID马兰：结肠。
玛丽亚：结肠。
谢谢。
抱歉。
因此，让我们来看看我们的榜样 看看我们是否可以this--感
class_num == 50。
所以在这里，我们看到我们的布尔运算符== 用于比较变量class_num
50。
所以class_num存储的整数。
如果该整数 等于50，那么我们
将存储“大卫·马兰” 里面的字符串教授。
如果班级人数不 等于50，“不是大卫·马兰”
将是教授。
>> DAVID马兰：谢谢。
因此这似乎相当于 什么，你会说，乍一看？
>> 玛丽亚：对我来说，似乎 像if-else语句。
>> DAVID马兰：是的。
而事实上，这是一种 一个漂亮的单行的，
可以这么说，对于实施 究竟逻辑的if-else
但这样做的一切一步到位。
>> 玛丽亚：没错。
是啊。
所以if-else语句可能 占用了大量的空间。
他们可能是太长时间 一些简单不过的了。
因此，这可以是非常 简洁，非常漂亮。
所以，现在我们正在进入观察 一次又一次地执行一些东西，
所以检查的 条件多次
然后继续做一些事情 而条件为真。
因此，这给我们带来了 很好地进入while循环。
>> 到左侧，我们有 我们的第一个while循环。
因此，虽然事情是真的， 一次又一次地做一些事情。
所以一定要注意，我们的 条件这里在顶部验证。
而我们的我们称之为第二loop-- 这一个做，而loop--我们做一些事情，
然后我们检查的条件。
如果该条件 仍然是真实的，
我们再回去做的事。
这样的主要区别是，其中 该条件检查。
以及码可能永远 执行如果条件不
真正的while循环。
而随做，而 循环，我们有码
即至少要执行一次。
然后，当条件 仍然是真实的，
我们可以回去里面再次重复。
那么，为什么你认为我们会用 一个do-whil​​e循环在while循环？
对。
因此，如果我们想提示的 用户对某种类型的输入，
如果我们要问他们 输入他们的姓名，
我们希望至少让他们一次。
如果他们确实进入 这个名字，我们不
又要问他们 因为我们已经知道了。
但是如果它们不进入 他们的姓名，或如果他们
进入东西是 显然不是一个名字，
我们还是要继续 要求他们对自己的名字。
>> DAVID马兰：而在演讲中，我们有一个 像这样的得到正INT
例如，那里什么也没有到 首先检查一下，因为你甚至还没有
得到一个int。
所以我们想要做的this-- 您可以通过user--一个int
然后检查一下，也许， 一遍又一遍又一遍。
>> 玛丽亚：没错。
对于loops--确定。
For循环可以让我们做的差不多 同样的事情，也是如此。
它实际上是完全一样的东西。
因此，有没有什么 您可以为循环做
你将无法 做while循环。
但对于循环可能看起来有点 更多的复杂语法
因为它们具有 三个部分里面有什么
是以前只是 条件与while循环。
因此，第一个部分，你的大海， 最左边的，我们有“INT矮人= 0”。
因此，这是我们 初始化我们的变量。
>> 然后我们有一个分号 和“矮人<7”。
因此，这是出 条件实际上是。
所以，这就是我们将有 把刚刚在同时loop--
“而矮人<7”。
这里，云在 中间我们的for循环。
因此，“dwaves <7”。
然后，我们的最后一部分是“矮人++” 这就是我们更新我们的变量。
所以，最重要的事情 要知道的是，这
是要通过这个循环 七次并执行七次。
因此，我们有七个 矮人，和他们都
会说，“我在这里 帮你，白雪公主“
因为他们已经准备好 帮助白雪公主。
>> 随着while循环，我们会做 初始化和更新
满足条件内，再次，但 之前或while循环中
确保we--因为 我们总是需要的部分。
因此，为了确保我们有 他们，我们会一直还增加他们
上，只是没有在括号内。
>> DAVID马兰：所以它看起来like-- 在讲座中，例如，
我几乎总是使用一样，我和 n和很无聊的变量。
它看起来像您可以使用更多 巧妙地命名变量了。
>> 玛丽亚：是的，它实际上是非常好的 使用多一点的描述变量
因为特别是如果别人是 读你的代码 - 也许你是平地机
或者如果你合作 与somebody--
你要确保他们 了解你在做什么。
>> 好。
因此，这是一件很funky-- for循环内的for循环。
我不知道，如果我们之前已经看到了这一点。
可能不会。
但是，我们其实可以有this-- 如此循环，而不是循环。
所以想也许走没有人 我穿过这是怎么回事吗？
DAVID马兰：我要一刺。
玛丽亚：酷。
DAVID马兰：OK。
因此，spoiler--我们要打印的东西 这是在底部右下角
那里。
>> 玛丽亚：对。
是啊。
>> DAVID马兰：所以我们刚刚 把该样品的输出存在。
因此，我可以从推断 你是最上面的循环
迭代行 最外层循环，可以这么说。
而你遍历 列与最内层的循环。
直观地，这 应该有希望才有意义
因为性质 每一个我们所看到的节目
之前，printf的，这是 功能我们使用，最终，
有打印的东西的能力 出基本上逐行。
象，一旦你输 一个新的生产线，有
没有加倍背部和打印的东西 在屏幕更高，至少
不是用printf这样。
>> 所以在这方面，它使 某种意义上说，最外层循环
应该是指各行 因为对于每个给定行，
你会想 打印出XXXXX，然后
移动到下一行，XXXXX。
因此，行是第一位的。
然后在每个 行，你打印的列。
如果你想做到这一点 相反，它可能不会
出来，你打算。
>> 玛丽亚：是的。
我们只是不能回去 上一行用printf的。
>> DAVID马兰：这有什么有趣 按今天的大约范围聊天，
实际上，是该行是一个int 该公司在最上面的循环声明。
但是请注意，它仍然是 内部，可以这么说，
大括号的 紧随其后，
即使它不是技术上 在这些大括号内。
因此，行范围为 代码片段的全部，
两外循环内 与内循环的内部。
但与此相反，在那里 是列在范围？
可变列？
是啊，只有在里面循环。
这没关系，因为我们没有访问 它的花括号外面。
我们所要做的就是打印出新 线在最后出现。
所以，实际上是确定。
>> 因此，这具有这样的效果，它看起来像， 的操作的三行和四列。
>> 玛丽亚：对。
所以首先我们通过我们的第一行。
而就在我们的第一行，我们做的 四列的第一行内。
因此，我们打印出四个X的。
然后我们就可以退出循环，因为 我们已经印了四X的。
我们打​​印新的生产线。
然后我们经过 同样的过程两个行
使一共有三个。
>> DAVID马兰：而且值得注意的是 字体的只是一个假象，事实
样品输出 似乎如此多高，
好像还有更多 行比列。
但它只是因为X 高度大于宽。
这一切发生的事情有， 加上线之间的空白。
>> 玛丽亚：对。
凉。
DAVID马兰：好的。
因此，快速浏览一下问题集之一， 采取任何问题，然后宣布休会？
好吧。
因此，在问题设置一个，还有三个 主要挑战，大势所趋。
但首先，你会发现 这个问题集
说明书中，作为与许多 pset时，今年秋天，是要带你
通过一些热身练习， 你指出了几个资源
你可能会或可能 没见过了。
例如，CS50 拥有一套短裤，
这是短视频， 没有什么不同这一点，但该
很话题specific-- 也许五分钟，
长度为10分钟的循环或 上条件或算法
或更高版本的更多 先进的主题，也是如此。
而我们一般嵌入 这些成难题
集使学生 有哪些资源
审查可能具有材料 已经来在演讲或部分。
但是，这样一来它更集中 更在他们的指尖。
>> 我们也往往在问题嵌入 集东西叫做演练。
因此，几乎所有我做的例子 在讲座中，这里的舞台，我们也
在已经拍摄的摄像头 推进更慢，
更贴心的演练由我的 我的笔记本电脑的代码，一行行
因此，在课堂上，我们经常会 脱脂通过某事或某人
将与插 回答的一个问题。
但它并不一定下沉 在每个人的观众。
所以，你会发现代码走查 对于大部分的实施例
我们在这里做演讲，让你 可以通过它按照自己的节奏走
快退或快进或 完全跳过，如果你愿意的话。
>> 经常会有一些 热身问题，这
请你进行排序 强化这种材料
并确保您舒适前 你继续处理器集的其余部分。
然后，当然， 有处理器集本身。
和的事情之一 我们很刻意
做CS50是几乎每一个无趣 或智力无趣
机械的步骤， 你可能需要做的
几乎总是非常有据可查。
在长期的过程中，我们将 开始提出更多的反问句
像记得如何做这做那？
但通常情况下，你会发现 该习题集给你
通过力学 东西使
有趣的，智力的挑战 最终都是留给你的学生。
>> 随着中说，Zamyla，我们向他 不停地谈到今天的讲座，
是我们长期的工作人员1 成员谁也持有演练
像马里奥特定PSET问题 和贪婪，虽然不是水这一年。
而且它是在那些 演练，她经常
提供了一些提示和技巧 如何进行，从来没有告诉你
到底该怎么做，但 rather--像的状态下，
如果你will--给你至少一 几个想法，这样就看你的，
最终，决定 如何接近他们。
>> 玛丽亚：有点像一个高层次 逻辑的理解是什么
我们要求你这样做。
>> DAVID马兰：没错。
而且，事实上，Zamyla的 演练旨在
经常回答 在那里问到的问题
我开始了，特别是当 这些长规格
有点令人生畏给所有的文字 和图像，他们有他们。
>> 所以water.c，你会发现 你已经完成后，
实际上是相对简单的。
绝对是一帮 你要一鼓作气
靠在墙上你的头试图 弄清楚为什么它不编译
或者为什么它没有运行正常。
但是，一旦你完成 它，一旦你
花一些时间与任何摔跤 那你可能有缺陷，
你会发现，它的 在很短的程序。
它可以在短短几分钟来完成 行代码，其中大部分
我们在这里看到的讲座已经，如果 你组装正确的积木。
>> 正如我们建议 在这里，它会问
您可以指定多少分钟 有人走在校园里洗澡。
我们在这个问题说明 设置流动水的速率
在一样，低流量的淋浴 头，很像宋飞夹
我们昨天看到或 相反物。
然后你只需要 做数学了一下，
用C来告诉really--算术 我们知道有多少，大概，瓶装水
就是相当于，如果我们 采取一个n分钟的淋浴。
>> 现在，在mario.c，这是去 要稍长程序。
它仍然不会长期是这个。
短短几行比water.c更长。
但是，这将是机会 重现老同学马里奥
从超级马里奥金字塔 兄弟或者一些后续。
它不会看起来更漂亮 或者丰富多彩的作为一个人也没有。
我们只是用很少的＃标签 像我们这里在屏幕上
使用ASCII文本。
但是，这将接近同样的想法。
而且这将是一个 锻炼第一眼
似乎只是很simple-- 打印一个简单的金字塔。
但是，有一对夫妇的特点 在这里，很有意思。
请注意，最右边边缘 金字塔实际上有宽度两种。
因此，有两个相等 身高列，这
使得它需要一点点 思想位，使
确保你得到了完全正确的，因为 而不仅仅是一个完美的角度的
线。
所以这是一个有点角落案件 但比赛的实际比赛。
>> 而且，这也是非显而易见的，在第一 一目了然如何打印空白。
所以，当我看 示例输出这里 -
而且它也是在spec--它 那种看起来像一个矩形，
但一个对角线的 矩形已经砍掉了，
它只是空格，可以这么说。
所以，一个经常被问到的 这里的问题是一如既往的好，
我怎么动的＃标签 到正确的？
或者，我怎么打印空白？
它实际上更容易 比大多数学生认为。
对？
你可以通过可视化地接近它 按下空格键一次或两次
或三次。
>> 因此，即使与我们的printf几乎 总是打印出一个字符串或一个int
或者像“你好一句话， 世界“或一系列字的，
你也可以只打印 报价，空间，引文结束。
这实际上给 你一个空格那里。
所以记住这一点，并 不overthink这一点。
你真的要 决定逐行逐行，
没有什么不同的例子 刚才，有多少的
列应该是白色的空间和 有多少人应该是井号标签。
这将需要一些时间，但它的 各种各样最终逻辑谜题。
>> 玛丽亚：是的。
但再逐行逻辑 是要在这里是非常有用的。
DAVID马兰：是的。
我想示例代码，你gave--甚至 虽然这不是一个完整的程序。
您还需要int和主 和无效的和的#include stdio.h中，
很多从演讲的东西。
但积木 似乎是在那里。
然后最后是什么 多一点的算法。
所以，事实证明，任何时候你 进入CVS或便利店
有人递给你的 出纳票据或硬币的变化，
事实证明，他们，人类， 不管他们是否意识到这一点，
可能正在使用什么 所谓的贪婪算法，
因此，如果你欠，说，$ 21日 在变化，因为出于某种原因
你买东西很便宜 与CVS的一个非常大的法案，
这将是非常烦人，如果 收银员给你21单曲，更有甚者
然而，一大堆硬币。
相反，什么是合理的人 可能要做的是他们要去
抢$ 20，然后$ 1钞票，和 交给你只有两个法案在这种情况下。
玛丽亚：所以他们正在寻求减少 他们给回你的变化。
DAVID马兰：没错。
而同样的处理硬币，以及。
如果你欠，说，$ 0.50， 希望你不想要50便士。
你不是想要两个 宿舍，例如。
现在，这确实承担 该出纳员具有
足够的每一个教派的 他或她可能想给你。
但是，我们让你承担 尽可能多的问题。
和目标，最终是 在C代码实现贪心算法。
因此用户被允许 在键入多少
改变他或她是欠与美元 而仙，某种浮点
值可能。
然后你需要做的数学和 弄清楚算法，好了，
有多少硬币，我可以给 你最少给你
正是这样的变化量。
但是，将是一个 这里几个棘手的部分，对吧？
像有全 不准确的问题。
玛丽亚：没错。
因此，浮点 值具有不精确。
难道我们谈论这个讲座的今天？
>> DAVID马兰：我们做了 最后一次演讲。
我们谈论的不精确性。
而你不想欺骗用户 多少变化，他或她是欠。
这样一来，演练，在 问题设置规范，
想一想，最终以 你如何减轻这些不精确
错误，有可能。
这是可以避免的，当然，对于 我们谈论的投入。
而且，事实上，pennies-- 也许我们会推迟到Zamyla，
我想，对于花样那里。
所以，最后，你会发现一个 问题的进展，本周，
其中第一个是非常小的， 然后介质，然后一点点大。
但是，所有的人都使用的建筑 从过去的这个星期块，
从这个超部分， 问题设置规范
让你在无数的资源。
但尽管如此，如果在所有挣扎， 尤其是那些不舒服
没有事先的背景下， 来到办公时间
在周一和周二和 周三和周四。
进入CS50通过讨论 课程的网站，
通过它，你可以聊天 与工作人员和同学们。
>> 但最终，我认为， 最好的建议是刚刚起步早。
它不是那种类的，你 要在周三开始的pset
晚上，或者更糟糕的周四晚上。
>> 玛丽亚：我最好的建议是 已经开始在星期一。
DAVID马兰：周一。
所以，如果你还没有开始already--没有。
但是，即使没有星期一，然后周二。
越早越好。
而这就是原因 当然，有这么多晚天
给你一个有点 心理压力
应尽早开始，但仍让 事情滑，当事情需要更长的时间
比您预期的。
>> 玛丽亚：你想利用 办公时间尽量您也可以做到。
>> DAVID马兰：有什么问题？
好吧。
那么，我们为什么不这里休会？