C与C++学习经验之谈

    • 一:C与C++介绍
    • 二:为什么学C和C++
    • 三:学好C/C++的关键
    • 四:我学习C与C++的过程
    • 结尾:

一:C与C++介绍

C 语言:
C语言于1972年11月问世,1978年美国电话电报公司(AT&T)贝尔实验室正式发布C语言,1983年由美国国家标准局(American National Standards Institute,简称ANSI)开始制定C语言标准,于1989年12月完成,并在1990年春天发布,称之为ANSI C,有时也被称为 C89 或 C90。

C语言是一门通用的,模块化,程序化的编程语言,被广泛应用于操作系统和应用软件的开发。由于其高效和可移植性,适应于不同硬件和软件平台,深受开发员的青睐。

1969-1973年在美国电话电报公司(AT&T)贝尔实验室开始了C语言的最初研发。根据C语言的发明者丹尼斯·里奇 (Dennis Ritchie) 说,C 语言最重要的研发时期是在1972年。
C语言之所以命名为C,是因为C语言源自Ken Thompson发明的 B语言,而B语言则源自BCPL语言。

1978年,丹尼斯·里奇(Dennis Ritchie)和布莱恩·科尔尼干(Brian Kernighan)出版了一本书,名叫《The C Programming Language》(中文译名为《C程序设计语言》)。

1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。
为统一C语言版本,1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,来制定C语言标准。1989年C语言标准被批准,被称为ANSI X3.159-1989 “Programming Language C”。这个版本的C语言标准通常被称为ANSI C。又由于这个版本是 89 年完成制定的,因此也被称为 C89。后来 ANSI 把这个标准提交到 ISO(国际化标准组织),1990年被 ISO 采纳为国际标准,称为 ISO C。又因为这个版本是1990年发布的,因此也被称为C90。

在ANSI C标准确立之后,C语言的规范在很长一段时间内都没有大的变动。1995年C程序设计语言工作组对 C语言进行了一些修改,成为后来的1999年发布的 ISO/IEC 9899:1999标准,通常被成为C99。

不同于C的另外一个是C++。
C++历史:
语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,
最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上了类似Simula的类机制。在这个过程中,Bjarne博士开始思考是不是要开发一种新的语言,当时贝尔实验室对这个想法很感兴趣,就让Bjarne博士等人组成一个开发小组,专门进行研究。
当时不是叫做C++,而是C with class,这是把它当作一种C语言的有效扩充。由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是我们的Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。
:C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。

二:为什么学C和C++

我是一名计算机的学生,如今许多跟我一样刚上大学的大一新生,学校安排给计算机专业学生的第一门课便是C语言,而对很多学生而言时,C语言是他们学习的第一门语言,俗话说,万事开头难,于是很多学生由于人本身的思维懒惰,便被流程控制、基本的算法设计所难倒,他们懒于去读程序、去思考。或者觉得C语言学来学去都是在做一些简单的数学题,设计来设计去都是简单的scanf做输入,printf做输出。感觉C语言已过时,C语言没什么大用,于是勇敢地放弃。殊不知C语言并没过时,说C语言什么大用更是无知。
当然后面大一下的时候学习了Python,大二的时候也学习了Java,其实结合我自己认为学习这么多的语言的用处并不是很大,个人觉得学好一门C语言已经够了,因为编程的不在于语言,而在于思想。好好学好C语言,其他的语言学起来也是相当的快。
为什么学C和C++?对于像我计算机专业的学学生来说,这个答案可能很简单,因为这是一门必修课。而对于毕业后当了程序员来说选择一门编程语言,在某种程度上,对职业生涯的发展会产生重大的影响,所以必须慎 之又慎。那么,为什么要选择一门诞生了将近半个世纪的语言?本文不是老生常谈的废话,如:”C 语言是编程的基础”、”学好 C 语言,走遍天下都不怕”等等,本文力争详尽而又有理的回答这个问题,旨在成为最好的为什么要学习和使用 C 的文章。
C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。
学习 C++,关键是要理解概念,而不应过于深究语言的技术细节。
学习程序设计语言的目的是为了成为一个更好的程序员,也就是说,是为了能更有效率地设计和实现新系统,以及维护旧系统。
C/C++语言的优点:

  1. 结构化设计语言

语法清晰、结构简单,模块化使得程序的各个部分除了必要的信息交流外彼此独立,便于开发、调试以及调试。

  1. 运算符多

括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符。在其它高级语言中难以实现的运算都可以在C语言中运用

  1. 数据结构丰富

能实现各种复杂的数据类型的运算,引入指针、结构体等概念。

  1. 为操作系统而生

像汇编语言一样对位、字节和地址进行操作,允许直接访问物理地址对硬件进行操作,把高级语言的基本结构和语句与低级语言的实用性结合起来。接近底层!!!

  1. 程序执行效率高

比汇编程序生成的目标代码效率低 10%~20%。

三:学好C/C++的关键

一:120%态度
你一定要在一开始就要有很小心谨慎的态度,并把C++当成一种难以训服的猛兽来看待。
C++是很难的语言,你千万不要以为几天就可以学好C++,要拿出120%的态度来对待。
二:多问“为什么要这样”的问题
学习C/C++一定要多问几个“为什么是这样”,“凭什么要这样”的问题。比如:很 多人知道C++有拷贝构造函数和初始化列表,但你真的知道为什么要有拷贝构造函数?为什么要有初始化列表吗?为什么要有template,为什么要有 RTTI,为什么不是别的呢?难道就是为了让一门语言变得Cool一些吗?完全不是这样的,C++中的任何一个feature都有些实实在在的原因,你一定要去了解为什么要把C++设计成这样的原因,你才能学好C++。
三:看书,大量的C/C++书。
从字面了解C/C++,通过自己的理解来加深自己对C/C++的理解,看多了,就悟透了。
四:实践
去通过网站找C/C++的题目,然后自己想怎么解决,然后用C语言编程并解答出来。个人认为这个可能是最好激发学习C/C++的愿望。

四:我学习C与C++的过程

我相信大多数跟我一样学编程的小伙伴都觉得编程比较枯燥乏味,我之前在如何学好C/C++的时候也说了,只有通过实践,多刷题来巩固自己的知识,下面给大家推荐通过网站的题目来提升自己,在开始之前说一下个人觉得这个网站的优势——C&C++程序设计(计算机程序设计),里面有在线编程的,在线编程旁边有编程的要求,能很好的先看题目的意思,然后自己编程中如果忘了题目意思或者没有理解透彻,你也可以一眼看到自己的题目,省去了许多时间。
说一下推荐这个网站的课程,这个课程适用于《C程序设计》、《C++程序设计》或同类课程,支持“零基础”的同学自主学习C和C++语言,对同学们的计算机和编程基础没有特殊要求。大家学习起来也不是很乏力,而且通关了还有金币和经验的奖励,我相信这个能带动大家的积极性,更愿意去编程,更愿意去锻炼自己的能力。
还有大家刚接触编程的时候老是喜欢漏掉例如:“,”,“;”少返回语句等,在头歌的线编程也能提示你在哪个地方有错误之处,有视频教学在学堂在线教学。下面有个图片就是本课程的视频地方,大家也可以去先看视频,然后回过头来编写程序。里面介绍了C/C++的课程的目的,本课程包含的内容等。

当你学C/C++的过程中,你也可以向其中申请证书,下面便是申请的状态。

在编程的路上要养成良好的习惯,做完一个题目保存到自己的新建一个文件夹,然后专门存放这一门课程的代码,原理,书籍等。
在我学习C/C++的过程中,遇到许多问题,一定要去找找为啥会出错,比如我之前遇到一个问题,个人认为这个绝对不会出错,但找了半天的原因,原来是在while结束的后面多了一个逗号,然后形成了一个死循环,导致一直出错。所以,大家应该多去实践平台去找题目锻炼自己的能力。这里给一个作者自己在完成的第一个题目后,自己写出的代码,做个示范。
对了,大家一定要先知道C的各个函数的意义,用法,然后再去做,祝大家的编程能力未来的路上越来越好。


当你出现错误的时候也有提示,更好的来帮助你找到错误之处。下图就是一个例子。

里面的内容也不是很多,但是基本都是基础中的,有代表性的,本课程把每一部分都分出来了,每一部分也有实训。下图就是本课程包含的内容。


因为本课程是按照每一周开放的,展示的图片是课程的一部分内容,因为是每周开相信所以大家学习起来也有动力,相信大家一定会学好这门课程的。

结尾:

学习任何理论,刷一定数量的题目都是不可少的,通过刷题来加深自己对书上理论的理解。会做题了,说明对基本理论掌握了,融会贯通了,否则需要继续加深对基础理论的理解,即看书学习。让我们不畏艰险,勇敢地克服学习上的一道道难关吧。

更多推荐

C与C++学习经验之谈