程序设计与算法基础 ¶
约 3345 个字 预计阅读时间 11 分钟
课程概要 ¶
本课程为大一上预置课,使用《C 程序设计语言(英文版)》作为教材。主要内容包括 C 语言的基本知识、循环、数组、递归、搜索与排序、指针、字符串、结构与链表、文件、位操作等。
每周有三节理论课在同一天,两节实验课在同一天。其中理论课课后作业在 PTA 上完成,包括但不限于判断、选择、程序填空、函数、编程、多文件等题型;实验课在机房进行,在 PTA 上完成,每次需要完成 4 道编程题。
去年程算课的分数构成为:
- 平时分 60%
- 期中考试 10%
- 90 分钟,包括理论考试和实验考试
- 每周工作 50%
- 实验 20%,共 14 次实验,其中第 9 周实验课用于期中考试
- 作业 15%,共 15 周作业,最后一周不布置
- 课内活动 15%,每周 1%,包括开课小测、结课小测、课内实验、课内问答等,在上课时随机出现。其中开课小测和结课小测在学在浙大的互动上完成,一般为选择题;课内实验在 PTA 上完成,一般为函数题或编程题
- 期中考试 10%
- 期末考试 40%
- 120 分钟,包括理论考试和实验考试
授课老师 ¶
注
今年程算这门课程的授课老师有翁恺、何钦铭和应晶三位,而在 2022 级及以前这门课仅有翁恺一位老师授课,因此目前仅有对翁恺老师的评价。
2021 级 | 匿名
(2022 级)只有他,别想了。翁恺是著名的 C 语言基础课教师,他的 MOOC 播放量相当高,并且之前拿过永平教学奖(奖金 100 万)。这两年翁恺老师水平有下滑的趋势,但整体还是相当不错的。按老师自己所说,他的教学模式是 Nice to have 而不是像高中那样 Need to have,即他不会讲解所有内容,而是只讲他认为很重要或是他不讲我们可能无法正确理解的内容,剩下的需要我们自己在课前课后学习。同时他也提出我们核心课程所花课内课外时间应该达到 1 比 3。个人认为作为大家计算机的引路人,翁恺老师的建议具有相当的参考意义。
2022 级 | zhr
(2022 级)唯一的程算老师,也是心目中最好的程算老师。感觉只要之前有编程基础的话,课还是很简单的,学过信竞可以轻松薄纱。
有耐心的同学可以看一遍《C Primer Plus》,十分系统全面地讲了一遍 C 语言的知识,但是这本书比较枯燥琐碎,也可以当作 C 语言的工具书,遇到想详细了解的知识点再去查阅。此外还可以找一些网上课程,比如 MOOC 上 wk 老师的 C 语言程序设计。还有就是比较建议花一点时间配置一下 vscode 用来编程,以后会很方便。
2022 级 | 仓鼠
猫猫老师很好,上机课可能看见猫猫老师抱着猫猫来探监。翁恺还是要求到课的,最后助教很捞。 跟着猫猫老师学就好了,最多 mooc 多看几遍。链表指针是真的很难,学不懂不要灰心,多学几遍就是了。网课的话,推荐看大名鼎鼎的 CS50,观赏撕书盛况。(虽然和程算没多大关系,但也很推荐)
2022 级 | xzkz
感觉和 MOOC 上讲课的最大差别就是会在课堂上穿插一些比较底层的计算机知识以及一些故事。建议在上课认真听讲之余平时也花一些时间去积累。
2022 级 | Cercatrova
推荐选。虽然大翁老师风评一直在跌,去年的期末题也是下手相当狠,但 C 语言基础内容讲的还是没毛病的。应该也还会预置给图灵,课程相对其他老师相对轻松,不用换。
课程学习建议 ¶
避坑提示
不要靠近大部分中国人写的教材。不要使用任何 谭浩强的 C 语言教材,严重地误人子弟。
第 0 级【编程零基础小白】¶
编程小白强烈建议课前把中国大学 MOOC 翁恺老师的 “程序设计入门——C 语言” 和 “C 程序设计进阶” 看一下,这两门课的视频也是老师课前预习给的资料。课后的作业自己独立完成,代码会查重,抄袭记零分,千万不要从 CSDN 这种网站直接复制粘贴代码,建议看懂他人代码后一定要自己理解重新敲,否则毁人一生。总之就是上课一定要理解(翁恺会讲一些小白可能完全无法理解的东西,但是你可以记住课后自己多了解),代码一定要多打。
此外,翁恺老师在期末的时候应该会开放补分集供大家补平时分,不过平时作业和实验也需要小心,同时课上也会有突击小测。但整体内容不难,如果有好好预习的话问题不大。期中考试和期末考试有相当一部分是作业和实验的原题,难度不算大,但基本上是英文题面,平时要注意专业名词的积累,不然考试的时候就两眼一抹黑了。
资料推荐 ¶
- 推荐学习网站:菜鸟教程(百度搜索即可);
- 推荐教材:C Primer Plus, Stephen Prata. 这本书比较厚,有精力的同学可以通读,读不完也可以作为参考书,补充上课所学。
第 1 级【有程序语言基础的同学】¶
不论你是前 OIer,还是在之前学习过程序设计语言的同学,都不要认为之前学习的知识对此门课程有多大帮助,更不要认为学过程序设计语言就能轻松满绩。如果你是前 OIer,在面对这门课程的时候,要做的第一件事是放低姿态。要想取得很好的成绩,仍然需要在这门课程的学习中下一些功夫。但不可否认的是,以前的信息竞赛基础确实会让你的学习进度快于其他人,如果学有余力,希望你能够多多帮助其他零基础的同学,在辅学的过程中,你会发现你之前未注意过的细节,多查询 cppreference 或上网查找来解答他们的问题,能够让你获得进一步的提高。
需要注意的是,程算这门课程学习的语言是 C,而信息竞赛一般使用 C++,请务必清楚两种语言的不同之处。如果此前在信息竞赛中只接触过 C++ 或是只接触过竞赛编程,那么即使获得过省一等奖,我也不是很建议免听。原因之一是很多 OIer 会将自己写竞赛代码的不好的习惯带进课程中,包括但不限于难以让他人阅读的码风、大量的冗余代码、在 C 中使用万能头文件、乱用 inline
等等,希望 OIer 能通过这门课的学习,抛弃掉以前不好的习惯,不要等到在以后的课程中的作业互评、小组作业中才发现自己的种种问题,到时候再改正很困难;原因之二是这门课程中会学习一些信息竞赛之中并不重视的知识点,如运算符优先级、文件操作以及十分重要的指针(值得注意的是,指针在信息竞赛中几乎完全不会使用,大部分情况都是使用数组模拟,而此门课程中指针是很重要的一部分知识点,需要十分重视指针的学习)。
Warning
如果你申请了免听,那么你大概率是在高中得过奖的前 OIer。对于免听的课程,你的期末考核得分就是你的课程得分。所以不要认为自己免听就完全不用管这门课了。请确保你不会在 C 语言本身相关的问题上栽跟头,例如写一个 using namespace std;
会让你直接爆零。
如果你之前自学过其他语言(如 C++,Java,Python 等),请也不要对这门课掉以轻心。C 语言相比其他语言更靠近机器底层,所以你也许会发现 C 语言中需要考虑很多在自己熟悉的语言中根本无需考虑的问题。不要轻视语法。强烈建议形成良好的代码风格,这会对你自己和帮助你 debug 的别人都有很大的帮助。多参考 cppreference 是必要的,也鼓励自主尝试阅读 C 语言标准来解答自己的问题。作为有基础的同学,在语言方面节省下来的时间可以进一步提高自己的 CS 水平,例如尝试使用 gdb 调试、使用 Linux 等,这会对后续的课程有很大的帮助。
由于 22 级及以前图灵班程算授课老师只有翁恺,故以下学习建议均只针对翁恺老师。前半个学期基本都是讲一些 C 语言基础,如循环、判断之类,对于有基础的问题都很轻松,上课可以摸摸鱼,听翁恺老师吹水。但记得不要完全不听,因为翁恺老师会时不时抽人回答问题,每节课知道大概讲了什么就行。后半学期的强度逐渐上升了,会讲指针、链表、排序、多文件之类的知识,这部分都建议听一下,可能上课讲的东西在作业中有体现。尤其是指针与多文件编程,历年都是问题重灾区。
翁恺老师每周会在 PTA 上布置作业,一般都是较简单的巩固知识点的题,记得按时完成就行。另外还有每周的实验课,翁恺老师会发布四五道编程题,时间限制在实验课上做,会要求分组写实验报告(很简单,写做题思路即可),并且以实验报告上的签名算签到。可以 10 分钟做完所有题,然后签字跑路,或者找同学帮忙签到,自己不去机房做题也是可以的。总结:实验课记得签到 + 做完题就行。
对于想要进一步提升自己的同学,课外相比较来说比较重要。开学之后学研会建程算辅学群,建议平时多看看群聊,看看别人的问题并试图解答。对于自己没弄懂的问题,也可以寻求辅学群学长的帮助。在答疑和提问的时候,一定要记得耐心和虚心,营造良好的辅学氛围。
考前建议整理一下之前作业的错题(有些刁钻的问题),看看历年卷(如果有的话)以及学长整理的资料。此外,考前的辅学群会十分活跃,多看看辅学群也是巩固自己知识的一个好办法。
书籍推荐 ¶
- The C Programming Language Ritchie & Kernighan(也就是教材,经典原著)
- C 和指针(Pointers on C, Kenneth A. Reek)
- C 陷阱与缺陷(C Traps and Pitfalls, Andrew Koenig)
- C 专家编程(Expert C Programming, Peter van der Linden)
- 你必须知道的 495 个 C 语言问题(C Programming FAQs: Frequently Asked Questions, Steve Summit)
这五本书讲的内容相对古老,是 ANSI C 标准规范的内容。K&R 是 C 语言之父,他们的书较好地体现了 C 语言的设计哲学;中间三本是当年的经典教材,除去例程以外,很多内容对现代的 C 也有帮助。最后一本包含了详尽的在学习 C 语言的过程中可能遇到的问题及解答。这几本书都可以在图书馆借到。关于 C 标准文档,基本上到处都能找到。比较推荐的是 C99 标准(ISO/IEC 9899:1999),兼容性较好;当前最新标准为 C18(也称 C17,ISO/IEC 9899:2018),也可参考。
课外拓展 ¶
身为图灵班的学生,如果你仔细研究了培养方案,你会发现在整个大一几乎没有多少要与计算机打交道的课程(仅有程算、汇编语言(选修)、计算机系统(信息安全、人工智能必修))。而且据笔者了解,许多同学到大二大三对计算机的了解仍然仅限于课上所学,受制于各种原因,无论是理论知识还是实践能力远没有达到计算机学生应有的水平。笔者建议有空仔细阅读 qjj 学爷的 如何让自己看上去、闻上去都像一个 CS 人 以及参考 CS 自学指南 尽早地走上正途。