一、计算机常识
在学习C语言之前,先要了解一些计算机常识
1.计算机只能识别0和1
- 大家都知道,计算机要通电才能工作,说白了,它跟电视、洗衣机一样,都是电器。电器都有个共同的能力:懂得判断通电还是断电,通电就能工作,断电就停止工作。因此,从根本上讲,计算机只能识别电信号:高电平信号(通电)、低电平信号(断电),它只知道某个开关是通电还是断电。我们用1代表高电平,0代表低电平。
- 也就说,计算机只能识别0和1。
2.二进制
因为计算机只能识别0和1,因此计算机所能识别的指令和数据都是用二进制数(0和1)来表示的。所谓二进制,就是用0和1来表示所有的数。不过我们日常生活中最常用的是十进制,用0~9来表示所有的数
1> 二进制指令
给计算机灌输一些指令,它就能执行相应的操作,而计算机只能识别由0和1组成的指令。在计算机发展初期,计算机的指令长度为16,即以16个二进制数(0或1)组成一条指令,例如,用1011011000000000这条指令,是让计算机进行一次加法运算。因此,如果要想计算机执行一系列的操作,就必须编写许多条由0和1组成的指令,可以想象的到,这个工作量是如此巨大。
2> 二进制数据
平时我们在计算机中存储的一些数据,比如文档、照片、视频等,都是以0和1的形式存储的。只不过计算机解析了这一大堆的0和1,以图形界面的形式将数据展示在我们眼前。
二、程序设计语言发展史
我们可以利用程序设计语言来编写程序,再将编好的程序运行到计算机上,计算机就能够按照程序中所说的去做。从计算机诞生至今,程序设计语言大致经历了3个发展阶段:机器语言、汇编语言、高级语言。其中,C语言属于高级语言。
1.机器语言
1>什么是机器语言
在计算器诞生初期,所有的计算机程序都是直接用计算机能识别的二进制指令来编写的,也就是说所有的代码里面只有0和1。这种程序设计语言就是“机器语言”。这些由0和1组成的二进制指令,又叫做“机器指令”
2> 优点
- 由于机器语言编写出来的代码是能被计算机直接识别的,因此机器语言是直接对硬件产生作用的,程序的执行效率非常高。
- 机器语言能直接 访问 、 控制 计算机的各种 硬件 设备,如 磁盘 、 存储器 、 CPU 、 I/O端口 等。
3> 缺点
- 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令和指令的涵义,指令又多又难记。
- 编出的程序全是些0和1的指令代码,可读性差,还容易出错。
- 由于机器语言是直接对硬件产生作用的,对硬件的依赖性很强,因此不同型号计算机的机器语言又不一样。也就是说,如果2台不同型号的机器想实现一样的功能,需要编写2套完全不同的代码。
可以看出,机器语言很难掌握和推广,现在除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。
2.汇编语言
1> 什么是汇编语言
- 由于机器语言的种种弊端,严重影响开发效率,后面就出现了汇编语言。汇编语言其实就是符号化的机器语言,它用一个符号(英文单词、数字)来代表一条机器指令。比如,在机器语言中,用1011011000000000这条指令,是让计算机进行一次加法运算;而在汇编语言中,用英文单词“ADD”就可以表示加法运算。一个有意义的英文单词,很明显比一串又臭又长的二进制指令,直观好记多了。
- 由于计算机只能识别0和1,用汇编语言编写的代码是不能被计算机所识别的,像刚才的“ADD”,计算机肯定不知道是什么意思。因此,用汇编语言编写的代码需要翻译成二进制指令后,才能被计算机识别。这个翻译的工作交给“编译器”去做。
2> 优点
- 对比机器语言,汇编语言的代码可读性好
- 汇编语言能像机器语言一样,可以直接访问 、 控制 计算机的各种 硬件 设备,如 磁盘 、 存储器 、 CPU 、 I/O端口 等 。使用汇编语言,可以访问所有能够被访问的软、硬件资源。
- 目标代码简短(目标代码就是经编译器翻译过后的二进制代码),占用内存少,执行速度快。( 计算机中所有程序的运行都是在 内存 中进行的,因此内存的性能对计算机的影响非常大。 其作用是用于暂时存放CPU中的运算数据,以及与 硬盘 等 外部存储器 交换的数据。 只要计算机在运行中,CPU就会把需要运算的数据调到 内存 中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 )计算机的内存是有限的,因此一个应用程序运行时所占用的内存越少越好。
3> 缺点
- 汇编语言是面向机器的, 通常是为特定的计算机或系列计算机专门设计的。因此,不同的机器有不同的汇编语言语法和编译器,代码缺乏 可移植性,也就是说,一个程序只能在一种机器上运行,换到其他机器上就不能运行。
- 汇编语言的符号非常多、难记 ,即使是完成 简单 的 功能也 需要大量的汇编语言代码,很容易产生BUG ,难于调试
- 使用汇编语言必须对硬件非常了解,开发效率很低,周期长且单调
3.高级语言
由于汇编语言依赖于硬件,代码可移植性差,符号又多又难记,于是人类就发明了非常接近自然语言的高级语言。后面要学习的C语言就是高级语言。
1> 优点
- 简单、易用、易于理解,语法和结构类似于普通英文,且远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用太熟悉硬件知识
- 写出来的程序更加简洁。比如要计算2个数的和,在高级语言中可以写得非常简洁:d=a+b;。但是在机器语言和汇编语言中,就需要几条甚至几十条指令,而且不同机器还要编写不同的指令代码
- 用高级语言编写的同一个程序还可以在不同的机器上运行,具有可移植性
2> 注意
用高级语言编写的程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上
三、C语言简史
- C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作系统的基础)
- 随着UNIX操作系统的成功,C语言也得到了大幅度地推广,被先后使用到大、中、小、微型主机上,至今还是世界上最流行、使用最广泛的高级程序设计语言之一
- C语言是一门 面向过程 的语言,非面向对象的语言。(究竟什么是面向过程、面向对象,暂时不用去理解,只需要知道C语言是面向过程就Ok了)
下面是2013年3月份的编程语言热门排行榜
从C语言诞生至今,它的热度一点也没减过,前两名基本上都是Java和C
四、C语言的特点
1.丰富的运算符
计算机的基本功能就是计算,因此一门程序设计语言的计算能力是非常重要的。C语言提供了34种运算符,计算类型极其丰富,其中包括了最基本的加减乘除运算。
2.丰富的数据类型
- C语言的生命力 之所以 如何强大,很大一部分是因为它拥有丰富的数据类型。
- 正因为C语言数据类型丰富,运算能力极强,因此很多数据库都是用C语言编写的,比如DB2、Oracle等。
3.可以直接操作硬件
跟汇编语言一样,C语言可以直接操作硬件,允许直接对位、字节、地址进行操作(位、字节、地址是计算机最基本的工作单元),可以说几乎没有C语言做不了的事情。
4.高效率的目标代码
目标代码,就是经编译器翻译后的二进制代码。C语言的目标代码执行效率非常高。
5.可移植性好
在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。
上面所说的都是C语言的优点,它有个非常明显的缺点:语法限制不严格。这样就导致初学者对C语言语法不能理解得很透彻,而且在开发过程中也会带来很多容易忽略的问题。
五、C语言的作用
- 由于C语言具有强大的数据处理能力,而且允许直接访问内存地址,直接对硬件操作,因此它适于编写系统软件、图形处理、单片机程序、嵌入式系统开发甚至是用于科研。
- 很有游戏外挂都是用C语言写的
-
很多操作系统的底层都是用C语言写的,比如android
六、C语言的版本问题
从UNIX操作系统的成功后,C语言得到了广泛地应用,从大型主机到小型微机,都有C语言活跃的身影,也衍生了很多个版本的C语言。长期以往,C语言将可能成为一门有多个变种、松散的语言。一门正式的语言,肯定要有个标准才行,不然就乱套了。为了改变这种局面,1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,开始制定C语言标准的工作。1989年C语言标准被批准,这个版本的C语言标准通常被称为ANSI C