跳转至

1708875628

程序设计与算法基础

CS 专业基础 AI 专业基础 IS 专业基础

课程学习内容

这门课是仅面向图灵班的编程基础课,相当于非图灵班同学的 C 程序设计基础 + 程序设计专题。虽然涵盖了两门课程的内容,但是去掉了两门课程的不合理的地方。上课内容是一般的 C 语言基础 + 排序 + 链表,难度相对于普通教学班会有所提高。

任课教师

翁恺是著名的 C 语言基础课教师,他的 MOOC 播放量相当高,并且之前拿过永平教学奖(奖金 100 万)。这两年翁恺老师水平有下滑的趋势,但整体还是相当不错的。按老师自己所说,他的教学模式是 Nice to have 而不是像高中那样 Need to have,即他不会讲解所有内容,而是只讲他认为很重要或是他不讲我们可能无法正确理解的内容,剩下的需要我们自己在课前课后学习。同时他也提出我们核心课程所花课内课外时间应该达到 1 3。个人认为作为大家计算机的引路人,翁恺老师的建议具有相当的参考意义。

上课中文,PPT 是英文,就程算基本内容而言讲得比较清晰,同时会在黑板上画一些图帮助同学理解,但在内容的拓展方面不如另一个班。

平时作业或者实验有时会出一些描述不够清晰或者评测程序有 bug 的题目,可以治疗低血压(不过 PTA 题库里的很多题似乎都在题目描述或者数据范围方面不够清晰 QwQ

由于何钦铭老师没有补分集,所以想要拿到高分的话,平时的课内题目、作业和实验需要尽量少错(尤其是作业里的判断和选择)。

课程教材

C 程序设计语言 (K&R)

按翁恺的话讲,这本书是最著名和经典的 C 语言教材,但现在已经过时了。建议把它作为英文阅读材料而不是编程教材书。因此笔者建议不订这本教材(雾)。

分数构成

  • 平时 60%
    • 实验 20%14 次实验(23 级由于实验课没有讨论,所有可以不用去机房进行,但是限时 2 小时完成)
    • 作业 15%15 次作业
    • 课内 15%:每周 1%,包括开课小测、问答、课内实验等,第一周不计分
    • 期中 10%90 分钟,包括理论考试与实验考试
    • 有补分集,可补 3 分平时分
  • 期末 40%120 分钟,包括理论考试与实验考试
  • 所有的作业、实验、测验、考试都在 PTA 上进行,题目集分数归一化处理

23 级开始对于分数构成进行了调整,增加了期末占比,但还是只要作业认真做,并且没有被查重(程算查重并不严重)是很容易拿到满分的,历届总评平均分也都很高。

  • 平时 60%
    • 实验 20%:每周的实验课上布置
    • 作业 15%
    • 课内 15%:每周 1%,包括开课小测(但好像 23 级一次都没开过)、问答、课内实验等
    • 期中 10%90 分钟,包括理论考试与实验考试
  • 期末 40%120 分钟,包括理论考试与实验考试
  • 没有补分集

推荐书单

  • C Primer Plus, Stephen Prata
  • C 和指针Pointers on C, Kenneth A. Reek)
  • C 陷阱与缺陷C Traps and Pitfalls, Andrew Koenig)
  • C 专家编程Expert C Programming, Peter van der Linden)

参考笔记

学长组课程学习建议

Abstract

21 级学长组编写、22 级学长组修改后的学习建议。

避坑提示

不要靠近大部分中国人写的教材。不要使用任何 谭浩强的 C 语言教材,严重地误人子弟。

0 级【编程零基础小白】

编程小白强烈建议课前把中国大学 MOOC 翁恺老师的 “程序设计入门——C 语言” 和 “C 程序设计进阶” 看一下,这两门课的视频也是老师课前预习给的资料。课后的作业自己独立完成,代码会查重,抄袭记零分,千万不要从 CSDN 这种网站直接复制粘贴代码,建议看懂他人代码后一定要自己理解重新敲,否则毁人一生。总之就是上课一定要理解(翁恺会讲一些小白可能完全无法理解的东西,但是你可以记住课后自己多了解),代码一定要多打。

同时似乎从 21 级开始取消了 bonus(可以用来补平时分),因此平时作业和实验需要小心,课上也会有突击小测。但整体内容不难,如果有好好预习的话问题不大。期中考试和期末考试有相当一部分是作业和实验的原题,难度不算大,但基本上是英文题面,平时要注意专业名词的积累,不然考试的时候就两眼一抹黑了。

资料推荐

  • 推荐学习网站:菜鸟教程(百度搜索即可)
  • 推荐教材:C Primer Plus, Stephen Prata. 这本书比较厚,有精力的同学可以通读,读不完也可以作为参考书,补充上课所学

1 级【前信息竞赛选手】

信息竞赛生,省一等奖选手可以免听本门课程,非省一选手可以在课上摸鱼(其实非省一选手发邮件给老师也是可以被接受的),当然翁恺还是会讲一些有意思的东西值得一听。课程的后期涉及到指针,并行计算,多文件编程等知识,信息竞赛用的比较少,听一听还是受益匪浅的。而且翁恺老师会潜移默化地给大家灌输优化程序的思维和工程的思维,对“深受竞赛毒害”的同学来说还是很有帮助的。

以及信息竞赛目前使用的都是 C++ 语言,但本课程是 C,习惯了 C++ OIer 一定要分清其二者的区别。

书籍推荐

  • 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)

这四本书讲的内容相对古老,是 ANSI C 标准规范的内容。K&R C 语言之父,他们的书较好地体现了 C 语言的设计哲学;后面三本是当年的经典教材,除去例程以外,很多内容对现代的 C 也有帮助。关于 C 标准文档,基本上到处都能找到。比较推荐的是 C99 规范,兼容性较好;最新的是 C11,也可供参考。

2 级【超前学习建议(仅适用于学的不错的竞赛生)】

各位对自己实力有信息的竞赛生可以选择提前修读数据结构基础(培养方案中是应于大一春夏修读),其中内容大概包括时空复杂性、堆栈、队列、树、图、链表、排序。当然如果对自己实力不够自信也可以按照最正常的方案大一春夏学期再学,超前学习只是可以方便各位大一春夏学期空出时间选择其他有意思的课程。如果学到一半想放弃也可以期中弃修课程。

课外拓展

身为图灵班的学生,如果你仔细研究了培养方案你会发现在整个大一几乎没有多少要与计算机打交道的课程(仅有程算、数据结构基础、系统 I / 计逻,以及选修的汇编语言)。而且据笔者了解,许多同学到大二大三对计算机的了解仍然仅限于课上所学,受制于各种原因,无论是理论知识还是实践能力远没有达到计算机学生应有的水平。笔者建议有空仔细阅读我们学长组所写的 如何让自己看上去、闻上去都像一个 CS ,学习 竺院辅学计划网站 上的实用技能拾遗和系统知识拾遗,或者参考 CS 自学指南 ,尽早地走上正途。