计算机是能够进行计算和逻辑判断的电子设备,2014年6月,TOP500组织公布了最新全球超级计算机500强排行榜榜单,中国国防科技大学研制的“天河二号”超级计算机,再次位居榜首,其峰值计算速度为每秒5.49亿亿次,持续计算速度每秒3.39亿亿次双精度浮点运算,相当于地球上每个人同时执行几百万次运算。
计算机在被称为计算机程序的机器指令序列的控制下对数据进行处理。而计算机程序中的指令序列是由被称为计算机程序员的人事先制定好的。本书将带领读者探索如何编写计算机程序,命令计算机实现特定功能。
“程序”一词来自于生活,通常指完成某件事务的一种既定方式和过程。在日常生活中,可以将程序看成是一系列动作执行过程的描述。而计算机程序是人们为了让计算机解决某个问题而编写的一系列有序指令的集合。
冯·诺依曼最先提出了在数字计算机内部的存储器中存放程序的概念,冯·诺依曼理论的要点是:数字计算机的数制采用二进制,计算机应该按照程序顺序执行,这是所有现代电子计算机的理论基础,存储程序控制原理又称冯·诺依曼原理。由于他对现代计算机技术的突出贡献,冯·诺依曼又被称为“计算机之父”。
计算机之所以采用二进制编码,是因为二进制只有0和1两个数码。可以表示0、1两种状态的电子器件很多,如开关的接通和断开、晶体管的导通和截止、电位电平的高与低等都可表示0、1两个数码。早期的程序员们将0、1数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
存储程序思想——把计算过程描述为由许多指令按一定顺序组成的程序,然后把程序和数据一起输入计算机,计算机便可自动地从一条指令转到执行另一条指令,对已存入的程序和数据进行处理后,输出结果。
为实现存储程序思想,计算机必须具备五大基本组成部件,包括:
·输入数据和程序的输入设备;
·记忆数据和程序的存储器;
·完成数据加工处理的运算器;
·控制程序执行的控制器;
·输出处理结果的输出设备。
这是现代计算机的模板,被称为“冯·诺依曼结构”。
虽然计算机技术发展很快,但存储程序思想至今仍然是计算机的基本工作原理。这一原理决定了人们使用计算机的主要方式——编写程序和运行程序。科学家们一直致力于提高程序设计的自动化水平,改进用户的操作界面,提供各种开发工具、环境与平台,都是为了让人们更加方便地控制计算机,可以少编程甚至不编程来使用计算机。
1.机器语言
计算机能够直接读懂的语言是机器语言,机器语言是直接用二进制代码指令表达的计算机语言。机器语言的指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义。例如,某台计算机字长为16位,即由16个二进制数码组成一条指令或其他信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作。例如,某种计算机的指令为1011011000000000,它表示让计算机进行一次加法操作;而指令1011010100000000则表示进行一次减法操作。
计算机可以直接识别机器语言,不需要进行任何翻译。每台机器的指令,其格式和代码所代表的含义都是硬性规定的,机器语言对不同型号的计算机来说一般是不同的。由于机器码是用许多二进制数表示的,用机器语言编程必然很烦琐、难记忆、易出错,非常消耗精力和时间,并且难以检查程序和调试程序,工作效率低。
2.汇编语言
为了使程序员摆脱机器语言的束缚,提高编程效率,计算机科学家进行了一种改进:用一些简洁的英文字母、符号串来替代一个特定指令的二进制串,例如,用ADD代表加法,SUB代表减法等。这样一来,程序变得易于理解,纠错及维护也变得比较方便,这种程序设计语言被称为汇编语言。
汇编语言大部分语句直接对应机器指令,执行速度快、效率高、代码体积小,主要用在存储器容量有限但需要快速和实时响应的场合,如仪器仪表和工业控制设备中。
虽然汇编语言较机器语言已有很大的改进,但仍是面向机器的语言,主要缺点是:涉及太多机器资源的细节、依赖于机器硬件、移植性不好。
3.高级语言
由于汇编语言依赖于硬件体系,且助记符量大、难记,于是人们又发明了更加易用的高级语言。这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1954年,第一个完全脱离机器硬件的高级语言——FORTRAN问世了,这是程序设计语言发展史上的一个分水岭,人们把机器语言和汇编语言称为低级语言(它与计算机硬件的距离比较近,但不便于人理解、不便于编写程序),把以后发展起来的语言称为高级语言。
高级语言的编写方式更接近人们的思维习惯,例如,可以用“+”来表示加法,用“-”表示减法,并且它编写的程序具有一定的通用性。低级语言涉及计算机硬件细节,所以不具有通用性。高级语言远离机器语言,与具体的计算机硬件关系不大,因而写出来的程序可移植性好、重用率高。要想在某一台计算机上运行用高级语言所编写的程序,该计算机只需要提供该语言的翻译系统即可。
但是,一般的高级语言难以实现汇编语言的一些功能(汇编语言可以直接对硬件进行操作),人们需要有一种既有高级语言的易编写、可移植性好等特性,又具有汇编语言精炼和接近硬件的特性,在这种情况下C语言应运而生。