第1章程序设计基础
1.1程序设计基本概念
计算机作为一种智能工具正广泛地应用于人类社会的各行各业,它由硬件和软件组成。本节将介绍软件的一些基本概念。
1.程序
要利用计算机来处理问题,就必须要事先编写出使计算机按照人的意愿工作的应用程序。所谓程序,就是一系列遵循一定规则和思想并能正确完成指定工作的代码(也称为指令序列)。通常,一个计算机程序主要描述两部分内容,第一部分是描述问题的每个对象及它们之间的关系,第二部分是描述对这些对象进行处理的规则。其中关于对象及它们之间的关系涉及数据结构的内容,而处理规则是指求解某个问题的算法。因此,对程序的描述有如下等式:
程序=数据结构+算法
一个设计合理的数据结构往往可以简化算法,而一个好的程序有可靠性、易读性、可维护性等良好特性。
2.程序设计
所谓程序设计,就是根据计算机要完成的任务提出相应的需求,并在此基础上设计数据结构和算法,然后再编写相应的程序代码并测试该代码运行的正确性,直到能够得到正确的运行结果为止。通常,程序设计是很讲究方法的,一个良好的设计思想能够大大提高程序的高效性和合理性。因此有人提出如下关系:
程序设计=数据结构+算法+程序设计方法学
任何一个程序必须包含这三方面的内容。
3.算法
所谓算法,就是问题的求解方法。通常,一个算法由一系列求解步骤组成。正确的算法要求组成算法的规则和步骤的意义是唯一确定的,不能存在二义性,而且这些规则指定的操作是有序的,按算法指定的操作顺序执行能够在有限的执行步骤后给出正确的结果。
上面提到,算法不允许存在二义性,这是非常重要的,如果算法存在二义性,那么程序的编码工作将无法进行,同时,算法也不允许存在模糊的概念,因为二义性和模糊性都是不可操作的。如“加一吨的水”有明确的概念,这在程序的计算或控制中是可以
操作的,但是如果说“加一些水”,那就无法操作了,因为日常生活中,多少才认为是“一些”呢?这就没有明确的意义,毕竟程序是根据人的具体要求来完成相应工作的。
通常算法的建立过程是逐步求精的,一般是先给出粗略的计算步骤框架,然后再对框架中的具体内容进行逐步细化,添加必要的细节,使之成为较为详细的描述,当然,细化可能做不到一步到位,因此还要进行更进一步的细化,直到能够把需求通过编程语言完全描述为止。
描述算法的常用工具是流程图,也称为程序框图,流程图是算法的图形描述,它往往比程序更直观,更容易阅读和理解。不过它只是一种表现工具,计算机并不能直接识别和运行流程图。
4.数据结构
数据结构是指数据对象及其相互关系和构造方法,程序中的数据结构描述了程序中的数据间的组织形式和结构关系。
数据结构与算法密不可分,一个良好的数据结构将使算法简单化;只有明确了问题的算法,才能较好地设计出数据结构,因此两者是相辅相成的。对于计算机程序而言,其构成与数据结构关系密切,程序在实现算法的同时,还必须完整地体现作为算法操作对象的数据结构。对于复杂问题的求解,常常会发现由于对数据的表示方式和结构的差异,对该问题的抽象求解算法也会完全不同。前面已经提到,对同一个问题求解,当然允许有不同的算法,也允许存在不同的数据结构,而依不同算法编写的操作代码,其执行效率也就不一样。
5.语言
算法不仅要通过具体的语言来表述,还要采用合适的方法来表达,才能够形成程序。可以这样说,算法是程序的灵魂,是解决“做什么”和“怎样做”的问题。一个好的程序必须要有一个合理、高效的算法,数据结构是程序要处理的具体对象,语言是描述算法过程的工具。
6.程序设计的方法
程序设计方法分为两大类:面向过程的程序设计方法和面向对象的程序设计方法。
面向过程的程序设计方法是将完成某项工作的每一个步骤和具体要求都考虑在内来设计程序,程序主要用于描述完成这项工作所涉及的数据对象和具体操作规则,如先做什么、后做什么、怎样做、如何做。C语言是一种面向过程的程序设计语言。
面向对象的程序设计方法是将任何事物都看成一个对象,它们之间通过一定的渠道相互联系,对象是活动的、相互对立的,是可以激发的,每个对象都是由数据和操作规则构成的。在进行程序设计时,主要针对一个个对象,所有数据分别属于不同的对象,并被封装在对象内,只要激发每个对象完成相对独立的操作功能,整个程序就会自然完成全部操作。
1.2算法和结构化程序设计
1.2.1算法的概念
做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。计算机算法:计算机能够执行的算法。
当设计一个程序时,通常先分析程序中需要的数据并对数据进行描述,即数据结构设计,然后再根据功能要求设计解决问题的方法,即算法设计,最后用某种计算机语言将其描述出来;同时,为了保证程序有很高的正确性、可靠性、可读性、可理解性、可修改性和可维护性,在整个设计过程中,还必须采用科学的程序设计方法。因此,可以把程序表示为:
程序=数据结构+算法+程序设计方法+语言工具和环境
数据结构指的是数据的组织形式,并且必须是允许定义和使用的数据结构。根据数据的性质和结构,可以把数据定义为某种数据类型;同时利用规定的数据类型,还可以构建更复杂的数据结构,如链表、堆栈、树等。算法指的是解决问题的方法和步骤;程序设计语言是全部计算机指令(语句)的集合;按照程序设计语言的词法、语法和语义规则设计的计算机指令(语句)序列就是一个程序,而程序也是计算机算法的体现。当设计和编写程序时,并不是简单地写一个程序,而是像一个工程,为了保证其质量,就必须采用科学的程序设计方法,程序设计方法的种类有很多,主要有结构化程序设计方法、面向对象程序设计方法等。
算法设计是程序设计的主要步骤,没有高质量的算法就没有高质量的程序。
算法(Algorithm)指的是解决问题的方法和步骤。一个算术问题的解题过程、一首乐谱、一份菜谱、一个工作计划等都是一个算法。人们在工作和生活中做每件事情都有其特定的步骤和方法。在现代,特别是计算机诞生之后,人们把计算机解题步骤称为计算机算法,本书谈到的算法,没有特别说明,指的就是计算机算法。
1.2.2算法的特性
当设计和使用某个算法时,必然要考虑其是否可行。使用一个没有价值的算法是没有任何意义的。因而,算法具有若干约束特性,具有约束特性的算法才称其为算法。著名计算机科学家Knuth在其《计算机程序设计艺术》一书中详细描述了算法的5个特性:(1)有穷性:算法是一组有穷步骤序列,即一个算法必须在执行有穷步骤后结束。一个算法如果永远不能结束或需要运行相当长的时间才能结束,那么这样的算法是没有使用价值的。
(2)确定性:算法中的每一个步骤都必须要有明确的定义,不能含糊、不能有歧义。如“请面向前方”就有歧义,因为“前方”在无任何参照物的参照下,可能是东、南、西、北等的任何一方。
(3)大于等于0个输入:在算法执行过程中可以有0个或若干个输入数据,即算法处理的数据既可以不从外部输入(内部生成),也可以从外部输入。少量数据适合内部生
成,而大量数据一般需要从外部输入,所以多数算法中要有输入数据的步骤。
(4)大于等于1个输出:算法在执行过程中必须要有1个以上的输出操作,即算法中必须要有输出数据的步骤。一个没有输出步骤的算法是毫无意义的。
(5)可行性:算法中的每一步骤都是可实现的,即在现有计算机上是可执行的。如:当B是一个很小的实数时,A/B在代数中是正确的,但在算法中却是不正确的,因为它在计算机上无法执行,而要使A/B能正确执行,就必须在算法中使B满足条件:|B|>δ,其中δ是一个计算机允许的小的实数。
一个问题可有若干个不同的可行算法。在不同的算法中有好算法,也有差算法,如:针对同一问题,执行10分钟的算法要比执行1小时的算法好得多。目前,评价算法质量主要有4个基本标准:正确性、可读性、通用性和高效性。一个好的算法应满足运行结果正确、可读性好、可适用一类问题的解决并执行速度快、运用时间短、占用内存少标准。当然,高效性和可读性往往是矛盾的,可读性要优先于高效性。目前,在计算机速度比较快、内存比较大的情况下,高效性已处于次要地位。
1.2.3算法的描述
对于算法,需要选择一种合适的描述工具进行描述。常用的描述工具有自然语言、流程图、N-S图、伪代码等。
1.用自然语言描述算法
用自然语言描述算法就是选择某种日常使用的语言(如汉语、英语)来描述算法。使用自然语言描述算法的优点是描述自然、通俗易懂而且灵活多样,但缺点是容易产生歧义;因此,在算法设计中应少用或不用自然语言描述算法。通常是在设计初步算法时适当采用自然语言描述,然后还需用其他描述工具细化算法描述。
【例1-1】输入两个数a、b的值,然后交换两数的值。
算法描述如下。
S1:输入两个数a、b的值;
S2:使a的值赋给c;
S3:使b的值赋给a;
S4:使c的值赋给b;
S5:输出a、b的值。
【例1-2】输入两个正整数m和n,求两数的最大公约数。
算法描述如下。
S1:输入正整数m、n的值;
S2:若m小于n,则交换两个数的值;
S3:求解m整除n的值,并赋给r;
S4:使n的值赋给m;
S5:使r的值赋给n;
S6:当r的值不等于0,转S3继续执行;否则执行S7;
S7:输出两数的最大公约数的值m。
【例1-3】输入一个年份,判定其是否为闰年。
闰年判定的条件为:能被4整除但不能被100整除的年份是闰年;或者能被100整
除又能被400整除的年份是闰年。
算法描述如下。
S1:输入一个年份y ;
S2:若y 不能被4整除,则输出“y 不是闰年”;
S3:若y 能被4整除,但不能被100整除,则输出“y 是闰年”;
S4:若y 既能被100整除,又能被400整除,则输出“y 是闰年”;否则输出“y 不是闰年”。
2.用流程图描述算法
流程图是采用一些框图来描述算法的一种工具。美国国家标准化协会ANSI 和国际标准化组织ISO 公布的标准(ISO5807—85)规定了流程图采用的一些框图,如图1-1所示。其优点是描述简洁、清晰和直观,缺点是由于转移箭头可以无约束使用,所以会影响算
法的可靠性。流程图由以下几部分组成。
图1-1
流程图中常用框图
开始结束框:表示流程图的起点或终点,即开始或结束,框中给出开始或结束说明。 处理框:表示各种处理功能,框中给出处理说明或一组操作。
输入/输出框:表示数据的输入或输出,框中给出输入或输出数据说明。
判断框:表示一个逻辑判断,框中给出判断条件说明或条件。一般情况有两个出口,分别表示条件的成立或不成立(真或假、是或否),但在执行过程中只有一个出口被激活,如图1-2所示。
图1-2 判断框
流程线:表示算法的执行方向,且一定为单向线。
注释框:表示对流程图某一部分的解释、说明。一般绘制在侧面,如图1-2所示。 虚线:表示被注释的范围,如图1-1所示。
连接:表示流程线的断点(去向或来源),在图中给出断点编号,如图1-3所示。
(a) 开始结束框 (b) 处理框 (c) 输入输出框 (d) 判断框
(f) 流程线 (g) 注释框 (h) 虚线 (i) 连接点
图1-3 连接示意图
1966年,Bohra和Jacopini提出了三种基本结构:顺序结构、分支结构和循环结构。
(1)顺序结构。顺序结构是一种最简单、最基本的结构。在这种结构中,各程序块按照出现的顺序依次执行,如图1-4所示,表示A框执行完后立即执行B框;它只有一个入口a和一个出口b。
(2)分支结构。也称为选择结构,是根据给定的条件判断在两条可能的路径中选择哪一条,如图1-5所示,若条件P为真时执行A框处理,为假时执行B框处理;当然,A、B框可为空,但不能同时为空。它只有一个入口a和一个出口b。在执行时,只可能执行A 框或者执行B框,不可能既执行A框又执行B框;但是无论走哪一路径,都在b口结束。
图1-4 顺序结构图1-5分支结构
(3)循环结构。循环结构也称为“重复处理结构”,包括当型循环结构和直到型循环结构。当型循环结构是在满足给定条件时反复执行某一程序块A,否则不执行。如图1-5(a)所示,先判断条件P,当P为真时执行A框,A框处理完后再判断条件P,当P为真时再执行A框,循环往复,直到判断条件P为假时为止。直到型循环结构是先执行程序块A,直到满足给定条件时,不再执行。如图1-5(b)所示,先执行A框,A框处理完后再判断条件P,当P为假时再执行A框,如此循环往复,直到判断条件P为真时为止。从图中可以看出,循环结构也只有一个入口a和一个出口b。
图1-5 循环结构
在这三种基本结构中,有以下4个共同特征。
●只有一个入口。
●只有一个出口。
●结构中的每一部分都有机会被执行到。
●结构内不存在“死循环”。
现已证明,由上述三种基本结构顺序组成的算法结构可以解决任何复杂的问题。例1-1~例1-3用流程图表示,分别如图1-6~图1-8所示。
图1-6 【例1-1】流程图图1-7 【例1-2】流程图
图1-8 【例1-3】流程图
3.用伪代码图描述算法
伪代码也称过程描述语言(Program Design Language,PDL),是介于自然语言和高级程序设计语言之间的一种文字和符号描述工具,它不涉及图形,和写文章一样,一行一行、自上而下地描述算法,书写方便,格式紧凑,言简意赅。
【例1-4】把【例1-3】用伪代码表示。
BEGIN(开始)
输入年份y
if y 不被4整除
print y:“不是闰年”
else
if y 不被100整除
print y:“是闰年”
else
if y 不被400整除
print y:“不是闰年”
else
print y:“是闰年”
end if
END(结束)
上述是用不同的描述工具描述算法,但要真正被计算机执行,还需要用计算机语言编写出算法。用高级语言表示结构化算法的程序就是一个结构化程序,如下面的例1-5就是用C语言编写的一个结构化程序。
【例1-5】把【例1-1】用c语言实现。
void main()
{ int a,b,c;
printf(“Please input a,b:”);
scanf(“%d %d”,&a,&b);
c=a;
a=b;
b=c;
printf(“a=%d b=%d\n”,a,b);
}
1.2.2 简单算法举例
【例1-6】求1×2×3×4×5。
最原始方法:
步骤1:先求1×2,得到结果2。
步骤2:将步骤1得到的乘积2乘以3,得到结果6。
步骤3:将6再乘以4,得24。
步骤4:将24再乘以5,得120。
这样的算法虽然正确,但太繁。
改进的算法:
S1: 使t=1
S2: 使i=2
S3: 使t×i, 乘积仍然放在在变量t中,可表示为t×i→t
S4: 使i的值+1,即i+1→i
S5: 如果i≤5, 返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。
用C语言表示:
void main()
{
int i,t; t=1;
i=2;
while(i<=5)
{
t=t*i;
i=i+1;
}
printf(“%d”,t);
}
如果计算100!只需将S5:若i≤5改成i≤100即可。
如果该求1×3×5×7×9×11,算法也只需做很少的改动:
S1: 1→t
S2: 3→i
S3: t×i→t
S4: i+2→t
S5:若i≤11, 返回S3,否则,结束。
该算法不仅正确,而且是计算机较好的算法,因为计算机是高速运算的自动机器,实现循环轻而易举。
思考:若将S5写成:
S5:若i<11, 返回S3;否则,结束。结果如何?
【例1-7】有50个学生,要求将他们之中成绩在80分以上者打印出来。
如果,n表示学生学号,n i表示第个学生学号;g表示学生成绩,g i表示第个学生成绩;则算法可表示如下:
S1: 1→i
S2: 如果g i≥80,则打印n i和g i,否则不打印
S3: i+1→i S4:若i≤50, 返回S2,否则,结束。
【例1-8】求
算法可表示如下:
S1: sigh=1
S2: sum=1
S3: deno=2
S4: sigh=(-1)×sigh
S5: term= sigh×(1/deno )
S6: term=sum+term
S7: deno= deno +1
S8:若deno≤100,返回S4;否则,结束。
【例1-9】对一个大于或等于3的正整数,判断它是不是一个素数。
算法可表示如下:
S1: 输入n的值
S2: i=2
S3: n被i除,得余数r
S4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5: i+1→i
S6:如果i≤n-1,返回S3;否则打印n“是素数”;然后算法结束。
改进:
S6:如果i≤,返回S3;否则打印n“是素数”;然后算法结束。
练习:
1、【例3-2】输入一个三位数,将该数逆序输出。例如,输入123,则输出321。
2、【例3-3】输入两个整数,输出其中的大数。
3、有一个函数:
??
???>=<-=)0(1)0(0)0(1x x x y
4、【例3-7】编写程序,输入一个字符,判断其是否为大写字母,如果是大写字母则将其转换为小写字母,否则不变。
5、【例3-9】求一元二次方程a x 2+b x +c=0的根。
该一元二次方程的根有以下4种情况:
(1) 当a=0,不是二次方程。
(2) 当b 2 - 4ac=0,有两个相同的实根。
(3) 当b 2 - 4ac>0,有两个不同的实根。
(4) 当b 2 - 4ac<0,有两个共轭复根。
6、【例4-18】求s=a+aa+aaa+aaaa+aa …a 的值,其中a 是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
7、【例4-20】求Fibonacci 数列的前40个数。该数列的生成方法为: F1=1,F2=1,Fn=Fn-1+Fn-2(n ≥3),即从第3个数开始,每个数等于前2个数之和。
第4章程序设计基础 习题 一、选择题 1. A 2.D 3.C 4. A 5. B 6.D 7.A 8.B 9.C 10. B 11. D 12. A 13.B 14.D 15.C 二、简答题 1.结构化程序设计的思想是什么? 答:结构化程序设计的基本思想就是采用自顶向下、逐步求精的设计方法和单入口单出口的控制结构。 2.结构化程序设计的原则是什么? 答:结构化程序设计的原则是: (1) 使用顺序、选择、循环3种基本控制结构表示程序逻辑。 (2)程序语句组织成容易识别的语句模块,每个模块都是单入口、单出口。 (3)严格控制GOTO语句的使用。 3.结构化程序设计语言采用自顶向下的方法进行程序设计的特点是什么? 答:利用结构化程序设计语言采用自顶向下的方法进行程序设计的特点是: (1) 问题分解成子问题的结构必须与3种基本程序结构之一相对应。 (2) 问题的划分决定了程序的结构。一方面,子问题的划分决定了这一层次的程序是3种基本结构中的哪一种结构;另一方面,一个问题该如何划分成子问题是灵活的,并不是只有一种分解方法。分解的好坏就决定了设计的质量,也决定了程序的不同结构。 (3) 问题的边界应该清晰明确。只有这样才能精确地解决这些子问题,否则就会模棱两可,无从下手。 4.简述面向对象和结构化程序设计的区别。 答:面向对象是从本质上区别于传统的结构化方法的一种新方法、新思路。它吸收了结构化程序设计的全部优点,同时又考虑到现实世界与计算机之间的关系,认为现实世界是由一系列彼此相关并且能够相互通信的实体组成,这些实体就是面向对象方法中的对象,每个对象都有自己的自然属性和行为特征,而一类相似对象的共性的抽象描述,就是面向对象方法中的核心——类。 5. 从互联网上面搜索选择结构的使用方式。 答案略。 6.简述模块化方法的原理。
《Java语言程序设计(基础篇)》(第10版梁勇著) 第十一章练习题答案 11.1 public class Exercise11_01 { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter three sides: "); double side1 = input.nextDouble(); double side2 = input.nextDouble(); double side3 = input.nextDouble(); Triangle triangle = new Triangle(side1, side2, side3); System.out.print("Enter the color: "); String color = input.nextLine(); triangle.setColor(color); System.out.print("Enter a boolean value for filled: "); boolean filled = input.nextBoolean(); triangle.setFilled(filled); System.out.println("The area is " + triangle.getArea()); System.out.println("The perimeter is " + triangle.getPerimeter()); System.out.println(triangle); } } class Triangle extends GeometricObject { private double side1 = 1.0, side2 = 1.0, side3 = 1.0; /** Constructor */ public Triangle() { } /** Constructor */ public Triangle(double side1, double side2, double side3) { this.side1 = side1; this.side2 = side2; this.side3 = side3; }
第三部分程序设计基础 3.1 程序、程序设计、程序设计语言的定义 ⑴程序:计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。 ⑵程序设计:程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。 ⑶程序设计语言:程序设计语言用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言有3个方面的因素,即语法、语义和语用。 3.2 高级语言和低级语言的概念及区别 ⑴高级语言:高级语言(High-level programming language)是高度封装了的编程语言,与低级语言相对。
它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。 ⑵低级语言:低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。 ⑶区别: 高级语言:实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好低级语言:实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差 了解知识:CPU运行的是二进制指令,所有的语言编写的程序最终都要翻译成二进制代码。越低级的语言,形式上越接近机器指令,汇编语言就是与机器指令一一对应的。而越高级的语言,一条语句对应的指令数越多,其中原因就是高级语言对底层操作进行了抽象和封装,
第一章:程序设计基础知识 一、单项选择题 1、以下( )是面向过程的程序设计语言。 A)机器语言B)汇编语言C)高级语言D)第四代语言 2、程序设计一般包含以下四个步骤,其中其中首先应该完成的是( )。 A)设计数据结构和算法B)建立数学模型 C)编写程序D)调试和运行程序 3、以下常用算法中适合计算等差级数的算法是( )。 A)枚举法B)递推法C)分治法D)排序法 4、以下不属于算法基本特征的是( )。 A)有穷性B)有效性C)可靠性D)有一个或多各输出 5、以下描述中不正确的是( )。 A)程序就是软件,但软件不紧紧是程序。 B)程序是指令的集合,计算机语言是编写程序的工具。 C)计算机语言都是形式化的语言,它有一个语法规则和定义。 D)计算机语言只能编写程序而不能表示算法。 6、下面描述中,正确的是( ) A)结构化程序设计方法是面向过程程序设计的主流。 B)算法就是计算方法。 C)一个正确的程序就是指程序书写正确。 D)计算机语言就是编写程序的工具而不是表示算法的工具。 7、下面描述中,不正确的是( )。 A)递归法的关键是必须有一个递归终止的条件。
B)递归算法要求语言具有反复自我调用子程序的能力。 C)对于同一个问题,递推算法比递归算法的执行时间要长。 D)递推算法总可以转换为一个递归算法。 8、N-S图与传统流程图比较,主要优点是( )。 A)杜绝了程序的无条件转移。 B)具有顺序、选择和循环三种基本结构。 C)简单、只管。 D)有利于编写程序。 A)B)C)D) 二、填空题 1、在流程图符号中,判断框中应该填写的的是________。(判断条件) 2、结构化程序设计是__________应遵循的方法和原则。(面向过程编程) 3、结构化程序必须用__________程序设计语言来编写。(具有结构化控制语句) 4、可以被连续执行的一条条指令的集合称为计算机的________。(程序) 5、只描述程序应该“做什么”,而不必描述“怎样做”的语言被称为________。(面向对象) 6、任何简单或复杂的算法都是由_____和_____这两个要素组成。(数据结构算法) 7、算法的_______特征是指:一个算法必须在执行有限个操作步骤后终止。(有穷性) 8、在三种基本结构中,先执行后判断的结构被称为_________。(直到型循环结构) 9、在程序设计中,把解决问题确定的方法和有限的步骤称为______。(算法) 10、程序设计风格主要影响程序的________。(可读性) 11、用模块组装起来的程序被成为________结构化程序。(模块化) 12、采用自上而下,逐步求精的设计方法便于____________。(结构化和模块化) 三、应用题