一、什么是计算机程序
有人以为计算机是“万能”的,会自动进行所有的工作,甚至觉得计算机神秘莫测。这是很多初学者的误解。其实,计算机的每一个操作都是根据人们事先指定的指令进行的。例如用一条指令要求计算机进行一次加法运算,用另一条指令要求计算机将某一运算结果输出到显示屏。为了使计算机执行一系列的操作,必须事先编好一条条指令,输入到计算机。
所谓程序,就是一组计算机能识别和执行的指令。每一条指令使计算机执行特定的操作。只要让计算机执行这个程序,计算机就会“自动地”执行各条指令,有条不紊地进行工作。一个特地的指令序列用来完成一定的功能。为了使计算机系统能够实现各种功能,需要成千上万个程序。这些程序大多数是由计算机软件设计人员根据需要设计好的,作为计算机的软件系统的一部分提供给用户使用。此外,用户还可以根据自己的实际需要设计一些应用程序,例如学生成绩统计程序、财务管理程序、工程中的计算程序等。
总之,计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。所以,计算机的本质是程序的机器,程序和指令是计算机系统中最基本的概念。只有懂得程序设计,才能真正了解计算机是怎样工作的,才能更深入地使用计算机。
二、什么是计算机语言
人与人之间的交流需要通过语言。中国人之间用中国话,英国人用英语、俄罗斯人用俄语,等等。人和计算机交流信息,也要解决语言问题,需要创造一种计算机和人都能识别的语言,这就是计算机语言。计算机语言经历了几个发展阶段:
机器语言
计算机工作基于二进制,从根本上来说,计算机只能识别和接受由0和1组成的指令。在计算机发展的初期,一般计算机的指令长度为16,即以16个二进制数(0或1)组成一条指令,16个0和1可以组成各种排列组合。例如用1011011000000000让计算机进行一次加法运算,人要使计算机知道和执行自己的意图,就要编写许多条由0和1组成的指令。
这种计算机能直接识别和接受的二进制代码称为机器指令,机器指令的集合就是该计算机的机器语言。在语言的规定中规定各种指令的表示形式以及它的作用。
显然,机器语言与人们习惯用的语言差别太大,难学、难写、难记、难检查、难修改、难以推广使用。因此初期只有极少数的计算机专业人员会编写计算机程序。
符号语言
为了克服机器语言的上述缺点,人们创造出符号语言,它用一些英文字母和数字表示一个指令,例如用ADD代表“加”,SUB代表“减”,LD代表“传送”等。如上面介绍的那条机器指令可以改用符号指令替代:
ADD A,B (执行 A+B—>A,将寄存器A中的数与寄存器B中的数相加,放在寄存器A中)
显然,计算机并不能直接识别和执行符号语言的指令,需要用一种称为汇编程序的软件,把符号语言的指令转换为机器指令。一般,一条符号语言的指令对应转换为一条机器指令。转换的过程称为“代真”或“汇编”。因此符号语言又称为符号汇编语言或汇编语言。
虽然汇编语言比机器语言简单好记一些,但仍然难以普及,只在专业人员中使用。不同型号的计算机的机器语言和汇编语言是互不通用的。用甲机器的机器语言编写的程序在乙机器上不能使用。机器语言和汇编语言是完全依赖于具体机器特性的,是面向机器的语言,由于它“贴近”计算机,或者说离计算机“很近”,称为计算机低级语言。
高级语言
为了克服低级语言的缺点,20世纪50年代创造出了第一个计算机高级语言——FORTRAN语言。它很接近于人们习惯使用的自然语言和数学语言。程序中用到的语句和指令是用英文单词表示的,程序中所用的运算符合运算表达式和人们日常所用的数学式子差不多,很容易理解。程序运行的结果用英文和数字输出,十分方便。例如在FORTRAN语言程序中,想计算和输出3.5×6sin(π/3),只须写出下面这样一个语句:
PRINT*,3.5*6*SIN(3.1415926/3)
即可得到计算结果。显然这是很容易理解和使用的。
这种语言功能很强,且不依赖于具体机器,用它写出的程序对任何型号的计算机都适用(或只须作很少的修改),它与具体机器距离较远,故称为计算机高级语言。
当然计算机也是不能直接识别高级语言程序的,也要进行“翻译”。用一种称为编译程序的软件把用高级语言写的程序(称为源程序)转换为机器指令的程序(称为目标程序),然后让计算机执行机器指令程序,最后得到结果。高级语言的一个语句往往对应多条机器指令。
自从有了高级语言后,一般的科技人员、管理人员、大中专学生以及广大计算机爱好者都能较容易地学会用高级语言编写程序,指挥计算机进行工作,而完全不顾什么机器指令,也可以不必深入懂得计算机的内部结构和工作原理,就能得心应手地利用计算机进行各种工作,为计算机的推广普及创造了良好的条件,人们称高级语言的出现是计算机发展史上的“惊人的成就”。
数十年来,全世界涌现了2500种以上高级语言,每种高级语言都有其特定的用途,其中应用比较广泛的有100多种,影响最大的有FORTRAN和ALGOL(适合数值计算)、BASIC和QBASIC(适合初学者的小型会话语言)、COBOL(适合商业管理)、Pascal(适合教学的结构程序设计语言)、PL/1(大型通用语言)、LISP和PROLOG(人工智能语言)、C(系统描述语言)、C++(支持面向对象程序设计的大型语言)、Visual Basic(支持面向对象程序设计的语言)和Java(适于网络的语言)等。
高级语言经历了不同的发展阶段:
(1)非结构化的语言。初期的语言属于非结构化的语言,编程风格比较随意,只要符合语法规则即可,没有严格的规范要求,程序中的流程可以随意跳转。人们往往追求程序执行的效率而采用了许多“小技巧”,使程序变得难以阅读和维护。早期的BASIC,FORTRAN和ALGOL等都属于非结构化语言。
(2)结构化语言。为了解决以上问题,提出了“结构化程序设计方法”,规定程序必须由具有良好特性的基本结构(顺序结构、分支结构和循环结构)构成,程序中的流程不允许随意跳转,程序总是由上而下顺序执行各个基本结构。这种程序结构清晰,易于编写、阅读和维护。QBASIC,FORTRAN77和C语言等属于结构化的语言,这些语言的特点是支持结构化程序设计方法。
以上两种语言都是基于过程的语言,在编写程序时需要具体指定每一个过程的细节。在编写规模较小的程序时,还能得心应手,但是在处理规模较大的程序时,就显得捉襟见肘、力不从心了。在实践的发展中,人们又提出了面向对象的程序设计方法。程序面对的不是过程的细节,而是一个个对象,对象是由数据以及对数据进行的操作组成的。
(3)面向对象的语言。近十多年来,在处理规模较大的问题时,开始使用面向对象的语言。C++,C#,Visual Basic和Java等语言是支持面向对象程序设计方法的语言。有兴趣者可以参考面向对象的程序设计方法和面向对象的语言相关书籍。
总之,进行程序设计,必须要用到计算机语言,人们根据任务的需要选择合适的语言,编写出程序,然后运行程序得到结果。