1.1 程序设计的基本概念

学习提示

【了解】程序和程序设计的概念

C语言是一种程序设计工具,用C语言进行编程的过程就是程序设计的过程,因此,在讲C语言的用法之前,先介绍一些有关程序和程序设计的基础知识。

1.1.1 程序和程序设计

人们将需要计算机做的工作写成一定形式的指令,并把它们存储在计算机的内部存储器中,当人为地给出命令之后,它就被计算机按指令操作顺序自动运行,这样程序就被执行了。

广义上说,程序设计是用计算机解决一个实际应用问题时的整个处理过程,包括提出问题,确定数据结构、确定算法、编程、调试程序及书写文档等一系列的过程。

●提出问题:提出需要解决的问题,形成一个需求任务书。

●确定数据结构:根据需求任务书提出的要求,指定输入数据和输出结果,确定存放数据的数据结构。

●确定算法:针对存放数据的数据结构确定解决问题、实现目标的步骤。

●编写程序:根据指定的数据结构和算法,使用某种计算机语言编写程序代码,输入到计算机中并保存到磁盘上,简称编程。

●调试程序:消除由于疏忽而引起的语法错误或逻辑错误;用各种可能的输入数据对程序进行测试,使之对各种合理的数据都能得到正确的结果,对不合理的数据都能进行适当处理。

●书写文档:整理并写出文档资料。

请注意

数据结构是指数据在计算机中的存放形式,它用来反映一个数据的内部构成,即一个数据由哪些数据成分构成,以什么方式构成,呈什么结构,如线性表、树等,本书中不做详细介绍。

1.1.2 计算机语言

学习提示

【熟记】3种计算机语言的名称

【了解】常见的高级语言

计算机语言是人与计算机进行交流的工具。计算机语言分为机器语言、汇编语言和高级语言3种。

对于计算机本身来说,它并不能直接识别由高级语言编写的程序,只能接受和处理由0和1的代码构成的二进制指令或数据,这种直接面向计算机的指令称为“机器语言”。

目前,使用比较广泛的语言,如 Visuai C++、Java以及本书将要介绍的C语言等,它们都被称为计算机的“高级语言”。高级语言使用接近人们习惯的自然语言作为语言的表达形式,学习和操作起来十分方便,并且用高级语言编写的程序具有良好的通用性和可移植性,不依赖于具体的计算机类型。

汇编语言是介于机器语言和高级语言之间的一种语言。

1.1.3 算法的概念

学习提示

【掌握】算法的描述方法

我们知道,“确定算法”是进行程序设计过程中一个相当重要的步骤,那么究竟什么是算法呢?

1 算法的概念

不是只有计算的问题才有算法。广义上讲,算法是为了解决一个问题而采取的方法和步骤。例如,描述跆拳道动作的图解就是跆拳道的算法;一首歌曲的乐谱也可以称为该歌曲的算法,因为它指定了歌曲演奏的每一个步骤,按照此步骤就能演奏出预定的乐曲。

计算机科学中的算法是指为解决某个特定问题而采取的确定且有限的步骤,它是为了解决“做什么”和“怎么做”的问题。著名科学家沃思(NikikiausWirth)曾提出一个公式:

数据结构+算法=程序

其中,数据结构是对数据的描述,也就是程序中数据的类型和组织形式,而算法则是对操作步骤的描述。

2 算法的描述

算法是程序设计中非常重要的概念,它的处理对象是数据。有了算法,就可以用任何一种计算机高级语言将其转换为程序。看到这里,读者可能会想:算法既然这么重要,那算法是用什么方法来描述的呢?下面就解开答案。其实,算法可以用各种描述方法进行描述,目前最常用的有3种:伪代码、流程图和N-S结构图。

伪代码是一种近似高级语言但又不受语法约束的语言描述方法,这种方法比较易于理解,但描述较冗长。

流程图是一种很好的描述算法的工具,传统的流程图由图1-1所示的几种基本图形组成。

图1-1 流程图基本构成图形

用传统流程图表示算法的优点是形象直观、简单方便;缺点则是这种流程图对于流程线的走向没有任何限制,可以任意转向,描述算法时费时费力且不易阅读。

N-S结构图是由美国学者I.Nassi和B.Shneiderman在1973年提出的。这种流程图完全去掉了流程线,算法的每一步都用一个矩形框来表示,把一个个矩形框按执行的次序连接起来就是一个算法描述。

3 算法的特性

一个算法应该具有以下几个特性:

●有穷性;

●确定性;

●有零个或多个输入;

●有一个或多个输出;

●可行性。

1.1.4 结构化程序设计

结构化程序主要由以下3种基本控制结构组成,在后面的章节中将做详细的介绍。

1 顺序结构

顺序结构是最基本的算法结构,当执行由这些语句构成的程序时,将按这些语句在程序中的先后顺序逐条执行,没有分支,没有转移,没有步骤之间的相互约束,没有对某一步骤的多次使用,完全按照步骤的原有次序依次执行。顺序结构可用图1-2所示的流程图表示。其中图1-2(a)是流程图,图1-2(b)是N-S结构图。

2 选择结构

选择结构根据不同的条件去执行不同分支中的语句。选择结构可用图1-3所示的流程图表示,其中图1-3(a)是流程图,图1-3(b)是N-S结构图。

图1-2 顺序结构

图1-3 选择结构

3 循环结构

循环结构就是根据各自的条件,使同一组语句重复执行多次。循环结构的流程如图1-4和图1-5所示。图1-4是当型循环,这种循环的特点是:当指定的条件满足(成立)时,就执行循环体;否则就不执行。图1-5是直到型循环,该循环的特点是:执行循环体,直到指定的条件满足(成立),就不再执行循环。

由以上3种基本结构组成的算法结构可以解决任何复杂的问题,由它们所构成的算法称为结构化算法,由它们所构成的程序称为结构化程序。

图1-4 当型循环

图1-5 直到型循环

真题演练

【例1】流程图是描述算法的很好的工具,流程图一般由几种基本图形组成。其中输入输出框图形是( )。

A)平行四边形    B)长方形

C)椭圆形     D)菱形

【解析】算法可以用各种描述方法进行描述,目前最常用的有3种:伪代码、流程图和N-S结构图。传统的流程图由图1-3所示的几种基本图形组成。因此选项A正确。

【答案】A

【例2】算法所具有的特性不包括( )。

A)可行性

B)有穷性

C)确定性

D)美观性

【解析】一个算法应该具有5个重要的特性:有穷性、确定性、输入、输出以及可行性。

【答案】D

【例3】以下不能用于描述算法的是( )。

A)文字叙述

B)程序语句

C)伪代码和流程图

D)E-R图

【解析】算法的描述有伪代码、流程图、N-S结构图等方法。E-R图是实体联系图,不能用于描述算法。

【答案】D

【例4】以下叙述中错误的是(  )。

A)算法正确的程序可以有零个输入

B)算法正确的程序最终一定会结束

C)算法正确的程序可以有零个输出

D)算法正确的程序对于相同的输入一定有相同的结果

【解析】算法的特征如下:①有穷性。一个算法(对任何合法的输入)在执行有穷步后能够结束,并且在有限的时间内完成。②确定性。算法中的每一步都有确切的含义。③可行性。算法中的操作能够用已经实现的基本运算执行有限次来实现。④输入。一个算法有零个或者多个输入,零个输入就是算法本身确定了初始条件。⑤输出。一个算法有一个或者多个输出,以反映数据加工的结果。所以选项C错误。

【答案】C