- 教孩子学编程:C++入门图解
- 党松年 方泽波
- 1778字
- 2023-11-29 20:07:37
1.1 程序设计语言
1.1.1 程序的基本概念
程序(Program)就是控制计算机各个部件运行的指令和相关数据的集合。计算机完成的各种复杂运算任务,都是由存储在计算机存储器中的各种程序来控制的。这里的运算可以是数学运算,如求两个数的和;也可以是符号运算,如查找和替换文档中的某个词等。从根本上讲,计算机是由数字电路组成的电子运算机器,只能做数字运算。计算机之所以能够做符号运算,是因为符号在计算机内部是用数字表示的。此外,计算机还可以处理声音和图像,因为声音和图像在计算机内部也是用数字表示的,这些数字最终都通过专门的计算机硬件和软件(多个程序的集合)转换成人可以听到的声音和看到的图像。
计算机程序都是由一系列基本操作组成的。这些基本操作可分为以下几类。
输入(input):从文件或输入设备获取数据。
输出(output):把数据显示到屏幕,或存入一个文件,或发送到其他输出设备。
基本运算:最基本的数据访问和数学运算(加、减、乘、除等)。
判断和分支:判断某个条件,然后根据不同的判断结果执行不同的后续操作。
循环:重复执行一系列操作。
任何一个计算机程序,不管多么复杂,都是按这几类基本操作一步步执行的。
编写程序就是把复杂的任务分解成多个子任务,再把每一个子任务进一步分解成更简单的任务,层层分解,直到任务可以用以上几类基本操作来完成。
1.1.2 机器语言和汇编语言
编写程序必须遵循一定的规则和方法,这些规则和方法称为程序设计语言。由于计算机内部只能进行二进制数据的识别和运算,因此最初的计算机程序都是用二进制代码来表达指令和数据,这种计算机硬件可以直接识别并执行的、由二进制代码组成的程序设计语言称为机器语言。例如执行数字2和3的加法,16位计算机上的机器语言指令如下:
11010010 00111011 // "2+3"的机器语言指令
机器语言是最底层的计算机语言,可以看作计算机的母语。用机器语言编写的程序都是由8位二进制数构成的,每个8位的二进制数都是有特定含义的指令或数据。可是人类看到的都是0和1的组合,很难判断出各个组合表示什么。于是就有人发明了另一种编程方法,根据表示指令功能的英语单词给每一种指令起一个相似的名字,并用这个名字来代替表示指令的0和1的二进制数组合,而数据则用人类更容易接受的十进制数或十六进制数来表示。这种类似英语单词的名字叫作助记符,使用助记符的编程语言称为汇编语言。例如执行数字2和3的加法,汇编语言指令如下:
mov result
, 2 ; 将数值2存入result寄存器中 add result,
3 ; 将result中的数值加3
汇编语言的助记符、数据与机器语言的二进制代码都是一一对应的,两者都是针对计算机硬件的,也就是说都是面向机器的语言。因为不同计算机硬件所用的助记符和二进制代码是不一样的,所以这样的程序通用性不好,如果把它移植到其他计算机上就无法正常运行了。机器语言和汇编语言通常称为低级语言,这种语言直接使用计算机硬件可以识别的指令和数据来编写程序,编写的程序可以在相应的计算机系统中直接运行。
1.1.3 高级语言
与低级语言相比,高级语言是更加接近自然语言的程序设计语言,使用人类易于接受的文字(通常用英文)和数学公式来编写程序。例如执行数字2和3的加法,用高级语言编写的代码如下:
result = 2 + 3; //结果存放在result中
源代码(Source Code)指未编译的按照一定程序设计语言规范书写的人类可读的文本文件。源代码使用高级语言编写,书写规范只与编程语言有关,与计算机的体系结构无关,同一种编程语言在不同计算机上的表达方式是一致的。
高级语言并不特指某一种具体的语言,而是包括很多种编程语言,如C、C++、C#、Pascal、BASIC、Java、Python、Lisp、PHP等。使用这些编程语言编写程序代码所要遵循的书写规范(语法、命令格式)各不相同。
用高级语言编写的源代码不能直接被计算机的中央处理器(Central Processing Unit,CPU)识别和执行,必须要转换成对应的目标代码(机器语言),这种转换过程称为编译(Compile)。编译任务实际上是由一种特定的程序来执行的,这种执行源代码编译任务的程序称为编译器(Compiler)。因为不同的高级语言的语法与命令格式都不一样,将源代码转换为目标代码(机器语言)的方式也不一样,所以每一种高级语言都有对应的编译器。
以C++为例,C++源代码(文件扩展名为cpp)在执行前,必须经过C++编译器转换为由机器指令表示的目标程序(文件扩展名为obj),然后将目标程序与相关的C++库函数链接,形成完整的可在操作系统中独立执行的程序,即可执行程序(文件扩展名为exe),如图1.1所示。
图1.1 C++源代码的编译过程