如何学好C语言?

Yuze-L

一些针对课程和课程以外Coding的经验分享

Overview

C语言学习什么?

  • C语言的语法和用法
  • 编程思想
  • 自学能力

推荐教材

  • C Primer Plus(第六版),Stephen Prata
    这本书可以说是非常详细而且循序渐进了。对于程序编写基础薄弱的同学非常好用!如果没有时间通读的话也可以作为参考书,在对某一部分(比如scanf怎么用)迷惑时查阅。

注意,上课用的教材*The C Programming Language(K&R)*其实不是特别适合用于初学者,因为这本书实际上介绍C语言的标准,对于初学者可能不是特别特别友好(细节也不是特别特别多)。**但是!**仍然推荐大家作为阅读材料,仔细品味和理解K&R的代码风格,同时也提高自己的英语水平,对于过时的内容大家最好结合C Primer Plus甄别。

另外,强烈不推荐使用谭浩强的红皮书!里面有一些错误,内容也有些许out of date.

推荐网站

Pre-requirement: VPN

  • 菜鸟教程 https://www.runoob.com/
    个人觉得,如果你想快速了解或者上手一门语言,最快的方式就是看菜鸟教程 ,里面不仅有C,更有其他的一些如Python之类的
  • Stack Exchange https://stackexchange.com/
    比较优质的问答网站(比某乎和某CSDN好多了),但是纯英文。
  • Wikipedia wikipedia.org
    比百度百科不知道好用多少倍的百科(对于科技类),注意中文内容少时可参阅英语页(eg. 冒泡排序
  • github
    有非常多前人的经验和代码(假如有大作业之类的不妨到上面来挖一下宝)
  • CSDN
    其实,最快的方法还是CSDN,中文,不用翻墙,非常友好。但是从质量上来看,CSDN良莠不齐(而且最近还搞收费真的无语子),大家注意甄别。

学习建议

Level1:小白

对于纯电脑小白,如果你的电脑操作不太顺畅,那么先建议你花点时间探索一下你的电脑,掌握一下如何使用Word, PPT, Excel, etc. 了解一下什么是文件以及不同的文件编码。想要真正入门,最好的办法就是每次遇到问题善用搜索,把之前不了解的东西弄明白。

Level2:入门

对于有电脑基础,想要入门C语言或者是在课后巩固的,个人比较推荐浙大翁凯老师的慕课程序设计入门——C语言 C语言程序设计进阶

Level3:佬

对于学过竞赛的各位大佬,这门课对你来说应该不会特别难受(应该还算是比较轻松的)。个人没有竞赛经历,所以没办法给出个人的经验,但是这里贴一个图灵那边给出的建议

信息竞赛生,省一等奖选手可以免听本门课程,非省一选手可以在课上摸鱼(其实非省一选手发邮件给老师也是可以被接受的),当然翁恺还是会讲一些有意思的东西值得一听。课程的后期涉及到指针,并行计算,多文件编程等知识,信息竞赛用的比较少,听一听还是受益匪浅的。而且翁恺老师会潜移默化地给大家灌输优化程序的思维和工程的思维,对“深受竞赛毒害”的同学来说还是很有帮助的。
以及信息竞赛目前使用的都是 C++ 语言,但本课程是 C,习惯了 C++ 的 OIer 一定要分清其二者的区别。
—图灵班学习指南,https://zju-turing.github.io/TuringCourses/major_basic/programming/

当然感兴趣的话也可以花这部分时间了解一下生物信息学(删去

面向考试的学习策略

假如你课上没听明白,作业也没做明白?没关系!多刷历年卷才是面向考试的合理策略。

老师应该会给历年卷,但是特别要注意,因为大家的范围和之前的不同,所以要尤其注意历年卷没cover到的部分!

另外,历年卷老师应该会发电子版,所以不用特意去蓝田买。

遇到不会的题目一定一定要搞懂!建议多去骚扰老师/助教/学长学姐(删去)

自学更为重要

很喜欢图灵学长组写的一段话:

大学老师一节课的内容甚至足够高中老师讲一个星期,高中是一个知识点反复咀嚼,用题目巩固,大学是知识点直接摆在你面前,更何况有些老师讲课水平实在有限,因此自学十分重要;
自学可以自己看书,参考 B 站网课。除此之外,网上还有很多电子书网站,内容都十分广泛。在课本的选择上,一般而言,不需要遵循网上的评论,只需要拿到书的电子版,看完前言和第一章,就可以知道自己能不能把这本书看下去。另外,课程的推荐教材也是必须重视的,虽然有些会编的十分糟糕,但考试重点多半也是推荐教材上的重点;

另外,大学与高中的不同点在于,教材之外还需要看参考文献。一般来讲,sci-hub, arxiv 是查文献必备的网站,尤其是 sci-hub,一般给出资料的 doi 就可以下载了,缺点是需要找可用的镜像站,只要百度一下,一般都有;
碰到 bug、问题或者需求善于从互联网获取解决方案。请不要使用 csdn 查找解决方案,因为不仅存在大量相互抄袭与错误,而且相对过时;请在 stack overflow 以及其他 stack exchange 系列论坛提问与搜索解决方案;
善于使用 github,github 不仅有广泛的开源软件的项目,更是将来你们合作开发与托管代码的重要平台。最好能学会使用 tex 和 markdown,是写报告与论文的优秀工具。

大学考试周压力更大
因为平时任务多,并且有些同学可能自律性不强,因此可能考试周前需要复习(预习)大量内容;实际上挂科离大家并不远,不要盲目自信;
考试周破防是正常的,平常任务多 ddl 多破防都是正常的,大家要适应,并且有时候不要太浪;
只要你愿意好好学习,挂科退院等会远离你的。
大学更为自由
没有人管你想要干什么,学什么,这是一把双刃剑,因为自律性不强的同学可能会学习不够上心而离开图灵班,但是同时也有好处就是你可以选择更好的老师,更好的课程,学自己喜欢的课程(比如人文社科类课程);
把握好这个自由的机会很重要。
—图灵班学习指南,https://zju-turing.github.io/TuringCourses/major_basic/programming/

Summary

课后的作业自己独立完成,千万不要直接从 CSDN 这种网站直接复制粘贴代码,建议看懂他人代码后一定要自己理解重新敲,否则毁人一生。

上课一定要理解,代码一定要多打。

一些实用的内容

  1. 如何让自己看上去、闻上去都像一个 CS 人
    https://turing2023.tonycrane.cc/cser/
  2. 图灵 2023 学长组资料汇总
    https://turing2023.tonycrane.cc/
  3. CS自学指南
    https://csdiy.wiki/
  • Title: 如何学好C语言?
  • Author: Yuze-L
  • Created at : 2023-10-22 11:24:47
  • Updated at : 2024-07-15 11:38:38
  • Link: https://yuze-l.github.io/2023/10/22/tips_on_C/
  • License: This work is licensed under CC BY-NC-SA 4.0.