计算机文化-第15章 计算机程序设计_第1页
计算机文化-第15章 计算机程序设计_第2页
计算机文化-第15章 计算机程序设计_第3页
计算机文化-第15章 计算机程序设计_第4页
计算机文化-第15章 计算机程序设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

冰MQN

下载

第15章计算机程序设计

星期二晚上,你和一群朋友学习到很晚,饥肠辘辘,大家商议去吃比萨饼。但你们掏出所

有的钱也只有24.63美元,根本不够八个人填饱肚子。看来还是多转几家饼店,比较一下价格,

“少花钱,多办事”。

你们先到了VanGo饼店,发现8.99美元可以买一块直径为8英寸且带双层奶油的圆饼。接着

在Venice店发现11.99美元可以买••块边长为10英寸的方形比萨饼。哪个价格更好呢?你想找个

计算器但找不到,一个朋友带了一台笔记本电脑,所以你可以编段程序来比较一下比萨饼的价

格。那么,接下来该怎么做呢?

计算机程序设计就是编写一些指令驱动计算机完成特定的工作。这一章将对此做一介绍。

计算机编程的基本概念包括:问题描述、算法、编码、控制结构、调试和建立文档。本章还包

括描述各种编程语言的特征、简介当今最流行的编程语言。本章是进行程序设计的基础。

本章概要

在本章中你将对计算机编程有初步的认识,而且将针对“比萨饼问题”编

写一-个小程序。你可以用在这里学到的知识与技巧去解决很多可用计算机解决

的问题。同时你将学到一些程序员用来描述、编写和调试程序的方法论。不管

你从事软件开发工作还是应用计算机,理解这些原则都会对你有益。读完这一

章你将能够做到:

•区别系统分析师和软件工程师。

•列出如今流行的编程语言。

•以国防部标准描述大型程序和小型程序的区别。

•在问题描述中鉴别哪些是假设?哪些是已知条件。实验

•描述算法、伪代码和程序代码之间的关系。

•列出至少四种表达算法的方法。

•鉴别简单的BASIC程序中的控制结构。

•描述程序中语法错误和逻辑错误的区别。可视化程序

•解释程序正文、注释和用户参考手册的用途。设计

•简述区分各种编程语言的主要特征。

15.1软件工程

软件工程是指软件的开发、运作、维护和最终消亡的整个系统过程。软件工程师负责信息

系统所用软件的编写工作。系统分析师和软件工程师的工作是交织在一起的,但也有所不同。

一个系统分析师要计划整个信息系统,包括硬件、软件、员工和数据。而软件工程师则致力于

理%>软件设计、编程和调试这些信息系统的软件组件上。

/CT.'

WWW\对于一个并不打算成为程序员的人来说,学习软件开发和电脑编程又有什么意义

7呢?首先,你可能在工作中会使用许多程序,你会发现一个字处理软件就包含75万行程

软件工程序,存在一些错误是无法避免的。同样,你会发现,一个人很难完成一个字处理软件的

1

428计算机文化•哪可0附

编写,这些最好留给专业的编程小组去做。虽然你不会去专门编写自己想用的软件,但你可能会

修改一些软件来满足你特殊的要求,这时,你对计算机编程的了解将有助于你拟订建设性的计划。

15.1.1计算机程序

。写一个程序很难吗?

和你所使用的商业软件相比,这里你所接触到的程序是微不足道的。按照国防部的标准,

少于100000条指令称为小程序,100000〜1000000行的归为中等,超过1000000行就是大程

序了。据统计,一个程序员平均每天只能完成20行指令。这并不奇怪,因为一个商用软件通常

由一个程序员小组来完成,而且要花几个月、甚至几年时间。

在第2章中我们讲过计算机就是告诉计算机如何解决问题的一系列指令的集合。但“写程

序”不同于“写信”。写信时,只要能表达你的思想,可以不管其结构和效率,写程序则不然。

人与人之间交流时,有歧义的句子有时仍能表辞达意。比如,你的朋友突然在上学路上说:

门没锁。你肯定知道他讲的是忘了锁上家门,而不是门上没有锁。但计算机却没有人那么发达

的思维,给计算机编写程序需要缜密的思考与斟酌。因此,计算机编程很强调结构性,丝毫不

能马虎。

写程序也要比写信难得多,但软件开发过程中有一些原则可以帮你理出一些头绪。计算机

程序设计首先从问题的描述开始,它是算法的基础,而算法则是程序的基础。接下来我们将对

问题描述、算法分析和程序指令进行详细的讨论。

15.1.2问题描述

。对前述比萨饼问题怎样进行好的描述呢?

提出问题才能解决问题,就像前面的例子:哪个比萨饼店更好呢?这种提法很模糊,对你

解决问题并无帮助,因为它没有告诉你哪些是已知条件。你知不知道各个饼店的价钱?饼的大

小?奶油层有多少?“哪个饼店更好?”这种提法并没有解释“好”的含义,是仅仅指饼的价

钱低,还是指同样多的钱买的饼奶油层多,还是指你们仅有的24.63美元能买到的饼越大越好

呢?看一下图15-1,你能否得出关于上面问题的一种更好的问题描述呢?

Tryour10"SquarePizza

Any2Toppingsjust$n.99

MMMKTHE

VENICE

ThMiAHerryRigRaw**

图15-1买什么样的比萨饼最合算

问题描述就是要说明一些能用来解决问题的要素。•个表达清晰的问题描述应该具备以下

三个特征:

•能说明描述问题范畴的任何假设。

班。哪QM

M第15章计算机程序设计429

下载

•罗列出已知的所有条件。

•具体说明需要解决什么问题。

在一个问题描述中,假设就是为了方便设计而假定的认为是正确的陈述。比如,在比萨饼

问题中,你可以假设只比较两种类型的比萨饼:方的和圆的。为了简化问题,你可以假设没有

长方形的饼,这是因为你所要解决的问题只与饼的面积有关,长和宽并不重要。还可以假设所

比较的比萨饼有相同厚度的奶油层。最后还可以说明,单位面积比萨饼价格低的就是最好的。

问题描述中的已知信息就是你要计算机帮你解决问题时提供给它的信息。对于比萨饼问

题,已知信息包括两个饼店的比萨饼价钱、形状、大小。已知信息在问题描述中经常用“已

知”来给出,例如“已知两饼店饼的价格、形状、大小……”

在你说明了已知条件后,你应该说明问题解决后你该如何做决定,也就是想让程序给你输

出什么信息。当然,在运行程序之前你并不知道答案,正如你不知道哪个饼店更实惠,但你可

以告诉计算机它应该输出哪个饼店更好。

假设你和朋友认为,能以最低的价钱买到最大的饼就是最实惠的饼店,即单位面积的饼的

价格最低,这样每平方英寸5美元的饼就比7美元的饼实惠。因此,只要能算出饼的单位价格,

比较它们,然后打印信息指出哪个饼店的价格低,问题就解决了。可以这样来写问题描述:计

算机算出比萨饼每平方英寸的价钱,然后输出是第一种还是第二种单位面积价格较低。

经过对问题的深入分析,可以做一些假设。最后,比萨饼问题的描述如下:

比较两种比萨饼,它们有相同多的奶油层,一种方的,一种圆的;已知价钱、形状和大

小;计算机计算两种比萨饼每平方英寸的价钱并输出那种价格低。

上面这种描述不易理解,下面这种格式较好:

假设:

两类比萨饼,Pl、P2

奶油层相等

一种方的,一种圆的,都不是长方形

单位面积价钱低的为最好

已知:

pPl=**;pP2=**(pPi为饼的价钱)

P1,P2的形状

PLP2的大小(以英寸为单位)

求:

每平方英寸饼的价钱(pPl,pP2)

输出:

若pPl<pP2,打印“PI店更实惠”

若pPl>pP2,打印“P2店更实惠”

若pPl=pP2,打印“两店一样”

##

现在我们学习了如何写问题描述,然后进行编程的下一步——算法设计。

15.1.3算法设计

。如何为比萨饼问题规划一个算法?

算法就是解决问题的步骤。算法是一个抽象的思想,但它是可表达的且是可执行的。比如,

430计算机文化

做奶酪面包就是这样一组步骤:把水烧开;蒸面包;最后加上奶酪。这些“算法”可以在菜谱

上作为步骤记录或陈述下来,并且你能照着去操作。

信息网®可行性是一个正确算法的重要特征,如果你耐心地按照算法一步步做,你一定可

以得出正确答案。同样,如果你按菜谱上的步骤,你也一定能做出奶酪面包。

算法是根据问题描述中给定的信息得出的。算法一开始并不写成规则的程序语言,

算法这样软件工程师就可以不管程序语法方面的问题,而致力于计算方法的设计。在下面

2的阶段,把算法改写成符合程序设计语言语法的语句,算法就可以执行了。

如果你是刚刚开始编程工作的,可能搞不清算法写到什么程度才算详尽。比如,该不该具

体说明诸如“如何执行”这类问题呢?其实算法的详尽程度和你要使用什么程序设计语言有关。

当你把一门语言中所有句型的语法语义都搞熟时,算法只要能表达你的意思就行了。对比萨饼

问题,假设你使用的是BASIC语言。表15-1给出了一些基于BASIC语言的恰倒好处的算法指令。

表15-1一个BASIC程序算法中写法的样本

算法实现的任务实例

赋值Size=10

列出公式SquareInchPrice=Price/SquareInches

等待输入数据EnterthePriceofapizza

显示计算结果DisplaytheSquarelnchPrice

得出结论Ifthepizzaissquare.calculateSquareinchesbymultiplyingtheSize*Size

重复某些操作Repeatthepricecalculationsforasmanypizzasastheuserwants

设计算法,一般你会先自己解决这个问题,然后再把这些步骤记录下来,因此必须先知道

一些信息,像比萨饼的成本、大小和形状等。同样计算机也需要这些初始信息,在算法中应该

具体说明计算机如何取得它。程序运行时,提示用户输入这些信息。算法可以这样写:

AsktheuserfortheshapeofthefirstpizzaandholditinRAMasShape1.

AsktheuserforthepriceofthefirstpizzaandholditinRAMasPrice1.

AsktheuserforthesizeofthefirstpizzaandholditinRAMasSizel.

接着你的算法应该详细说明如何操作这些信息。你想计算比萨饼每平方英寸的价钱,但像

“Calculatethepricepersquareinch”这样的指令既没有说明如何计算,也没有说明对方饼和圆

饼两种不同情况的处理方法。一种更为恰当的写法如图15-2所示。

2.计算圆形比萨饼的面积,

1.计算正方形比萨饼的

diamel使用计算圆形面积的公式兀BK

面积,用一条边长乘以另

约等于3.142,r?是圆半径的平

一条边长。由于正方形边.

长相等,可以用公式.方。比萨饼的大小是用直径来

表示的,所以需要将直径除以

Sizel*Sizel计算

2得到半径。使用Sizel/2。然

后,求半径的平方。”表示计

算机中的二次平方

IfShape1is»

calculate

3.求出比萨饼的面积后,

乘以每平方英寸的价可即可

图15-2计算每平方英寸比萨饼的算法

卜线输第15章计算机程序设计431

下载

上面的算法可以算出一块比萨饼的单价,对第二块还要写出同样的算法:

AsktheuserfortheshapeofthesecondpizzaandholditinRAMasShape2

AsktheuserforthepriceofthesecondpizzaandholditinRAMasPrice2

AsktheuserforthesizeofthesecondpizzaandholditinRAMasSize2

IfShape2issquarethencalculatethesquareinchesusingtheformula:

Squareinches2=Size2*Size2

IfShape2isroundthencalculatethesquareinchesusingtheformula:

Squareinches2=3.142*(Size2/2)A2

SquareinchPrice2=Price2/Squareinches2

最后算法还要指出计算机如何输出信息。你想让它告诉你哪种比萨饼单价低,算法可以这

样写:

ifSquareinchPrice1<SquareinchPrice2thendisplaythemessage“Pizza1isthebestdeal.”

ifSquareinchPrice2>SquareInchPricelthendisplaythemessage“Pizza2isthebestdeal.”

不要忘记若两种单价相等程序该输出什么:

ifSquareinchPrice1=SquareinchPrice2thendisplaythemessage“Bothpizzasarethesamedeal.”

比萨饼问题的整个算法如图15-3所示。

输入Pizzal的形状赋值给Shapely

输入Pizzal的价钱赋值给Pricel取第一张比萨饼的信息

输入Pizza1的大小赋值给Size1-

ifShape1issquarethen―

calculatethesquareinchesusingtheformula:

计算第一张比萨饼每

Squareinches1=size1*sizel

平方英寸的价格

IfShape1isroundthen

Calculatethesquareinchesusingtheformula:一

Squareinches1=3.l42*(sizel/2)A2

SquarelnchesPricel=Pricel/Squarelnchsl

输入Pizza2的形状赋值给Shape2

输入Pizza2的价钱赋值给Price2取第二张比萨饼的信息

输入Pizza2的大小赋值给Size2-

ifShape2issquarethen-

calculatethesquareinchesusingtheformula:

Squareinches2=size2*size2计算第二张比萨饼每

ifShape2isround(hen平方英寸的价格

calculatethesquareinchesusingtheformula:

Squareinches2=3.142*(size2/2)A2一

SquareInchesPrice2=Price2/SquareInchs2

IfSquareinchesPriceI<SquareinchPrice2then

Displaythemessage“Pizzalisthebestdeal”

IfSquareinchesPrice1>SquareinchPrice2then

输出结果

Displaythemessage“Pizza2isthebestdeal”

IfSquareinchesPrice1=SquareinchPrice2then

Displaythemessage“bothPizzaarethesamedeal”一

图15-3(比萨饼的算法)

432计算机文化

—।下载

15.1.4算法表达

。表达一个算法的最好方法是什么?

有几种方法表达一个算法:结构化英语、伪代码、流程图和对象定义。这些工具

不是程序设计语言,它们不能直接被计算机执行。使用它们的目的就是把你的思想用

文字表述出来。

伪代嬴结构化英语是英语的一个子集,用简短的句型反映过程的进行。如图15-4表示

?如何用结构化英语来表达比萨饼问题的算法。

«.另一个表达算法的方法是伪代码。伪代码好比是算法的注释系统,由英语和你熟悉的编程

语言混合而成。伪代码没有结构化英语规整,你可以随心所欲地去写。而且可以融入编程语言

的一些函数和语法。比较图15-4和图15-3,可以发现结构化英语和伪代码的区别。

displaypromptsforenteringshape,price,andsize

li^utShapel,Pricel,Sizel

ifShapel=squarethen

SquareInchesi♦Sizel*Sizel

ifShapel=roundthen

Squarelnchesl♦3.142*(Sizel/2)A2

SquarelnchPricel♦Pricel/Squarelnchesl

displaypromptsforenteringshape,price,andsize

inputShape2zPrice2zSize2

ifShape2-squarethen

Squarelnches2■Size2*Size2

ifShape2=roundthen

SquareInches2-3.142*(Size2/2)人2

SquarelnchPriceZ-Price2/SquareInches2

ifSquarelnchPricel<SquareInchPrice2then

output"Pizza1isthebestdeal.”

ifSquareInchPrice2<SquarelnchPricelthen

output"Pizza2isthebestdeal."

ifSquarelnchPricel=SquareInchPrice2then

玷蟠output"Bothpizzasarethesamedeal."

图15-4比萨饼程序的伪代码

第三种方法是流程图。流程图是描述计算机•步一步完成任务的图表。图15-5为比萨饼问

题的流程图。

另一种表达算法的方法是定义计算机要执行的对象,并定义操纵每个对象的方法。这种方

法对面向对象的程序设计很有价值,后面还将讨论。图15-6定义了一个关于比萨饼问题的对象。

习题八

1.如果你是一个,你会致力于信息系统中软件组件的开发。

2.按美国国防部的标准,约100000行代码的程序称为大程序。是对还是错?

3.写一个计算机程序之前,必须写来定义一些运行中要用到的元素。

4._____是完成任务或解决问题的步骤的有机集合。

5.英语和程序设计语言混合使用称之为o

6.____是描述计算机一步一步解决问题的图形表示方法。

图15-5比萨饼程序流程图

434-______的加雌嚼

Object:CalculateBestDeal

Type:Button

Appearance:「CalculateBestDeal一

Method:1

ifShapel=•square*THDJSquareInches1=Sizcl•Sizel

ifShcipel="round"THEMSquarelnchesl=3.142♦(Sizel/21*2

SquareTnchPricel=Pricel/Squarelnchesl

ifShap©2c,square*THE11Squaxelnches2=Slze2•Size2

ifShape?u-round*THE34Squarelnches2=3.142•(Size2/2)*2

SquareTnchPrice2=Price2/Squarelnches2

ifSquarelnchPrlcel<SquareInchPrice2thaiBestDeala"Pizza1isChe

bestdeal."

ifSquareInchPrice2<SquarelnchPricelthenBestDeal="Pizza2isthe

bestdeal."

ifSquarelnchPricel=SquarelnchPrice2thenBestDeal=*Bothpizzasare

thesamedeal."

图15-6比萨饼程序的对象描述

15.2编写计算机程序

问题描述和算法通常写入程序说明书,它们是程序设计必不可少的蓝图。写完了

程序说明书后,就可以编写程序了。程序的编写就是用程序设计语言把算法程序化。

编写程序的人称为程序员。对于大部分程序设计语言来说,编程就是输入命令;还有

程序号计一部分语言只需你选择对象和属性或编写对象的脚本即可。

工作

4用BASIC编写比萨饼问题的程序,你只需输入一连串的命令。图15-7给出了它的

完整的程序。仔细阅读,就能对程序的基本架构有一个大致的了解。

命令字用黑体表示

程序写成一个步骤表计算机从表中的顶部开始执行

RQ4r:/--Pizza:rograr,1

RMThisprogramtellsyouwhichoftwopizzasisthebestdeal.用REM开头表示注

REMtoyc?a:c;;ariEgthepricepersquareinchofeachpizza.释来解释一段程序

REMCollect:n:orn:i:ic-forrirsrpizza.

INPOT"Entertheshapeofpizzaone:*,Shape■$

INPOT-Enter二:沿priceofpizzaone:\Pricel.数据存储在变量或存储

INPOT"Enter二二9pizzaz*:",Jizci地址中。变量Shapel$

RO(pricece:squareinchforpizza.存储文本,如"round”

$表示文本变量。其他

if比二firstpizzais=:Tjare,ttysquareinchesbyrnureplying

onesidefaytheother.变量,如Fricel存储数

Ifatx:1:.二"square'THEN二Size.,.

据值,该变量名不合$

REM::th-:ny\oi::zaisrcjid,-Mlcjiar.vw必先:u.-quare:rz±”::vvtRre

REMpi.142,E;"2--rai/21-:73由=squa:':

If.:-THENR.m-1、::,:,二♦C二二21A2

SquarelnchPricel=Pricel/Squareinches]

REMCo.Lrr::t.initial:r.:oi7ar:or.torsecondpizza.

INPOT'Entershapeofpizzatwo:*,Shape2$

INPOT'EiiLvi•:.•/oipizzatwo:",?iice2

INPUT-Er.rerr.r;esi:?:-)fpizza:wo:Size2

REMCa;<''.!a'-'-pricepersquareinchforseconcipizza.

IfShnpe2$-"square*THEN-Tjarelr.chesi-Size:.*Size2

Ifc:iape2$二・round,THEN二•.142,.Size2:2):

SquareInchPrice2=Price2/Squaralnches2

REMDeT;;whichpizzaisri>」:圮匕<kulaiddispl-.y:esu!,s.

IfSquarelnchPricel<SquareInchPrice2imMessages="Pizza1isthebestdeal.*!

XfSquareInchPrice2<SquarelnchPricelU08HMessage$="Pizza2isthebestdeal.*

IfSquarelnchPricel=Squareiricerig:HffiN'fessageS="Bothpizzasarethe

sazned61..

Print:任wcge$

BHD

图15-7比萨饼问题的BASIC程序

卜CQZ第15章计算机程序设计435

下载

15.2.1程序顺序

.。我该如何告诉计算机程序执行的顺序?

娟(所谓顺序执行,就是计算机按照程序员指定的顺序执行每一条指令。第一条语句

兵J'先执行,接下来是第二条,……,一直到程序末尾。下面是一段用QBASIC编写的程

,序,用以输出<(Thisisthefirstline,"和nThisisthesecondline."

可视化程序PRINT"Thisisthefirstline/;

PRINT"(Thisisthesecondline."

虽然大部分现在的编程语言不需要写行号,但有些旧的编程语言则要标注行号,例如下面

这段用BASIC最初版本写的程序:

100PRINT"Thisisthefirstline/

200PRINT“Thisisthesecondline."

如果程序中标了行号,计算机就会从行号最小的语句开始执行,接着是次小的。图15-8中

的流程图表述了一段小的顺序指令。

图15-8顺序执行

•些算法给出的执行顺序和程序中写的不同,在某些情况下跳过一些指令或重复执行某些

指令。控制结构用于控制程序执行的顺序。一般有三种控制结构:顺序控制、选择控制和循环

控制。

15.2.2顺序控制

。有没有方法改变程序执行的顺序?

顺序控制结构能改变计算机执行的顺序,执行一条指令转而执行其他的指令。下

面这段QBAS1C程序使用GOTO语句告诉计算机直接跳往标号为"Widget”的语句执

行。语句"PRINT'Thisisthesecondline/"永远不会执行。

GOTOPRINT"Thisisthefirstline/

5GOTOWidget

«PRINT""Thisisthesecondline/"

Widget:PRINT“AllDone!”

END

436计算机文化:

--I下载

图15-9的流程图说明了计算机先

按标号顺序执行,然后在GOTO语句

的作用下跳往其他语句。

虽然GOTO这种结构很简单,但

过多的使用会使程序的可读性和可维

护性很差,所以熟练的程序员忌讳使

用它。1968年,《ACM通讯》杂志发

表了Dijkstra的一封著名的信

“G。To语句的害处”。他在信中称,

滥用GOTO语句将使别人很难读懂你

的算法,这也就意味着这种程序不易

更正、改善和修订。

有经验的程序员喜欢用除GOTO

语句以外的顺序控制结构把程序改写

成一个个的子程序、过程、模块或函

数。子程序、过程、模块和函数都是

程序的一段代码,但不包含在主程序

的顺序路径内。图15-10说明了用

GOSUB语句把执行路径转移到子程序内。

1.这是一个主程序。计算机开始执

行主程序指令直到遇到GOSUB命令2,GOSUB命令指示计算机转到

4.RETURN命令指示

计算机返回到主程序

图15-10执行GOSUB命令

15.2.3选择结构

。计算机执行程序是能否选择路径?

选择控制结构也称为决定结构或分支,告诉计算机根据所列条件的正确与否选择执行路径。

•彼卜第15章计算机程序设计437

^>1

比较简单的选择结构是IF...THEN...ELSE语句。下面这段程序使用IF...THEN...ELSE结构判断

输入的数字是否大于10。若大于数,打印"Thatnumberisgreaterthan10/否则,不打印这条

信息。

INPUTwEnteranumberfrom1to10:”,Number

IFNumber>10THENPRINT“Thalnumberisgreaterthan10!”

ELSEPRINT“Thatnumberis10orless."

END

15.2.4重复控制

。计算机能不止一次的执行一段程序吗?

重复控制结构乂称为循环结构或迭代结构,可以重复执行一条或多条指令直到满足退出条

件。在QBASIC中,最常用的循环结构是WHILE…WEND

结构。下面的例子用FOR...NEXT结构打印一条信息三次。

FORN=1TO3

PRINT“There飞noplacelikehome.”

NEXTN

END

图15-12的流程图描述了计算机如何执行循环结构。

为了对FOR...NEXT这种结构有一个更深刻的了解,

现在假设你就是计算机,执行下面这段程序。你可以用标

有N的框来代表内存地址。作为计算机,还要有一个显示

屏幕,用“显示”框表示。下面让我们一步步的执行这个

循环。

N屏幕输出图15-12计算机执行循环

438计算机文化CM忖川机骞

1下载

FORN=1TO3

PRINT“There'snoplacelikehome.”

NEXTN

END

1)首先你看到语句FORN=1TO3,把N赋值为1。在框N中写上1。

2)接下来执行下一条语句PRINT"There、noplacelikehome."在"显示"框中写入

“There'snoplacelikehome:'

3)语旬NEXT使你回到语句FORN=1TO3。因为这是第二次执行这条语句,所以在N框子

中写上2(把1擦掉)。

4)你应该测试一下N的值是否大于3。为什么?因为语句FORN=1TO3表示只有当N的值

不大于3时,你才能继续循环下去。现在N=2,继续执行。

5)执行下一条语句,把"There'snoplacelikehome写入"显示"框。

6)继续,遇到NEXT语句,回到FOR语句。

7)把N框中的值改为3,确信框中没有大于3的数,进入循环。

8)在显示框中再写上"There'snoplacelikehome."NEXT语句使你回到FOR语句,N框中

的值增为4。这次检查时发现N的值大于3,这意味着循环结束,应该跳出。

9)下面的语句是END,程序结束。

习题B

1.是用计算机语言描述一个算法的过程。

2.控制能把执行顺序从这条语句转到另一条语句。

3.结构使计算机按照所给条件的正确与否选择执行路径。

4.结构能重复执行一段程序直到某一条件为真。

15.3调试和文档

编制程序时,你必须对其进行测试代码的每一段来确定其可以正确地工作。这一过程称为

调试(debugging),因为这一过程就是查错,以避免程序运行时出错。编码时,你应当编制文档,

以作为永久性的记录来解释程序的工作过程。

15.3.1测试程序

O如何了解程序运行正确?

一个计算机程序必须对其进行测试来

保证程序工作正确。测试经常包括输入测

试数据来看看程序是否能够产生正确结

果。如果程序没有产生正确结果,程序员

必须查找程序中的错误、修改错误、再测

试程序。这个过程可能需要相当长的时间,

如图15-13。但是,测试却是程序设计中的

关键一步。图15-13斯坦福大学学生于1967年制作的

例如,要测试Pizza程序,你应当运视频,描述了一个程序员对于编程、

测试和调试过程中的沮丧状

行程序并输入数据并计算好结果,假设你

第15章计算机程序设计439

使用计算器来计算每平方平方英寸的价格,价格为18.50美元,大小15英寸的比萨饼的每平方

英寸的价格为0.08美元。一种测试程序的方法是运行程序,并输入价格18.50美元、大小15英寸

和形状。程序应当产生结果008美元。如果不是,你就知道写程序时出错了,需要修改错误。

但是,测试一组值还不够。你每次最少应当测试一个状态,并且应当测试每条分支。

Pizza程序有两个可能的分支来计算每平方英寸价格。一个分支是针对方形饼,一种是针对圆

形饼。即使你输入了一组测试方形饼的数据,程序能提供正确结果,但在你测试了圆形饼数据

之前,不能认为程序是正确的。

当你在程序中发现了一个错误时,可能是语法错,也可能是运行时错误。语法错误是由于

指令没有按照程序设计语言的语法规则编写所致。例如,当你要打印一个消息时,你需要使用

PRINT命令。命令IFAGE=16THEN"Youcandrive.”将产生语法错误,因为少了命令字

PRINTo正确的写法是IFAGE=16THENPRINT"Youcandrive.”

另一种类型的程序错误是运行时错误。运行时错误是当你运行程序时出的错。这类错误可

以是由类型错误造成,语法正确但不能产生所需的结果。例如,假设你在下列Pizza程序的命

令中错误地使用了号:

IFSquarelnchPrice1<SquareInchPrice2THENPRINT“Pizza2isabetterdealthanPizza1

由于你在应当使用符号的地方用了"<"符号,命令将产生错误结果。

其他运行时错误归类为逻辑错误。逻辑错误是一种程序设计或逻辑中的错误。逻辑错误可

能由于流程图或伪代码中问题说明不足或解法不完整或不正确造成。逻辑错误比起语法错误来

通常更难检测,也更费时间。

15.3.2程序文档

Q为何需要程序文档?

一个计算机程序不可避免地要修改。如果程序文档编制的好,修改程序就比较容易。例如,

假设两个饼店都在菜单中增加了一种新的矩形比萨饼。这样,你和朋友们需要修改程序,以便

可以输入矩形饼的边长。首先,需要理解当前程序的工作过程,虽然这对于很短的程序来说相

当容易,但假如你要了解一个计算收入税的50000行程序,特别当你不是该程序的程序员时,

难度可想而知。你可能需要一些附加的信息来解释程序逻辑和程序员设计的计算公式。

程序文档解释了程序的工作过程及使用方法。你创建的文档应当能为其他程序员用来修改

程序或者为其他人使用程序提供帮助。典型地讲,程序文档有两种形式:插入到程序代码中的

注释和专门制作的文档。

注释是插入到计算机程序的代码行中的解释性注解。改写一个程序时,程序员需要阅读原

来程序以理解程序如何工作,然后修订适当的代码段。如果一个原有程序的程序员在程序中加

了注释,那么程序就比较容易理解。

计算机执行程序时会略过这些注释,但这对需要修改程序的程序员来说,注释是很方便的。

一个文档比较好的程序都包含解释程序目的注释。例如,比萨饼问题有下面的注释:

REMThePizzaProgram

REMThisprogramtellsyouwhichoftwopizzasisthebetterdeal

REMbycalculatingthepricepersquareinchofeachpizza.

在一些意思不太明确的程序段也应加上注释。比如,语句3.142*(size/2)八2可能对读者并

不显而易见,因此在前面加上些注释会有好处:

REMTheprogramcalculatesthenumberofsquareinches

440计算机文化

1下载

REMinaroundpizzawhere

REMpi=3.142,size/2=radius,and(size/2)A2=radiussquared:

Squareinches=3.142*(size/2)A2

什么地方该加注释并没有固定的法则,但如果你参加一个项目,小组可能会制订一些规定

来保证程序中使•致的注释,如果你拥有了这方面的经验,很自然地就会使用注释。

专门制作的文档不属于程序,它包含的是一些对程序员和用户都有用的关于程序的信息。

文档既可以是文字的又可以是电子格式的。既然文档能为程序员和用户服务,因此也包含两类:

程序手册和用户参考手册。

程序手册中包含所有对程序员有用的信息,包括问题描述和算法。因为程序手册是软件开

发和维护的工具,所以只有程序员才用,用户不用。用户参考或称参考手册中的信息可以帮助

用户学会使用该软件。用户参考的电子版本通常能给用户提供在线式帮助。表15-2比较了用户

参考和程序手册中的信息。

表15-2程序文档

程序员手册用户参考

问题描述说明程序功能

以结构化英语、伪代码或流程图描述算法如何安装、启动和实用程序,以及其中的图表和菜单

程序源代码故障分析与排除

程序员一般负责编排代码并整理程序手册,但用户参考手册现在一般由专业的科

技作家去编写。科技作家专门解释科技概念和程序,把复杂的概念简化供非技术人员

阅读。许多大学开设科技写作课程,甚至有的大学设有科技写作学位。在计算机工业

科技写作中有经验的科技作家被聘为业余的或专业的雇员。

6

«习题C

1.输入已知数据来验证程序是否输出正确结果是______过程的-部分。

2.如果你忽略了编程语言的规则和语法,你可能会犯错误。

3.假设运行比萨饼程序时,输出结果为Pizza2价钱便宜。但实验数据说明Pizzal价钱便宜。

因为在你运行程序时出现了这种错误,所以应归为_______错误。

4.错误识别起来最困难而且费时。

5.解释程序如何工作和及如何使用它。

6.为了解释程序如何工作,而且使其他修改程序的程序员容易读懂,程序员往往在程序中

插入»

7.是为程序员编写的文档,而是为用户使用软件设计的文档。

15.4编程语言的特点

在过去的35年里出现了上百种编程语言。一些语言的开发是为了提高编程效率,降低出错

率。而另一些则是为专门的编程提供高效的指令集,例如商业程序和科技程序。其他的是用于

教学的。

这些语言在描述如何工作和如何给合适任务类型提供信息时各具特色。例如,PASCAL语

言是一种可编译的过程性的高级语言。当你需要选择语言来编程时,了解这些语言的特色和它

们的优缺点将很有帮助。

第15章计算机程序设计441

15.4.1过程性语言

Q比萨饼问题程序是用过程性语

言编写的吗?

用过程性语言编写的程序包含一系列的

描述,告诉计算机如何执行这些过程来完成

特定的工作。带有过程性特征的语言称为过

程性语言。编写比萨饼程序的BASIC语言就

具有过程性的特征,那些语句确切地告诉了

计算机如何工作:显示信息请求用户输入比

萨饼形状;请求输入大小;然后请求输入价

钱;如果饼是方的,用公式SquareinchPrice

=Price/Squareinches,等等。

过程性的编程语言适合于那些顺序执行

的算法。用过程性语言编写的程序有一个起

点和一个终点。程序从起点到终点执行的流

程是直线型的,即计算机从起点开始执行写图15-14过程性语言的执行

好的指令序列,直到终点(见图15-14)。

15.4.2说明性语言

Q是否是所有的语言都需要程序员明确给定解决问题的步骤呢?

说明性语言只需程序员具体说明问题的规则并定义一些条件即可。语言自身内置了方法把

这些规则解群为一些解决问题的步骤,这就把编程的重心转移到描述问题和其规则上,而不再

是数学公式。因此说明性的语言更适合于思想概念清晰但数学概念复杂的编程工作。

不同于过程性的程序,用说明性语言编写程序只需你告诉计算机要做什么,而不需告诉它

如何去做。如图15-15所示,这是一段PROLOG程序,问题是在所列的几个人中找出谁有姐妹。

male(Charlie)~

male(linus).______________Charlie、Linus■.Sam,

male(sam).George说明为男性(Male)

male(george)._

female(lucy).______________Lucy、Pattie、Amanda、

fenale(pattie).Anne说明为女性(Female)

fenale(amanda).

female(anne).|

parents(1inus,amanda,sam)."

描述父母与孩子的关系

parents(lucy,amanda,sam).

程序描述了确定人X是否为

sister-of(Y,X)H_________人Y的姐妹的规则。

female(X),LX必须是为女性。

2.X的母亲是M且父亲是Y。

parents(X,M,F),

3.Y与X有相同的母亲和父亲。

parents(YrM,F),I

图15-15Prolog程序

442计算机文化

|卜

15.4.3脚本语言

QHTML是一种语言吗?

HTML一般

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论