C语言程序设计基础教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 程序设计语言概述

为了让计算机能够按照人的意图处理事务,人们必须事先设计完成各种任务的程序,并预先将它们存放在存储器中。

计算机主要由两大部分构成,即硬件和软件,主机、显示器等都属于硬件;软件又分为系统软件(即操作系统)、通用软件和应用软件,软件的主体是程序,因此程序设计语言是计算机科学技术中非常重要的一个部分。

程序实际上是用计算机语言描述的某一问题的解决步骤,是符合一定语法规则的符号序列。人们借助计算机能够处理的语言指示计算机要处理的对象及如何处理,这就是程序设计。通过在计算机上运行程序发出一系列指令,即可使计算机按人们的要求解决特定的问题。

1.1.1 程序设计语言的发展与分类

要完成程序设计自然离不开程序设计语言,不同的问题可以用不同的程序设计语言来解决,但解决问题的难易程度各不相同。了解程序设计语言的发展过程有助于读者加深对程序设计语言的认识,能更好地用其来解决有关问题。

当今程序设计语言发展非常迅速,新的程序设计语言层出不穷,其功能也越来越强大。程序设计语言有很多种,常用的不过十多种。按照程序设计语言与计算机硬件的联系程度将其分为3类,即机器语言、汇编语言和高级语言,前两类依赖于计算机硬件,有时统称为“低级语言”;高级语言一般与计算机硬件无关。

(1)机器语言。

机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合,它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点,不同型号的计算机的机器语言互不相通,按照一种计算机的机器指令编制的程序不能在另一种计算机上执行。例如,运行在IBM PC上的机器语言程序不能在51单片机上运行。

机器指令由操作码和操作数组成,操作码指出要执行的操作,操作数指定完成该操作的数据或它在内存中的地址。

例如,计算1+2的机器语言程序如下:

由此可见用机器语言编写程序,开发人员首先要熟记所用计算机的全部指令代码和代码的含义。编写程序时,开发人员必须处理每条指令和每一数据的存储分配和输入/输出,并且必须记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分烦琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且编写的程序全是0和1组成的指令代码,直观性差,难以记忆,还容易出错。

(2)汇编语言。

20世纪50年代中期,为了克服机器语言的缺点,人们采用了有助于记忆的符号(称为“指令助记符”)与符号地址来代替机器指令中的操作码和操作数。指令助记符是一些有意义的英文单词的缩写和符号,如用ADD(Addition)表示加法,用SUB(Subtract)表示减法,用MOV(Move)表示数据的传送等。而操作数可以直接用十进制数书写,地址码可以用寄存器名、存储单元的符号地址等表示,这种表示计算机指令的语言称为“汇编语言”。

例如,上述计算1+2的汇编语言程序如下:

由此可见,汇编语言克服了机器语言的难读难改的缺点;同时保持了占存储空间小和执行速度快的优点,因此许多系统软件的核心部分采用汇编语言编写。但是汇编语言仍是一种面向机器的语言,每条汇编命令都一一对应于机器指令。而不同计算机的指令长度、寻址方式、寄存器数目等都不一样,使得汇编语言的通用性和可读性很差。

(3)高级语言。

高级语言是更接近自然语言和数学语言的程序设计语言,是面向应用的计算机语言,与具体的机器无关。其优点是符合人类叙述问题的习惯,而且简单易学。高级语言与计算机的硬件结构及指令系统无关,有更强的表达能力,可方便地表示数据的运算和程序的控制结构,并且能更好地描述各种算法,容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。

高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如目前流行的Java、C、C++、C#、Pascal、Python、Lisp、Prolog和FoxPro等,这些语言的语法及命令格式都不相同。

例如,上述计算1+2的BASIC语言程序如下:

这个程序和我们平时的数学思维相似,非常直观易懂且容易记忆。

1.1.2 程序设计的过程

程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言编写的程序,程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。专业的程序设计人员常被称为“开发人员”。任何设计活动都是在各种约束条件和相互矛盾的需求之间寻求一种平衡,程序设计也不例外。在计算机技术发展的早期,由于机器资源比较昂贵,程序的时间和空间代价往往是设计关心的主要因素。随着硬件技术的飞速发展和软件规模的日益庞大,程序的结构、可维护性、可复用性和可扩展性等因素日益重要。

(1)分析问题。

对于接受的任务要认真分析,研究所给定的条件,明确最后应达到的目标。并且找出解决问题的规律,选择解决的方法,解决实际问题。

(2)设计算法。

设计解题的方法和具体步骤。

(3)编写程序。

将算法转换成计算机程序设计语言,编辑、编译和连接源程序生成可执行程序。

(4)运行程序,分析结果。

运行可执行程序得到运行结果,能得到运行结果并不意味着程序正确。要对结果进行分析,看其是否合理。如果不合理,要对程序进行调试,即通过上机发现和排除程序中的问题。

(5)编写程序文档。

许多程序是提供给他人使用的,如同正式的产品应当提供产品说明书一样,正式提供给用户使用的程序必须提供程序说明书,内容应包括程序名称、程序功能、运行环境、程序的安装和启动、需要输入的数据,以及使用注意事项等。