1 00:00:00,000 --> 00:00:00,493 2 00:00:00,493 --> 00:00:09,860 >> [音乐播放] 3 00:00:09,860 --> 00:00:13,520 >> ZAMYLA陈:你愿意接受 $ 10万的权利或接收 4 00:00:13,520 --> 00:00:17,460 便士的一个月,每天都在那里 每个后续的一天,您会收到 5 00:00:17,460 --> 00:00:21,280 便士的两倍 收到的前一天? 6 00:00:21,280 --> 00:00:24,010 在便士,我们要 证明为什么你应该 7 00:00:24,010 --> 00:00:27,000 绝对采取便士。 8 00:00:27,000 --> 00:00:29,130 你的工作是写pennies.c - 9 00:00:29,130 --> 00:00:33,330 一个程序,首先会询问用户如何 多少天有一个月 10 00:00:33,330 --> 00:00:38,780 然后问多少便士用户 将收到的第一天。 11 00:00:38,780 --> 00:00:41,780 然后计算该方案应 量,用户将不得不 12 00:00:41,780 --> 00:00:46,530 结束时累积的 一个月,并显示它。 13 00:00:46,530 --> 00:00:49,670 >> 我们可以打破这个程序 成一对夫妇的任务。 14 00:00:49,670 --> 00:00:52,830 我们需要提示 多个用户输入 - 15 00:00:52,830 --> 00:00:55,510 天月,和便士 第一天。 16 00:00:55,510 --> 00:00:59,390 我们需要跟踪多少钱 用户有更新每 17 00:00:59,390 --> 00:01:03,060 每天的量增加一倍 他们收到的便士。 18 00:01:03,060 --> 00:01:06,710 最后,我们打印 最后的总美元。 19 00:01:06,710 --> 00:01:08,570 >> 让我们来解决用户输入。 20 00:01:08,570 --> 00:01:11,560 我要去开拓apples.c, 短节目交易 21 00:01:11,560 --> 00:01:13,840 输入和输出。 22 00:01:13,840 --> 00:01:17,310 这里的顶部,我已经包括了一些 ,我需要的库 - 23 00:01:17,310 --> 00:01:20,450 CS50的图书馆和一个标准 I / O库。 24 00:01:20,450 --> 00:01:24,310 我打印提示符下使用 printf函数从 25 00:01:24,310 --> 00:01:25,660 标准I / O库。 26 00:01:25,660 --> 00:01:29,740 但实际的用户提示 这发生在下一行 27 00:01:29,740 --> 00:01:33,650 调用getInt函数在CS50库。 28 00:01:33,650 --> 00:01:38,300 >> 调用getInt获得来自用户的输入,并 保证了输入是一个整数。 29 00:01:38,300 --> 00:01:45,160 所以,我存储用户的输入转换为整型 ,减去1,然后 30 00:01:45,160 --> 00:01:47,610 如果我打印出新的价值。 31 00:01:47,610 --> 00:01:53,050 编译后使用apples.c 命令“苹果,”我有一个 32 00:01:53,050 --> 00:01:55,770 可执行文件苹果。 33 00:01:55,770 --> 00:01:58,760 跑步,我就输入1。 34 00:01:58,760 --> 00:02:02,600 该计划告诉我, 我还剩0苹果。 35 00:02:02,600 --> 00:02:05,480 因此,工作不如预期。 36 00:02:05,480 --> 00:02:09,740 >> 因此,让我们再次运行此 和输入负1。 37 00:02:09,740 --> 00:02:13,950 现在,有一个负适量的苹果 并没有真正意义,但 38 00:02:13,950 --> 00:02:18,370 程序接受它,因为负 1,好了,它是一个整数。 39 00:02:18,370 --> 00:02:22,740 而现在的程序或怪物 里面的程序吃负 40 00:02:22,740 --> 00:02:26,250 苹果,现在我有 负2个苹果。 41 00:02:26,250 --> 00:02:28,610 嗯,所以这是一个教训 - 42 00:02:28,610 --> 00:02:32,965 即使调用getInt功能和 相关的功能,像GetFlow或 43 00:02:32,965 --> 00:02:38,100 则由GetString引发得到正确的数据类型, 确保输入使 44 00:02:38,100 --> 00:02:41,430 程序的意义。 45 00:02:41,430 --> 00:02:45,500 >> 在便士,也不会做的只是一个提示 一个整数,你需要使 46 00:02:45,500 --> 00:02:49,550 确保该用户输入的整数 有意义的上下文。 47 00:02:49,550 --> 00:02:55,690 一个月只能有28个, 29,30,或31天。 48 00:02:55,690 --> 00:02:59,160 我们要不断要求 一个有效的整数。 49 00:02:59,160 --> 00:03:03,240 如果他们输入一个整数超出了我们 公认的边界,我们将促使他们 50 00:03:03,240 --> 00:03:07,190 一遍又一遍,直到你 给我们一个有效的整数。 51 00:03:07,190 --> 00:03:10,070 >> 回想一下“重复,直到” 从头阻止? 52 00:03:10,070 --> 00:03:13,070 你可以做一个类似的结构 在C中使用“while”循环 53 00:03:13,070 --> 00:03:14,830 或“while”循环。 54 00:03:14,830 --> 00:03:18,280 while循环结构有一个条件 所必须满足的 55 00:03:18,280 --> 00:03:20,160 体循环执行。 56 00:03:20,160 --> 00:03:23,080 >> 这看起来有点相似, 因为条件就像是 57 00:03:23,080 --> 00:03:25,970 与角度的划痕块 和进入的括号 58 00:03:25,970 --> 00:03:27,950 “while”循环。 59 00:03:27,950 --> 00:03:30,600 因此,该条件将检查是否 整数内 60 00:03:30,600 --> 00:03:32,680 适当的边界。 61 00:03:32,680 --> 00:03:36,620 您可以提示整数调用getInt 然后执行你的“,而” 62 00:03:36,620 --> 00:03:41,030 循环,重复的提示和打印 的指示,而输入 63 00:03:41,030 --> 00:03:43,470 是无效的。 64 00:03:43,470 --> 00:03:47,610 >> 另一种方法,以确保正确的用户输入 是用“做,而”循环, 65 00:03:47,610 --> 00:03:50,400 这是非常相似While循环。 66 00:03:50,400 --> 00:03:54,950 “而”循环执行代码 身体内部的,然后检查是否 67 00:03:54,950 --> 00:03:57,150 条件是否符合或不。 68 00:03:57,150 --> 00:04:00,590 这是有用的,用于获取用户输入, 因为你知道,你需要 69 00:04:00,590 --> 00:04:02,980 提示他们至少一次。 70 00:04:02,980 --> 00:04:07,200 如果不符合条件,程序 将执行线后 71 00:04:07,200 --> 00:04:08,530 “做,而”循环。 72 00:04:08,530 --> 00:04:13,230 如果该条件得到满足,虽然 循环将重复 73 00:04:13,230 --> 00:04:17,490 >> 遵循“do-whil​​e”循环验证用户 输入会是这个样子。 74 00:04:17,490 --> 00:04:24,530 我声明了一个变量n,调用getInt, 然后重复,直到n是有效的。 75 00:04:24,530 --> 00:04:28,040 而这个过程中,我解释说,使用 整数数据类型,这 76 00:04:28,040 --> 00:04:29,820 您将使用的天的月份。 77 00:04:29,820 --> 00:04:33,560 但我们知道,便士 很快就会堆积起来,所以为了 78 00:04:33,560 --> 00:04:39,160 存储较大的数字,使用的数据类型 的LongLong,但要记住相同 79 00:04:39,160 --> 00:04:42,590 验证适用的原则。 80 00:04:42,590 --> 00:04:47,070 >> 真棒,所以一旦我们有两个有效 来自用户的输入 - 81 00:04:47,070 --> 00:04:49,530 当月天便士 第一天 - 82 00:04:49,530 --> 00:04:52,870 我们可以搬上搬下 该计划的一部分。 83 00:04:52,870 --> 00:04:56,680 第一天,用户开始时 然而,许多指定便士 84 00:04:56,680 --> 00:05:00,370 和金额的硬币,他们 收到第二天一倍。 85 00:05:00,370 --> 00:05:03,130 因此,它是有道理的跟踪 这两个数额 - 86 00:05:03,130 --> 00:05:08,890 用户有多少钱,以及如何 许多便士他们会得到。 87 00:05:08,890 --> 00:05:13,760 >> 现在,做的事情为28到31天 是重复的,所以让我们用“为” 88 00:05:13,760 --> 00:05:18,220 循环来遍历天 本月,更新总一分钱 89 00:05:18,220 --> 00:05:21,010 每次达到。 90 00:05:21,010 --> 00:05:23,550 “for”循环语法包含 以下内容 - 91 00:05:23,550 --> 00:05:27,510 的初始化,条件 和更新。 92 00:05:27,510 --> 00:05:29,590 你的“for”循环将初始化 一个变量,当它 93 00:05:29,590 --> 00:05:31,380 首先进入循环。 94 00:05:31,380 --> 00:05:34,860 如果条件满足,身体 该循环将执行。 95 00:05:34,860 --> 00:05:36,860 之后,将执行更新。 96 00:05:36,860 --> 00:05:40,900 如果病情仍满足, 循环将执行和更新, 97 00:05:40,900 --> 00:05:45,820 重复,只要你的条件 计算结果为true。 98 00:05:45,820 --> 00:05:51,080 >> 这里有一个“for”循环,共分 由2个共10次的整数p。 99 00:05:51,080 --> 00:05:55,380 注意我是如何宣布整数p 我的“for”循环外,从而使 100 00:05:55,380 --> 00:05:59,850 整数可以访问 外“for”循环。 101 00:05:59,850 --> 00:06:03,620 一个月后,已经过去了,现在是时候 告诉用户多少钱 102 00:06:03,620 --> 00:06:04,790 他们已经得到了。 103 00:06:04,790 --> 00:06:08,740 按照规范,你需要告诉用户 多少美元,没有多少 104 00:06:08,740 --> 00:06:10,780 便士,他们有。 105 00:06:10,780 --> 00:06:14,620 但到目前为止,你一直跟踪 总便士使用LongLongs的, 106 00:06:14,620 --> 00:06:16,640 这全是数字。 107 00:06:16,640 --> 00:06:20,560 >> 有100便士到1美元,因此,除非 便士的数目是一个 108 00:06:20,560 --> 00:06:24,860 100的倍数,你需要 代表十进制地方。 109 00:06:24,860 --> 00:06:28,060 允许一倍复写 你做到这一点。 110 00:06:28,060 --> 00:06:32,790 那么,我们如何转换代表 便士美元? 111 00:06:32,790 --> 00:06:35,330 >> 让我们来看看pi.c. 112 00:06:35,330 --> 00:06:41,690 这个程序需要一个LONGLONG big_pi的和 它除以10万,并打印 113 00:06:41,690 --> 00:06:44,270 结果到小数点后五位。 114 00:06:44,270 --> 00:06:48,560 如果我们想显示四位小数 的地方,然后我们可以替换此 115 00:06:48,560 --> 00:06:49,760 号码。 116 00:06:49,760 --> 00:06:58,370 因此,让我们保存,编译PI, 然后看到的结果,这是我们 117 00:06:58,370 --> 00:07:02,240 预计为3.1415 - 118 00:07:02,240 --> 00:07:04,540 圆周率前五位。 119 00:07:04,540 --> 00:07:06,300 >> 虽然它不是。 120 00:07:06,300 --> 00:07:07,390 为什么? 121 00:07:07,390 --> 00:07:11,920 嗯,因为big_pi的LongLong 这是一个整体的数字,不会 122 00:07:11,920 --> 00:07:13,740 保持小数跟踪。 123 00:07:13,740 --> 00:07:16,850 我要修改 是在分裂。 124 00:07:16,850 --> 00:07:23,300 我需要投双 分裂,因为双打跟不上 125 00:07:23,300 --> 00:07:25,260 跟踪的小数位数。 126 00:07:25,260 --> 00:07:28,080 我要添加一个新行 这里更好的格式。 127 00:07:28,080 --> 00:07:33,090 128 00:07:33,090 --> 00:07:34,230 >> 在这里,我们有它 - 129 00:07:34,230 --> 00:07:37,660 3.1416。 130 00:07:37,660 --> 00:07:43,520 你可能会注意到它打印3.1416 3.1415而不是如预期。 131 00:07:43,520 --> 00:07:47,550 这是因为它在轮 分裂过程,而不是仅仅 132 00:07:47,550 --> 00:07:50,490 截断值。 133 00:07:50,490 --> 00:07:53,710 现在,你应该能够打印 最后的总正确,完 134 00:07:53,710 --> 00:07:54,870 该计划。 135 00:07:54,870 --> 00:07:55,930 >> 恭喜。 136 00:07:55,930 --> 00:07:57,340 我的名字Zamyla。 137 00:07:57,340 --> 00:07:58,720 这是便士。 138 00:07:58,720 --> 00:08:05,589 >> [音乐播放]