CS50 第一周 - 学习 C
介绍
本文由我的博客文章修改而来。您可以在kewbish.github.io/blog上找到这篇文章以及我的其他文章。
介绍
嗯,自从我磕磕绊绊地学完 Scratch 和 CS50 的第一周课程已经过去一周了,我也差不多完成了第一周的作业。这周,我接触到了令人望而生畏的 C 语言世界,学习了它的基础知识。此外,我们还学习了如何将常见的 Scratch 代码翻译成 C 语言,以及一些关于内存和精度的基础知识,还有一些 C 语言的例子。我对这些相对底层的语言完全是个新手,所以这周的学习让我大开眼界。
这周我才真正开始认真学习——虽然头两周看起来很轻松,但我知道它们对于为接下来更艰难的几周打下坚实的基础至关重要。所以,我认真听完了整整一个小时四十六分钟的课,深入探索了C语言的世界。
笔记
以下是我的笔记:
- 所以,我们已经确定 C 语言与我挚爱的 Python 相比极其冗长,但接下来呢?
- 到处都是括号。
- 别忘了分号
- style50 要求使用这种糟糕的括号样式,其中括号单独占一行[^2]
- 您可以使用特定类型初始化变量。
- C 语言是静态类型的,这与 Python 不同。
- 程序运行过程中不能随意更改类型
- 这会导致创建大量“填充”变量,以及用于类型转换(例如整数到字符串)的循环。
- C语言没有列表推导式,请使用for循环。
- 顺便说一下,它们的for循环和“普通”的for循环一样。
- 与 Python 的 for 循环完全不同
- 对于遍历对象来说不太直观,但对于数组元素来说更容易。
- 无法动态地向数组中添加元素
- 需要制作某种计数器来计算物体的长度。
- 或者,对于字符串,请使用
strlen() - 数组需要用特定大小进行初始化,以及内存分配等事项。
- 我们使用 `<script>` 标签输入内容
get_string(),它是 CS50 头文件库的一部分。- CS50 库中包含大量功能和清理措施
- 此外,头部信息是包含进来的,而不是导入的。
#include something- 如果用双引号括起来,则表示相对导入。
- 如果用尖括号 <> 括起来,则表示它位于 C 库编译器的深处。
- Scratch确实很实用,我很喜欢它的翻译示例。
- 字符串格式非常奇怪
- 需要指定类型,并使用百分比格式。
- 在格式化变量之前,请记住变量的类型。
- 不精确性是我总是会忘记的事情之一。
- 现金交易时,请记住存在浮点误差。
- Make 真是太棒了,它有各种命令和所有那些很酷的功能。
- 我尝试
cs50make在我的 bashrc 文件中设置一个自定义命令,但我似乎还没完全弄明白。
- 我尝试
- 对于习题集——请自行研究
- 我能得到起跑线,但之后,我就基本上得靠自己了。
习题集
在 PSET1 中,你可以根据自己对 C 语言和编程的经验和熟练程度,选择完成“马里奥:少即是多”或“现金”或“信用”这两个题目。就我个人而言,我发现“更具挑战性”的题目更有趣,而且它们让我学到了更多 C 语言的特性,比如数组(尽管我们还没学过数组)。
我建议你把练习题的“少”版和“多”版都做一遍。通常情况下(就像马里奥游戏一样),“多”版练习题都是在“少”版练习题的基础上开发的,所以无论如何你都应该做一遍。此外,多练习还能让你获得更多练习机会,而我发现练习非常有用,尤其是在学习一门新语言的时候。
CS50 IDE
不知为何,我就是不喜欢这个 IDE。也许是因为我习惯了 VSCode 的智能感知和扩展环境。举个例子,VSCode 允许你用括号括起来内容,并使用一系列快捷键快速导航,而在 CS50 IDE 中,同样的命令分别只会删除和不执行任何操作。
在 WSL 上设置 CS50 的 CLI 和头文件非常简单,它们对于在我的系统上运行 check50 和其他程序非常有用,而无需返回到云 IDE。
总之:VSCode、WSL 和 Git 才是王道——CS50 IDE 算了吧。不过,我喜欢 CS50 的一点是,它让技术基础薄弱的人也能轻松上手,而且在设置方面节省了大量时间。
教学风格 + 其他
说实话,我第0周的短视频我基本没看,但到了第1周,它们真的帮了大忙。我一边看短视频,一边重读笔记,一边听音频做题,才搞明白了不少题型。
他们从未提及,但查看 CS50 库的源代码并进行一些谷歌搜索同样很有用。当然,这可能对那些不知道去哪里找的人没什么帮助,但浏览各种 GitHub 代码库本身就是一种有趣的消磨时间/收获。
最后,又到了夸赞 Malan 的时候了。他的讲解非常清晰,虽然偶尔有些赘述。我非常欣赏 CS50 的工作人员,他们不遗余力地让线上 CS50x 和线下 CS50 一样精彩纷呈、包容性强,甚至更进一步,在他们的查看器里加入了零食选择器。(顺便一提,这个查看器有很多很棒的屏幕视图/普通视图切换、快捷键以及其他各种功能。我太喜欢了——这真是用户体验极佳的典范!)
结论
接下来的几周会很有趣——认真记笔记、听课、做习题,再加上写下你现在正在读的这些文字,比我想象的要花更多时间。有点重复,所以我可能会花一周时间快速做完一些习题,然后一次性写完一批博客文章。总之,我会找到更高效的方法,并在这里分享我的经验!
如果你学过C语言,你对它有什么看法?
文章来源:https://dev.to/kewbish/cs50-week-1-learning-c-21h8