| 选课类别:计划内与自由选修 | 教学类型:理论实验课 |
| 课程类别:本科计划内课程 | 开课单位:信息科学技术学院 |
| 课程层次:通修 | 学分:3.0 |
建议将这门课的名称改为C语言导论😓。这门课虽然经历了改革,但是到目前为止放在语法上的关注点还是过多了一些。作为一门校定通修课,我完全找不到把重点放在语法上对非信智部学生的意义。甚至,作为一位打了7年OI的选手,为了应付考试我自己也有很多语法点是现学的。也就是说,这门课学到的很多知识在这我这7年的编程经历里是完全用不到的。反观PKU,同为大一校定通修课的计算概论,同学们可以自主选择Python/C等语言,而他们的教学重点也在“程序设计”而非“语法”上。毕竟,以后帮助同学们科研的是把现实问题转化为代码实现的能力,而不是对着一副写出来故意让你看不懂的代码挑刺的能力。
口说无凭,我们来看几往年道期末真题:

不知道了解这些“常识”可以对我们的发展起到什么作用。

B选项:预处理不属于C语言的一部分。不知道考一些没有意义的定义干嘛。
C选项:a+b||c/d先计算a+b而非c/d。不知道考脑筋急转弯干嘛。
再放两道半本次期末考题:

最后看看本次期末考题的易错点:

1.真的有人会傻到先在神声明一个变量之前使用它并且在编译给出了"was not declared in this scope"之后不会改的吗?
2.static声明全局变量的主要用途是不被其他文件访问,但是请问有多少个非信智部学生在一生中能接触到封装和模块化编程?
3.依旧脑筋急转弯。对于我自己而言,如果我在编程的时候想从外部更改一个变量的值,我会直接把它设置为全局变量,也并未增加任何不便利性(换句话说我并不觉得有人真会像第三点说的这么干)。
4.fscanf这个函数被发明出来的用途就是从磁盘读取内容,你非要说是先到缓冲区到内存那也没办法,但是真的会有人拿着现成的scanf(***)不用去写fscanf(stdin,***)吗?

期中上机部分II也就是大作业,本学期最低也给到了13分。

第一部分只是我对课程的不满,我也很清晰地知道我也就只能在评课社区bb几句了,但老师本身还是很值得大家选择的。
李老师很温柔,理论课不考勤,实验课不要求到场,在机试100(超简单,本人只用了一半时间就交卷)的情况下期末只需要考到84总评就可以被捞到95(这种情况下大作业多半会捞满)。
这里是进阶班的课程,虽然学生大多有很不错的c++(而不是c)功底,但上课依然会讲细碎的语法知识,即使我作为曾经的信竞选手也能学到平时很少使用的指针和一些C语言的底层逻辑。科大选择C语言(即使不是c++)而不是python作为给学生第一个学习的语言我还是很支持的,学习C语言更能锻炼逻辑能力和理解程序运行的方式。作业为15道常规编程题目和一项大作业,可以是自制游戏,工具或一些其他奇怪的选题,也可以是朴素一些的“大素数生成器”。常规题里有一些不讲理的题目,比如要求只能使用longlong,不能使用双重循环之类,还有要求按给定方式计算pi,输出保留给定位小数,这些题目都会由助教人工审核,直接定义double pi=3.1415926535然后输出时再截取会被助教驳回;更离谱的一个题目要求“额外空间复杂度为常数级”,就是输入长度为n的数组是可以的,然后就不能再定义长度与n有关的数组了,甚至修改存放输入值的数组,使用其符号位做标记也被助教认为是相当于使用了额外的O(n)空间。如此毫无实际意义的离谱要求真是世所罕见,在此严厉批评其背离程序设计与算法设计初衷。课程考核包含上机测试(编程题)和笔试(选择,填空),最终给分应该普遍较高。本课程一些额外的特点是,课程群非常活跃(并且大佬云集),老师有时也会参与讨论。全程无考勤。整体而言是一门不错的课。