本文的核心,是在讨论如何真正的学好C语言,而不是讨论如何在C语言考试中拿高分。当然真正学好了C语言,拿高分也就不那么难了。

C语言是很多大学生大一的一门必修课,尤其是理工科专业,这门课程更是重中之重。如何学好C语言呢?这里提几点我的看法。

打好基础

基础对于任何东西的学习都很重要,没有基础肯定不容易学好,遇到问题解决不了,然后发现欠缺了到很多基础,就会感觉无从下手。C语言国内采用较多的是谭浩强的《C程序设计》,我更推荐的是C语言创始人参与编写的《The C Programming Language》,中文名《C程序设计语言》。

有时候有人问个问题,给他解释根本听不懂。我问他,你知道什么是变量,什么是表达式么?对方表示不知道。这就是基础欠缺太多的表现。这样的情况只能好好去看书补基础。

当然,基础知识严重欠缺也不能全怪学生。

由于C语言常常在大一学习,很多人还不能适应从高中到大学的转变。高中老师逼着学,一点一点不厌其烦的灌输知识;而大学,一下课老师就有自己的事,负责任的老师也就是偶尔抽出一些时间给大家集中解答疑问。于是很多人一下子转变不过来了。这个也是教育存在的严重问题吧,不能很好的培养学生的自主学习能力。

很多人没接触过编程,初次学习很难接受非常正常。很多东西可能都不懂,为什么要这么做啊?为什么printf就能输出Hello World?printf之所以能输出字符串,其原理深入研究下去比较复杂,没有学过编程的人更是无法理解。

所以初学的时候,不要过早的问为什么,先照着别人说的做,对语言逐步熟悉;到了学习的足够深入时,就有基础去探究深层次的原理了,甚至能自然的理解很多东西,即所谓的融会贯通。说的简单一点,初学C语言依赖printf的使用,而printf的原理则又依赖深入的C语言知识;互相依赖的东西,只有找到一个合适的切入点,一点一点的学习。

不惧怕英文

建议编程时,变量名多使用英文而不是拼音,具体的讨论,可参考下文:

《思想:不要惧怕英文——英文的作用和重要性》 http://www.hainter.com/english

好习惯的养成

很多初学者,对于软件设计规范没有什么概念,甚至一些老师也没有去强调这些问题,或者是学生没有认真听,而这一点恰恰是很重要的。在以后的工作中如果从事软件方面的工作,公司也会对软件设计规范有要求。

软件设计规范包括:命名风格、代码风格、注释风格、工程文件管理等。

命名风格包括变量名、函数名等,首先一般都用英文而不是中文,前面已经说了;统一比较重要,例如首字母大小写、单词之间用下划线还是大写的方式分割,例如lcd_display,LCD_Display,printInfomation等。

参考命名风格(模块名_功能):

很多人学习编程时,不知道代码风格的重要性,甚至都不知道什么是代码风格。所谓代码风格,可以简单的理解成程序代码的排版,在合适的地方应该加上缩进、空格,大括号要按照规定的格式对齐。如果你的代码有问题需要别人帮忙,代码排版混乱,高手肯定懒得给你看。就像写作文不加标点不分段一样,即使让作家给你看哪有问题,人家肯定也不愿意看。

如果有了正确的缩进,遗漏大括号之类的很多问题根本不会发生。

至于代码具体的风格,例如什么时候换行,什么地方加括号,并没有统一的规范。可参考《C++ Primer》一书中的讨论:

关于什么是 C 或 C++ 程序的正确格式存在无休止的争论,我们相信没有唯一正确的风格,但一致性是有价值的。在选择代码风格时,要考虑提高可读性,使其易于理解。一旦选择了某种风格,就要始终如一地使用。

《C++ Primer》中的C++代码风格

除了代码风格,注释风格也有必要注意下,这里不做细说。

参考注释风格:

工程文件管理,对于初学编程时,小的程序一般只有几个文件,没有太多的问题。

规范书写程序的重要性

减少代码错误,方便学习交流

代码混乱,别人看不懂 ,时间久了,自己也看不懂

实现代码复用,大大提高编程效率

完成大型工程时,好的风格非常有必要

多人开发程序,便于分工合作

公司工作对代码风格要求严格

养成良好代码风格是写出高质量程序的重要过程

写出优美的代码是一门艺术

……

当然,前面说的这些风格未免要求过分严格,对于我们平时学习编程来说,没必要总是那么规范,但是至少要做到,能让人看起来比较清晰舒服,基本的代码风格还是要有保证的。

认真

认真也是相当的重要。据观察,大神、学霸等某方面比较成功的人,在他所在领域,一般都非常认真。中国的技术为什么做不好,有一个重要因素就是缺乏认真做事的意识。从小由于环境等因素,作业只是为了完成任务,养成了不认真的习惯。我希望中国每个大学生,至少在自己想学好的事情上足够认真,这样才能对得起“大学生”这个称呼。转自科学网的一篇文章很值得我们思考:

《中日差距一厕所》http://www.hainter.com/china-japan-difference

多练习

想要学好C语言,最重要的一点就是多练习。学校开设的C语言课程基本上都会有上机课,一定要抓紧这些机会去实际练习编程。如果有时间和条件,也可以在机房或是自己的电脑上多进行实际操作练习。

自主学习与提问的智慧

当自己学习出了问题时,要尽可能独立思考去解决;再考虑通过查阅书籍和网上的资料来解决;实在还是解决不了,再考虑请教别人,而提问也需要智慧。具体可参考:

《自主学习 & 提问的智慧——学习中遇到难题怎么破?》 http://www.hainter.com/solve-problem

C程序如果出了问题需要提问,建议做到以下几点,会大大增加被人回答的几率:

至少有基本的代码风格,例如合理的缩进;

说明程序的目的;

如果出错了,描述一下哪里出错,错误的现象是什么。如果是编译时就有的语法错误,把编译器报错信息贴出来;如果是执行结果不对,不正确的执行结果是多少说清楚。因为看的人不一定能用电脑给你的程序再执行一遍试试,即使大神也不是机器人,代码也不是一眼能看明白的。

对于稍微复杂一点的程序,最好给出几个测试用例,也就是分别输入1、2、3的时候,正确结果应该是多少。

本文由jzj1993原创,转载请注明来源:http://www.hainter.com/c-prog-language

C语言那点事——如何从零学好C语言?相关推荐

  1. 如何学好C语言 如何学好C++

    zz:如何学好C语言 & 如何学好C++ 这两篇文章是在一个博客上看到的,这个博主写的我长期以来一直觉得很受用,推荐一下: http://coolshell.cn 如何学好C语言 我相信,这可 ...

  2. 没有c语言基础可以学python吗-零基础学Python之前需要学c语言吗

    Python本身是比较适合作为入门编程语言来学习的,一方面Python的语法结构比较简单清晰,实验也相对比较容易完成,这会逐渐增强初学者的学习信心,另一方面Python属于全场景编程语言,未来在很多领 ...

  3. 经典C语言程序100例之九零

    经典C语言程序100例之九零 如题 话不多说了,直接上代码 如题 [程序90] 题目:专升本一题,读结果. 话不多说了,直接上代码 程序源代码: #include "stdio.h" ...

  4. 我的Go+语言初体验——(4)零基础学习 Go+ 爬虫

    我的Go+语言初体验--(4)零基础学习 Go+ 爬虫 "我的Go+语言初体验" | 征文活动进行中- Go+ 语言非常适合编写爬虫程序,具有并发机制完善.并发数量大.占用资源少. ...

  5. c语言自定义double函数例子,C语言的那些事——sqrt()函数 跟 double型数据的“%lf”...

    C语言的那些事--sqrt()函数 和 double型数据的"%lf" 计算函数y=2*x^2中的x的值.计算x的值. 原本这是一道很简单的编程题目,但是对sqrt()函数以及do ...

  6. 保姆级零基础 C 语言学习路线,万字总结!

    从大学接触 C 语言编程,工作之后一直从事互联网 C/C++ 后台开发工作,粗略算下来有 10 多年经验了(但是年限也并不能代表什么),只能说对 C 语言学习有一些经验可以分享给初学者,让你少走一些弯 ...

  7. c语言单片机自动浇花系统,Arduino零基础C语言编程ch5-5.13综合示例–自动浇花系统...

    <Arduino零基础C语言编程ch5-5.13综合示例–自动浇花系统>由会员分享,可在线阅读,更多相关<Arduino零基础C语言编程ch5-5.13综合示例–自动浇花系统(5页珍 ...

  8. 零基础想学好C语言编程,首先要掌握的是正确的学习思路!

    如果新手要学习编程,一些前辈都会建议从Python.PHP.Java开始学. 不过,有些程序员是直接从C语言强势入门编程的. 那么,如何学习C语言呢?下面提供4种入门C语言的方法: 0.刷题 绝大多数 ...

  9. fudge函数C语言,C语言程序设计-中国大学mooc-题库零氪

    第二周:计算 2.1 变量随堂测验 1.以下哪些是有效的变量名? A.main B.4ever C.monkey-king D.__int 2.给定: int a,b; scanf("%d ...

最新文章

  1. 经典mysql数据库表案例_MySQL数据库的“十宗罪”(附10大经典错误案例)
  2. 《统计学》学习笔记之数据的图表展示
  3. IE和Firefox对iframe document对象的差异性
  4. oracle备份还原到本地_RMAN备份的基本操作与代码口令
  5. 为什么自己编写的页面总是在那里抖动_为什么小红书的简介添加不上 个性签名的修改方法...
  6. 计算广告 pdf_他创业20年死磕PDF一项业务,如今上市身家76亿:所有的突然牛逼,背后都是玩命死磕...
  7. jquery插件合集之图片裁剪
  8. Android 7.0判断栈顶Activity错误 几率显示为launcher
  9. jvm crash分析工具
  10. python编程入门书籍-关于 Python 的经典入门书籍有哪些?
  11. html5 元宵节送祝福,元宵节送上真心祝福语
  12. iOS LBS地图服务--高德地图使用大全
  13. 给你的网页加个二次元老婆吧
  14. 你不知道的CSS函数,Min、Max、Clamp()函数基础用法
  15. Cannot access 'age' before initialization错误
  16. error #6633: The type of the actual argument differs from the type of the dummy argument.
  17. 一个团队从无到有再到高效的管理方式
  18. Android4.4以上系统选择将第三方短信应用设置为默认短信应用方法
  19. Windows10下Linux子系统Ubuntu使用教程(1)——安装
  20. python自动批量下载_Python批量下载鼠标样式,自动化一条龙处理详解

热门文章

  1. 【转】C++ 关键字——friend
  2. 为mysql cluster添加sql节点
  3. 【培训稿件】构建WCF面向服务的应用程序(包含ppt,源代码)
  4. 泊松分布的分布函数_10分钟了解泊松分布
  5. 添加javascript代码:_javascript事件?你又了解多少呢
  6. 模块化加载_Java9模块化的类加载机制实现剖析
  7. k5b型计算机联锁知识,DS6-K5B计算机联锁系统日常维护注意事项
  8. css3如何向上_html5 – 使用CSS3不断向上动画气泡?
  9. php 安全包含文件系统,PHP_PHP四大安全策略,一、文件系统安全php如果具有r - phpStudy...
  10. 计算机网络部分(共44题),计算机网络原理2013年4月真题及答案