发布于 2026-01-06 0 阅读
0

CS50 第一周 - C语言学习简介

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