[音乐播放] ZAMYLA陈:你愿意接受 $ 10万的权利或接收 便士的一个月,每天都在那里 每个后续的一天,您会收到 便士的两倍 收到的前一天? 在便士,我们要 证明为什么你应该 绝对采取便士。 你的工作是写pennies.c - 一个程序,首先会询问用户如何 多少天有一个月 然后问多少便士用户 将收到的第一天。 然后计算该方案应 量,用户将不得不 结束时累积的 一个月,并显示它。 我们可以打破这个程序 成一对夫妇的任务。 我们需要提示 多个用户输入 - 天月,和便士 第一天。 我们需要跟踪多少钱 用户有更新每 每天的量增加一倍 他们收到的便士。 最后,我们打印 最后的总美元。 让我们来解决用户输入。 我要去开拓apples.c, 短节目交易 输入和输出。 这里的顶部,我已经包括了一些 ,我需要的库 - CS50的图书馆和一个标准 I / O库。 我打印提示符下使用 printf函数从 标准I / O库。 但实际的用户提示 这发生在下一行 调用getInt函数在CS50库。 调用getInt获得来自用户的输入,并 保证了输入是一个整数。 所以,我存储用户的输入转换为整型 ,减去1,然后 如果我打印出新的价值。 编译后使用apples.c 命令“苹果,”我有一个 可执行文件苹果。 跑步,我就输入1。 该计划告诉我, 我还剩0苹果。 因此,工作不如预期。 因此,让我们再次运行此 和输入负1。 现在,有一个负适量的苹果 并没有真正意义,但 程序接受它,因为负 1,好了,它是一个整数。 而现在的程序或怪物 里面的程序吃负 苹果,现在我有 负2个苹果。 嗯,所以这是一个教训 - 即使调用getInt功能和 相关的功能,像GetFlow或 则由GetString引发得到正确的数据类型, 确保输入使 程序的意义。 在便士,也不会做的只是一个提示 一个整数,你需要使 确保该用户输入的整数 有意义的上下文。 一个月只能有28个, 29,30,或31天。 我们要不断要求 一个有效的整数。 如果他们输入一个整数超出了我们 公认的边界,我们将促使他们 一遍又一遍,直到你 给我们一个有效的整数。 回想一下“重复,直到” 从头阻止? 你可以做一个类似的结构 在C中使用“while”循环 或“while”循环。 while循环结构有一个条件 所必须满足的 体循环执行。 这看起来有点相似, 因为条件就像是 与角度的划痕块 和进入的括号 “while”循环。 因此,该条件将检查是否 整数内 适当的边界。 您可以提示整数调用getInt 然后执行你的“,而” 循环,重复的提示和打印 的指示,而输入 是无效的。 另一种方法,以确保正确的用户输入 是用“做,而”循环, 这是非常相似While循环。 “而”循环执行代码 身体内部的,然后检查是否 条件是否符合或不。 这是有用的,用于获取用户输入, 因为你知道,你需要 提示他们至少一次。 如果不符合条件,程序 将执行线后 “做,而”循环。 如果该条件得到满足,虽然 循环将重复 遵循“do-whil​​e”循环验证用户 输入会是这个样子。 我声明了一个变量n,调用getInt, 然后重复,直到n是有效的。 而这个过程中,我解释说,使用 整数数据类型,这 您将使用的天的月份。 但我们知道,便士 很快就会堆积起来,所以为了 存储较大的数字,使用的数据类型 的LongLong,但要记住相同 验证适用的原则。 真棒,所以一旦我们有两个有效 来自用户的输入 - 当月天便士 第一天 - 我们可以搬上搬下 该计划的一部分。 第一天,用户开始时 然而,许多指定便士 和金额的硬币,他们 收到第二天一倍。 因此,它是有道理的跟踪 这两个数额 - 用户有多少钱,以及如何 许多便士他们会得到。 现在,做的事情为28到31天 是重复的,所以让我们用“为” 循环来遍历天 本月,更新总一分钱 每次达到。 “for”循环语法包含 以下内容 - 的初始化,条件 和更新。 你的“for”循环将初始化 一个变量,当它 首先进入循环。 如果条件满足,身体 该循环将执行。 之后,将执行更新。 如果病情仍满足, 循环将执行和更新, 重复,只要你的条件 计算结果为true。 这里有一个“for”循环,共分 由2个共10次的整数p。 注意我是如何宣布整数p 我的“for”循环外,从而使 整数可以访问 外“for”循环。 一个月后,已经过去了,现在是时候 告诉用户多少钱 他们已经得到了。 按照规范,你需要告诉用户 多少美元,没有多少 便士,他们有。 但到目前为止,你一直跟踪 总便士使用LongLongs的, 这全是数字。 有100便士到1美元,因此,除非 便士的数目是一个 100的倍数,你需要 代表十进制地方。 允许一倍复写 你做到这一点。 那么,我们如何转换代表 便士美元? 让我们来看看pi.c. 这个程序需要一个LONGLONG big_pi的和 它除以10万,并打印 结果到小数点后五位。 如果我们想显示四位小数 的地方,然后我们可以替换此 号码。 因此,让我们保存,编译PI, 然后看到的结果,这是我们 预计为3.1415 - 圆周率前五位。 虽然它不是。 为什么? 嗯,因为big_pi的LongLong 这是一个整体的数字,不会 保持小数跟踪。 我要修改 是在分裂。 我需要投双 分裂,因为双打跟不上 跟踪的小数位数。 我要添加一个新行 这里更好的格式。 在这里,我们有它 - 3.1416。 你可能会注意到它打印3.1416 3.1415而不是如预期。 这是因为它在轮 分裂过程,而不是仅仅 截断值。 现在,你应该能够打印 最后的总正确,完 该计划。 恭喜。 我的名字Zamyla。 这是便士。 [音乐播放]