主题一 利用计算机解决问题的基本过程
点击考点
了解利用计算机解决问题的基本过程
了解问题分析与算法设计之间的关系
了解算法的基本特征
能用自然语言、流程图或伪代码描述算法
了解程序设计语言产生与发展过程
考点注解
了解利用计算机解决问题的基本过程
一般来说,用计算机解决一个具体问题时,大致经过以下几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序进行测试调整直道到最终解答。寻求数学模型的实质就是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。
了解问题分析与算法设计之间的关系
任何一个问题必须弄清楚其内容、性质、规模,才能找到解决问题的方法,所以分析问题就是要确定用计算机做什么,接下来,就解决怎么做的问题,也就是算法。
算法就是解决问题的方法与步骤。有了算法才能转化成指令代码,计算机才能按照指令代码一步一步去执行,直到得到问题的解。
算法是程序设计的灵魂,算法独立于任何一种程序设计语言,一个算法可以用多种程序设计语言来实现。
一个问题,可能有多种算法 ,应该通过分析、比较、挑选一种最优的算法。一个好算法必须用到科学的方法 ,应该好好学习各学科处理问题的科学方法。
了解算法的基本特征
一个算法应该具有以下特征:
1)有穷性:一个算法必须保证它的执行步骤是有限的,即它是能终止的。
2)确定性:算法中的每一个步骤必须有确切的含义,而不应当是模糊的,模棱两可的。
3)可行性:算法的每一步原则上都能精确运行
4)有零个或多个输入:所谓输入是指算法在执行时需要从外界获得数据,其目的是为算法建立某些初始状态。如果建立初始状态所需的数据已经包含在算法中了,那就不再需要输入了。
5)有一个或多个输出:算法的目的是用来求解问题的,问题求解的结果应以一定的形式输出。
能用自然语言、流程图或伪代码描述算法
一个算法可以用多种不同的方法来描述。一般用自然语言、流程图、伪代码描述。
1)自然语言
自然语言是人们日常所用的语言,如汉语、英语、德语等。用自然语言描述算法符合我们的表达习惯,并且容易理解。缺点:书写较烦、不确定性、对复杂的问题难以表达准确、不能被计算机识别和执行。
用自然语言描述一下解决以下问题的算法:借助一个空杯将一杯橙汁和一杯可乐互换所盛放的杯子。
(1) 橙汁倒入空杯;
(2) 可乐倒入刚空出的杯子;
(3) 橙汁倒入刚倒出可乐的杯子
2)流程图
流程图是由一些图框和流程线组成的,其中图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。也称为程序框图,它是算法的一种图形化表示方法。优点:形象、直观、容易理解。
由键盘输入一个任意值作为 n,求1到 n 的累加值。
用流程图的方法描述一下求一元二次方程 ax2+bx+c=0 (其中 a≠0 )的实数解的算法。
Input 三个实数值(其中 a≠0 ) To a,b,c
d=b^2-4*a*c
If d 大于等于 0 Then
X1= ( -b-d ) /2*a
X2= ( -b+d ) /2*a
输出 X1和 X2的值
Else
输出方程无实数解
3)伪代码
伪代码是介于自然语言和计算机程序语言之间的一种算法描述。
优点:简洁、易懂、修改容易
缺点:不直观、错误不容易排查
比如:
IF 九点以前 THEN
do 私人事务;
ELSE 9点到18点 THEN
工作;
ELSE
下班;
END IF
这样不但可以达到文档的效果,同时可以节约时间. 更重要的是,使结构比较清晰,表达方式更加直观.
了解程序设计语言产生与发展过程
程序设计语言泛指一切用于书写计算机程序的语言。
计算机语言的发展经历了从机器语言、汇编语言到高级语言的历程,如图1-1所示。
1) 机器语言(Machine Language)计算机使用的是由“0”和“1”组成的二进制数,二进制编码方式是计算机语言的基础。计算机发明之初,科学家只能用二进制数编制的指令控制计算机运行。每一条计算机指令均由一组“0”、“1”数字,按一定的规则排列组成,若要计算机执行一项简单的任务,需要编写大量的这种指令。这种有规则的二进制数组成的指令集,就是机器语言(也称为指令系统)。不同系列的CPU,具有不同的机器语言,如目前个人计算机中常用AMD公司的系列CPU和Intel公司的系列CPU,具有不同的机器语言。机器语言是计算机唯一能识别并直接执行的语言,与汇编语言或高级语言相比,其执行效率高。但其可读性差,不易记忆;编写程序既难又繁,容易出错;程序调试和修改难度巨大,不容易掌握和使用。此外,因为机器语言直接依赖于中央处理器,所以用某种机器语言编写的程序只能在相应的计算机上执行,无法在其他型号的计算机上执行,也就是说,可移植性差。 2)汇编语言(Assemble Language)为了减轻使用机器语言编程的痛苦,20世纪50年代初,出现了汇编语言。汇编语言用比较容易识别、记忆的助记符替代特定的二进制串。下面是几条Intel80x86的汇编指令:ADD AX , BX ;表示将寄存器AX 和 BX 中的内容相加,结果保存在寄存器AX中。SUB AX , NUM ;表示将寄存器AX中的内容减去NUM,结果保存在寄存器AX中。MOV AX , NUM ;表示把数NUM保存在寄存器AX中。通过这种助记符,人们就能较容易地读懂程序,调试和维护也更方便了。但这些助记符号计算机无法识别,需要一个专门的程序将其翻译成机器语言,这种翻译程序被称为汇编程序。汇编语言的一条汇编指令对应一条机器指令,与机器语言性质上是一样的,只是表示方式做了改进,其可移植性与机器语言一样不好。总之,汇编语言是符号化的机器语言,执行效率仍接近于机器语言,因此,汇编语言至今仍是一种常用的软件开发工具。 3) 高级语言尽管汇编语言比机器语言方便,但汇编语言仍然具有许多不便之处,程序编写的效率远远不能满足需要。1954年,第一个高级语言—FORTRAN问世了。高级语言是一种用能表达各种意义的“词”和“数学公式”按一定的“语法规则”编写程序的语言,也称为高级程序设计语言或算法语言。半个多世纪以来,有几百种高级语言问世,影响较大、使用较普遍的有FORTRAN、A LGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C++、Visual C++、Visual Basic 、Delphi、Java等。高级语言的发展也经历了从早期语言到结构化程序设计语言、面向对象程序设计语言的过程。高级语言与自然语言和数学表达式相当接近,不依赖于计算机型号,通用性较好。高级语言的使用,大大提高了程序编写的效率和程序的可读性。与汇编语言一样,计算机无法直接识别和执行高级语言,必须翻译成等价的机器语言程序(称为目标程序)才能执行,如图1-2所示。高级语言源程序翻译成机器语言程序的方法有“解释”和“编译”两种。解释方法采用边解释边执行的方法,如早期的BASIC 语言即采用解释方法,在执行BASIC 源程序时,解释一条BASIC语句,执行一条语句。编译方法采用相应语言的编译程序,先把源程序编译成指定机型的机器语言目标程序,然后再把目标程序和各种标准库函数连接装配成完整的目标程序,在相应的机型上执行。如C、C++、Visual C++及Visual Basic等均采用编译的方法。编译方法比解释方法更具有效率。
同步集训
一、选择题
1、人们利用计算机解决问题的基本过程一般有如下五个步骤(①~⑤),请按各步骤的先后顺序在下列选项(A~D)中选择正确的答案(??? )
①调试运行程序 ②分析问题 ③设计算法 ④问题解决 ⑤编写程序
A、①②③④⑤ B、②④③⑤①C、④②③⑤① D、②③⑤①④
2、在下图中利用计算机解决问题的基本步骤流程图中,对于标注为(1)的流程线,以下说明正确的是( )
该流程线可有可无
B.当程序运行不出结果时,才需要该部分流程线
C.该部分流程线保证了问题解决的正确性D.该部分流程线有错
3、下列三种算法的描述,缺乏直观性、简洁性,最容易产生歧义的是( )
A、自然语言描述法 B、流程图
C、伪代码
4、流程图中表示判断的是( ??? )
A、矩形框 B、菱形框?
C、圆形框 D、椭圆形框
5、“分支判断”作为解决问题的算法的一个基本步骤,正是体现了计算机的( )能力。
A、算术运算能力 B、逻辑运算能力
C、分布式运算能力 D、记忆存储能力
6、下面关于算法的描述,正确的是( )
A、算法不可以用自然语言描述
B、算法只能用框图来描述
C、一个算法必须保证它的执行步骤是有限的
D、算法的框图表示法有0个或多个输入,但只能有一个输出
7、下面关于算法的描述,正确的是( )
A、一个问题只有一个算法
B、一个问题可能有多种算法
C、能解决问题的算法都是好算法,没优劣之分
D、算法不是程序设计所必需的
8、下列关于算法的叙述,正确的是( )
A、解决一个问题的算法只有一种
B、有穷性是算法的基本特征之一
C、可行性不属于算法基本特征
D、算法对程序设计没有任何作用
9、下列关于算法的叙述,正确的是( )
A、解决一个问题的算法只有一种
B、算法必定有一个或一个以上的输出
C、算法中可以存在不确切的步骤
D、描述算法的步骤可以是无穷的
10、从以下计算S的算法可以看出,S的代数式表示是( )
①变量S的初值是0;
②变量I从1起循环到N;
③循环表达式为S=S+(-1)*i;
④输出变量S的值
A.1-2+3-4+…+(-1)N*(N-1)
B.1-2+3-4+…+(-1)N-1*n
C.1+2+3+4+…+(n-1)+n
D.-1-2-3-4-…-(n-1)-n
11、下列选项都是属于高级语言的是( )
A、汇编语言 机器语言
B、Basic语言 Pascal语言
C、汇编语言 Basic语言
D、机器语言 Pascal语言
12、下列选项都是属于低级语言的是( )
A、汇编语言 机器语言
B、Basic语言 Pascal语言
C、汇编语言 Basic语言
D、机器语言 Pascal语言
13、________是计算机能直接识别,理解执行的语言。
A、汇编语言 B、Pascal语言
C、Basic语言 D、机器语言
14、下列关于程序设计言中机器语言的说法,正确的是( )
A、Visual Basic属于机器语言的一种
B、机器语言就是Visual Basic
C、机器语言比高级语言更早出现
D、高级语言比机器语言更早出现
15、下列选项中,最先出现的程序设计语言是( )
A、汇编语言 B、高级语言
C、Visual Basic D、机器语言
16、不能被计算机直接识别,理解执行的语言需要转换,这种转换是( )
A、人工转换或机器转换
B、计算机语言提供的解释器或编译器负责转换
C、操作系统负责转换
D、人工智能技术中的自然语言理解
二、简答题
1、简述什么是计算机程序、程序设计、程序设计语言、算法
2、简述算法的特征。
3、简述程序设计语言的发展历程
4、高级语言编制的源程序计算机无法直接识别,必须经过转换才能被计算机执行。请问有哪些转换方式,这些方式有什么区别?
三、阅读流程图,写出其处理的任务问题
1、
该流程图处理的任务是:
备注:x mod y 是x除y的余数,如10 mod 4 余数是2
2、该流程图处理的任务是:
四、用流程图表示如下问题的算法,由键盘输入两个整数 a 、 b,输出其中较大的数。
主题一 利用计算机解决问题的基本过程
同步集训答案
一选择题:
1、D 2、C 3、A4、B5、B6、C7、B8、B9、B10、D11、B
12、A13、D14、C15、D16、B
简答题
1、计算机程序就是指计算机如何去解决问题或完成任务的一组机器操作的指令或语句的序列,是算法的一种描述,简称程序。
程序设计就是寻求解决问题的方法,并将其实现步骤编写成计算机可以执行的程序的过程。
程序设计语言泛指一切用于书写计算机程序的语言。
算法就是解决问题的方法和步骤。
2、一个算法应该具有以下特征:
1)有穷性:一个算法必须保证它的执行步骤是有限的,即它是能终止的。
2)确定性:算法中的每一个步骤必须有确切的含义,而不应当是模糊的,模棱两可的。
3)可行性:算法的每一步原则上都能精确运行
4)有零个或多个输入:所谓输入是指算法在执行时需要从外界获得数据,其目的是为算法建立某些初始状态。如果建立初始状态所需的数据已经包含在算法中了,那就不再需要输入了。
5)有一个或多个输出:算法的目的是用来求解问题的,问题求解的结果应以一定的形式输出。
3、计算机语言的发展经历了从机器语言、汇编语言到高级语言的历程
4、高级语言源程序翻译成机器语言程序的方法有“解释”和“编译”两种。解释方法采用边解释边执行的方法,如早期的BASIC 语言即采用解释方法,在执行BASIC 源程序时,解释一条BASIC语句,执行一条语句。编译方法采用相应语言的编译程序,先把源程序编译成指定机型的机器语言目标程序,然后再把目标程序和各种标准库函数连接装配成完整的目标程序,在相应的机型上执行。如C、C++、Visual C++及Visual Basic等均采用编译的方法。编译方法比解释方法更具有效率。三、阅读流程图,写出其处理的任务问题
该流程图处理的任务是:输入两个数a和b,求出它们的最大公约数并输出。
2、该流程图处理的任务是:输入一个数n,计算并输出1到n的和
四、用流程图表示如下问题的算法
主题二 程序设计基础
点击考点
能够使用可视化程序开发工具设计简单的用户界面。
知道常用的数据类型、变量、常量的含义;学会定义常量、变量的数据类型。
知道程序中运算符、函数、表达式的表示方式,能够转换数学表达式为程序接受的表达式。
学会使用顺序结构设计程序的基本方法。
学会使用选择结构设计程序的基本方法。
学会使用循环结构设计程序的基本方法。
了解程序的编辑与翻译过程方法,比较编译型语言与解释型语言的优势与不足。
考点注解
能够使用可视化程序开发工具设计简单的用户界面。
Visual Basic是可视化程序设计语言。可视化程序让程序设计人员利用软件提供的各种控件,像搭积木式地构造应用程序的各种界面。VB的集成开发环境如下:
面向对象的程序设计以对象为中心,以事件为过程执行起点。
在可视化程序开发环境中,文本框、标签、命令按钮等控件都叫对象。
对象的特征称为对象的属性。
在对象上发生的事情称为事件,常用的有单击(click),双击(dblclick),加载(load),按键(keypress)等
对象能够执行的操作叫方法。如form1.cls的作用是清除窗体form1中的内容。
知道常用的数据类型、变量、常量的含义;学会定义常量、变量的数据类型。
数据是程序处理的对象,不同类型的数据有不同的处理方法。数据可以依照类型进行分类。数据类型用于确定一个变量所具有的值在计算机内的存储方式,以及对变量可以进行何种操作。 VB 语言的数据类型比较丰富,此外还可以通过数据类型定义语句在基本数据类型的基础上定义新的数据类型(自定义数据类型)。
VB数据类型
常量
在程序执行过程中,其值不能改变的量称为常量。常量可以直接用一个数来表示,称为常数(或称为直接常量),也可以用一个符号来表示,称为符号常量。1)直接常量(常数)各种数据类型都有其常量表示,如表所示。
2)符号常量
常量在程序中也可用符号表示。符号常量的定义格式如下:[访问权限] Const <常量名> [As 数据类型]=<数值>如: Const PI As Single =3.1416表示定义 PI为符号常量,代表单精度型数值3.1416。
变量
在程序执行过程中,其值可以改变的量称为变量。1)变量的命名规则( 1)变量名首字符必须是字母;( 2)变量名只能由字母、数字和下划线组成;( 3)变量名不能使用VB中的关键字(保留字);( 4)变量名在同一个作用域内必须唯一;( 5)变量名长度不超过255;( 6)变量的命名最好还应遵守一定的编程约定。
2)变量的作用域变量的作用域是指变量的有效范围,根据变量说明方式的不同,变量有三个作用域,见表
3)变量定义语句
( 1)定义模块或过程局部变量Dim <变量名> As <类型> [, <变量名> As <类型>]…
( 2)定义全局变量Public <变量名> As <类型> [, <变量名> As <类型>]…
知道程序中运算符、函数、表达式的表示方式,能够转换数学表达式为程序接受的表达式。
运算符 是在代码中对各种数据进行运算的符号。例如,有进行加、减、乘、除算术运算的运算符,有进行与、或、非、异或逻辑运算的运算符。
表达式 是由运算符和运算对象及圆括号组成的一个序列,它是由常量、变量、函数等用运算符连接而成的式子。表达式是构成程序代码的最基本要素。
1)赋值运算符赋值语句的语法格式为:<变量名> = <表达式> 例如:Count=5。
2)算术运算符与算术表达式( 1)算术运算符VB中算术运算符有+(加)、-(减)、*(乘)、/(除)、(整除)、mod(模运算,求余数)和^(幂)。
( 2)算术运算符及优先级:^(乘方)→*、/→(整除)→mod(取余)→+、-
( 3)算术表达式:用算术运算符和括号将运算对象连接起来的式子称为算术表达式。运算运算对象可以是常量、变量或函数等。例如:Dim a As Integer,x As Singlea=5x = a ^ 2 * a - 1.5 + a 2 + a Mod 2运算结果为 X=5^ 2*5-1.5+52+5 mod 2 =125-1.5+2+1=126.5
3)字符串运算符VB中的字符串运算符主要用来将两个字符串连接成一个字符串。VB提供了两个字符串运算符:“&”和“+”。如: "中国" & "江苏" "中国" +"江苏"结果均为 "中国江苏"
4)关系运算符与关系表达式( 1)关系运算符VB的关系运算符用于对两个数据进行比较,其运算结果为逻辑值True或False。关系运算符有: =、<>、<、>、>=、<=、IS(用于比较两个对象的引用变量)。
( 2)关系表达式:由常量、变量、函数等用关系运算符连接而成的式子称为关系表达式。例如:Dim a As Integer,b As Integer, x As Booleana=3b=5x=a5)逻辑运算符与逻辑表达式
( 1)逻辑运算符VB中常用的逻辑运算符有Not、And、Or 和Xor,也称为布尔运算符。逻辑运算符的运算对象应是逻辑值或关系表达式,运算结果为逻辑值。如表所示
逻辑运算符的优先级为: Not(非) →And(与) →Or(或) →Xor(异或)
( 2)逻辑表达式
用逻辑运算符将运算对象连接起来的式子,称为逻辑表达式。例如:5>3 And 3>1Not x Or (b>c)逻辑表达式的值是一个逻辑值,用 True或False来表示。例如,逻辑表达式5>3 And 3>1,其结果为True。
6)运算规则
运算符优先级运算符的优先级:算术运算符 →字符运算符→关系运算符→逻辑运算符→赋值运算符。 算术函数
字符函数
转换函数
日期与时间函数
学会使用顺序结构设计程序的基本方法。
按照语句代码出现的先后顺序依次执行的程序结构称为顺序结构,如图所示
学会使用选择结构设计程序的基本方法。
在一种以上可能的操作中按条件选取一个执行的结构称为分支结构。( 1)两路分支:在两种可能的操作中按条件选取一个执行的结构称为两路分支结构,也称双分支结构。左图为双分支结构流程图。( 2)多路分支:在多种可能的操作中按条件选取一个执行的结构称为多分支结构。右图为多分支结构流程图,执行时从B1至Bn依次判断每个条件是否成立,成立时,就执行相应的操作,如果所有条件都不成立,就执行Sn+1操作。
VB中用于实现分支结构程序设计的语句有两种,即If与Select语句。1、 If 语句VB中有三种形式的If语句,分别是单分支、双分支和多分支If语句。1)单分支If语句单分支If语句的使用格式通常是:If <条件> Then<语句>End If
2)双选条件语句If <条件> Then<语句1>Else<语句2>End If执行过程:当表达式的值为真时,执行语句 1,否则执行语句2。
3)多选条件语句If <条件> Then<语句1>ElseIf <条件2> Then<语句2>.…… ElseIf <条件n-1> Then<语句n-1>Else<语句n>End If
2、 Select Case 语句
当程序中分支较多,尤其需要多重嵌套的时候,使用 If分支语句比较冗长,而且结构也不清晰,为此VB提供了一种更加简洁的分支语句Select Case。该语句对一个结果的多种情况进行判断,语法格式如下:Select Case <条件表达式>Case <表达式1><语句1>Case <表达式2><语句2>…… Case <表达式n-1><语句n-1>Case Else<语句n>End Select
学会使用循环结构设计程序的基本方法。
按条件重复执行一种操作的结构称为循环结构。循环结构有两种形式,即当型循环结构和直到型循环结构。( 1)当型循环结构:先进行判断,然后根据判断结果(真或假)再决定是否执行循环体的循环结构称为当型循环结构,如左图所示。( 2)直到型循环结构:先执行一次循环体,然后再根据判断结果(真或假)决定是否继续执行循环体的循环结构称为直到型循环结构,如下图所示。
从上述两种循环结构的流程图可以看出,对于当型循环结构,程序有可能一次也不执行循环体;对于直到型循环结构,程序至少要执行一次循环体。
循环语句实现循环结构。 VB中循环语句有两种:Do…Loop语句和For…Next语句。Do…Loop语句是条件型循环,当循环的执行是由条件控制,在循环的次数不确定时通常选用该语句;For语句是计数循环,在循环次数已知时选用该语句。
1、 Do…Loop 语句(1)当型循环语句① Do While…Loop语句语句格式为:Do While <条件表达式>语句LoopDo While … Loop语句的执行过程是,先计算条件表达式的值,当其值为True 时,执行循环体中的语句序列,然后再重新计算条件表达式的值,当条件表达式的值为False时,循环终止,执行Loop语句后的语句。
② Do Until…Loop 语句
语句格式为:
Do Until <条件>语句LoopDo Until … Loop 语句的执行过程是,先计算条件表达式的值,当其值为False时,执行循环体中的语句序列,然后再重新计算条件表达式的值,直到条件表达式的值为True时,循环终止,执行Do Until … Loop 语句的下一条语句。
( 2)直到型循环语句
① Do …Loop While语句语句格式为:Do语句Loop While<条件>Do … Loop While语句的执行过程是:先执行循环语句,再判断条件表达式的值,当条件条件表达式的值为True时继续执行循环体,当条件表达式的值为False结束循环,转而执行Loop While后面的语句。
② Do… Loop Until语句语句格式为:Do语句Loop Until<条件>Do … Loop Until语句的执行过程是:先执行循环语句,再判断条件表达式的值,当条件条件表达式的值为False时继续执行循环体,直到条件为True结束循环转而执行Loop Until后面的语句。
2、 For…Next 语句在循环次数已知的情况下,采用 For…Next语句实现循环结构是比较合适的选择。For…Next语句的格式如下:For <循环变量>=初值 To 终值 [Step 步长]<语句>[Exit For ]<语句>Next <循环变量>
了解程序的编辑与翻译过程方法,比较编译型语言与解释型语言的优势与不足。
高级语言与自然语言和数学表达式相当接近,不依赖于计算机型号,通用性较好。高级语言的使用,大大提高了程序编写的效率和程序的可读性。与汇编语言一样,计算机无法直接识别和执行高级语言,必须翻译成等价的机器语言程序(称为目标程序)才能执行,高级语言源程序翻译成机器语言程序的方法有“解释”和“编译”两种。解释方法采用边解释边执行的方法,如早期的BASIC 语言即采用解释方法,在执行BASIC 源程序时,解释一条BASIC语句,执行一条语句。编译方法采用相应语言的编译程序,先把源程序编译成指定机型的机器语言目标程序,然后再把目标程序和各种标准库函数连接装配成完整的目标程序,在相应的机型上执行。如C、C++、Visual C++及Visual Basic等均采用编译的方法。编译方法比解释方法更具有效率。
同步集训
一、单项选择题
1.以下窗口可以在设计时直观的调整窗口在屏幕上的位置 ( )
A.代码窗口 B.窗体布局窗口
C.窗体设计窗口 D.属性窗口
2.在VisualBasic中,所有的窗体和控件都必定具有一个属性是 ( )
A.N?ame B.Font
C.Caption D.Fillcolor
3.Visual Basic窗体设计器的主要功能是: ( )
A.建立用户界面 B.编写源程序代码
C.画图 D.显示文字
4.Visual Basic中窗体文件的扩展名是 ( )
A.VBP B.FRM
C.VBW D.PDM
5.当一个工程含有多个窗体时,其中的启动窗体是( )
A.启动Visual Basic时建立的窗体
B.第一个添加的窗体
C.最后一个添加的窗体
D.在“工程属性”对话框中指定的窗体
6.在窗体上画一个名称为Label1的标签。当单击标签时,在标签中显示“我喜欢学习VB语言”。下列能实现上述功能的程序是 ( )
A.Private Sub Label1_Click()
Label1.Caption = "我喜欢学习VB语言"
End Sub
B.Private Sub Form1_Click()
Label1.Caption = "我喜欢学习VB语言"
End Sub
C. Private Sub Label1_Click()
Label1.Enabled = "我喜欢学习VB语言"
End Sub
D. Private Sub Label1_Click()
Label1.Visible = "我喜欢学习VB语言"
End Sub
7.Visual Basic中工程文件的扩展名是 ( )
A.VBP B.FRM
C.VBW D.PDM
8.下面的四个VB逻辑表达式语法中,正确的是()
A.x>y.And.x<>y B.x>y~z
C.x>y And <>z D.x>y And y<>z
9.表达式”123”+”A”&100的值是()
A.123100 B.123A100
C.”123A100” D.1230100
10.代数式ab2÷(5c+d)的VB表达式是()
A.a * b ^ b / (5 c + d) B.a×b×b / (5 × c + d)
C.a * b * b / 5 * c + d D.a * b * b / (5 * c + d)
11.按变量名的命名规则,下面字符中不能用于构成变量名的是()
A.字母 B.数字
C.下划线 D.空格
12.在程序中用到某一整型变量的数据范围为-32768~40000,则该变量类型应声明为()
A.Integer B. Byte
C.Long D. Double
13.设a=2,b=3,c=4,d=5,表达式3>2*b OR a=c AND b<>c OR c>d的值是 ( )A.1 B.-1 C.False D.True
14.实现数值转换字符串的函数是 ( )
A.STR() B.CHR()
C.VAL() D.ASC()
15.实现字符串转换数值的函数是 ( )
A.STR() B.CHR()
C.VAL() D.ASC()
二、填空题
1.在窗体上画一个标签按钮(名称为Label1),编写如下事件过程:
Private Sub Label1_Click()
Dim a, b, c As Integer
b = 5
c = 6
Print a = b + c
End Sub
程序运行后,单击标签,输出的结果是:______________。
2.VB应用程序中窗体文件的扩展名是____________。
3.VB是一种面向对象的程序设计语言,构成对象的三要素是___________、__________、___________。
4.下列程序段执行后,
a=5
b=9
c=14
a=a+b
c=c-b
则a=_______、b=_________、c=__________。
5.若X=-1,则Abs(X)=_________。
6.表达式8 <> 5 + 3 Or Not 10 > 12 – 3的值是_________。
7.表达式9 ^ 2 Mod 6 ^ 3 3 ^ 2的值为__________。
8.若s=”I am John”,则LEN(s)的值为_________。
9.ABS(-2)+SQR(16)=__________。
10.补充完善下列程序段
① 从键盘输入圆的半径R,输出圆的周长L和面积S。
Dim R As Single
Dim L As Single
Dim S As Single
_____=InputBox("输入半径R ")??????
L=2*3.14*R
S=3.14*R*R
Print "圆的周长L= ";L
Print "圆的面积S= ";S
② 计算旅客的行李费,收费标准为:20千克以下(包括20千克)不收费,超过20千克的部分每千克收20元。X表示行李重量,Y表示行李费。
??? Dim X As Single
??? Dim Y As Single
??????? X=InputBox("输入行李重量")
??????? If ________? Then
?????????? Y=0
??????? Else
?????????? Y=20*(X-20)
??????? End If
??? Print "行李费= ";Y
③ 求s=2+4+6+……+100之和。
Dim i As Integer
Dim s As Integer
s=0
For i=2 To 100 Step 2
?? s=_________
Next i
Print s
④ 输出100以内(包含100)能被3整除的数。
Dim I As Integer
I=1
Do
? If? I? Mod 3=0 Then
Print I
? End If
I=I+1
Loop Until _________
⑤. 有一张单据上有一个5位数的号码67□□8,其中百位和十位上的数字看不清了,但知道该数能够被78整除,也能被67整除,下面是用穷举法求出该号码的程序段:
Dim a As Integer, b As Integer
Dim n As Long
For a = 0 To 9
? For b = 0 To ①?
??? n = 67008 + ②? * 100 + b * 10
?If?n?Mod 78 = 0 ③n? Mod67=0? Then
?????? Print?? ④
??? End If
? Next b
Next a
请将应填写的内容写在下面相应的空格内并运行程序写出该号码(每空3分,共12分)。
①_____________
②_____________
③_____________
④ _____________
主题二 程序设计基础
同步集训答案
一选择题:
1、B 2、A 3、A4、B5、D6、A7、A8、D9、B10、C11、D
12、C13、C14、A15、C16、B
二、填空题
1、11
frm
属性、事件、方法
a=14 b=9 c=5
x=1
False
9
9
6
1)r 2)x<=20 3)s+i 4)i=100 5)9 a and n
主题三 算法与程序实现
点击考点
理解解析法的基本思想。
了解枚(穷)举算法求解问题的过程
了解使用数组存储批量数据的基本方法
理解顺序查找、二分查找算法思想
了解一到两种经典排序算法思想(如插入排序、冒泡排序)。
了解递归思想与递归的数学意义。
考点注解
理解解析法的基本思想。
所谓解析法(analysis algorithm)是指用解析的方法找出表示问题的前提条件与结果之间关系的数学表达式,并通过表达式的计算来实现问题求解。
解析法举例:
【出租车计费】 某城市的出租车计费标准为起步价10元(3公里内),此外,在3公里到10公里之间每公里2.1元,超过10公里部分每公里3元,输入行车距离x,输出车费y。
编写数学表达式:设车程数为X公里,车费为Y元,则
Y= 10 (x<=3)
10+2.1*(x-3) (3 10+2.1*7+3*(x-10) (x>10)
VB代码:
Privat sub command1_click()
Dim x,y as single
X=val(inputbox("请输入行车距离"))
If x<=3 then
Y=10
Elseif x>3 and x<=10 then
Y=10+2.1*(x-3)
Else
Y=10+2.1*7+3*(x-10)
Endif
Print y
End sub
小结:用解析法解决问题的关键就是找到求解问题的解析表达式。
了解枚(穷)举算法求解问题的过程
穷举法也叫枚举法或列举法。在研究对象是由有限个元素构成的集合时,把所有对象一一列举出来,再对其一一进行研究。带入实际,一个个检验是否符合,穷举完所有对象问题将最终得以解决。这种方法一般在计算机中运用,因为计算机计算速度快,可以很快验证答案是否正确。
穷举法举例:
百钱买百鸡问题。用100元钱买100只鸡,公鸡每只5元,母鸡每只3元,小鸡3只1元,要求每种都买,问能买公鸡、母鸡、小鸡各买几只?
算法分析:
设x为公鸡数量,取值从1只到20只,y为母鸡的数量,取值从1只到33只,z为小鸡的数量,判断5元*x+3元*y+z/3是否等于100元,输出每次符合条件的x,y,z即为所求。
VB代码:
Privat sub command1_click()
Dim x,y ,z as integer
For x=1 to 20 step 1
For y=1 to 33 step 1
z=100-x-y
If 5*x+3*y+z/3=100 then
Print x,y,z
Next y
Next x
End sub
小结:
穷举法的思路与解题步骤
穷举法的基本思路:
把问题涉及的可能情况一一罗列出来,并且根据题目的条件和实际背景逐个作出判断,从中挑选出符合条件的解答。
穷举法的解题步骤:
1)、分析问题,找出条件与未知数,确定变量;
2)、列举出变量所有可能的情况,用循环或循环的嵌套实现;
3)、写出符合条件的判断语句,用选择语句实现;
4)、输出符合条件的情况;
5)、优化程序。
了解使用数组存储批量数据的基本方法。
数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
在VB中定义数组的格式为:
Dim 数组名(常量)as 数据类型
下面举例说明定长数组的定义:①Dim a(1 to 3)As Integer②Dim b(5 to 9)As String③Dim c(7)As Integer其中,例①定义了一个具有三个元素的整型数组,其下标从1到3。例②定义了一个具有五个元素的字符型数组,其下标从5到9。例③缺省了下界,它定义了一个具有八个元素的整型数组,其下标从0到7。
数组的赋值一般是通过循环来完成的。例如
For i=0 to 50 step 1
Chinese(i)=100
Next i
数组元素是组成数组的基本单元。数组元素也是一种变量, 其标识方法为数组名后跟一个下标。 下标表示了元素在数组中的顺序号。数组中的数据在逻辑上应该是相互关联的。
理解顺序查找、二分查找算法思想
【顺序查找】 所谓顺序查找就是从数组的第一个数开始,逐个与要查找的数进行比较,如果相同则输出找到的信息。
以下程序是随机生成num个整数放在数组d中,然后输入一个数,在数组d中顺序查找,如果找到就输出在数组中的位置,否则输出在数组中没有找到的信息。Dim d(1 To 1000) As Integer
Dim num As Integer
Private Sub Command1_Click() '生成随机数按钮
num = Val(Text1.Text)
If num <= 0 Or num >= 1000 Then
Text1.Text = "数据个数不符合"
Exit Sub
End If
Randomize '初始化随机函数
List1.Clear
For i = 1 To num
j = Round(Rnd * 1000) 'rnd函数生成一个[0,1)之间的随机数
List1.AddItem Str(i) + " " + Str(j)
d(i) = j
Next
End Sub
Private Sub Command3_Click()
Key = Val(Text2.Text)
j = 1
Do While j <= num
If d(j) = Key Then
Label5.Caption = "在数组的 " + Str(j) + " 位置中"
Exit Do
End If
j = j+1
Loop
If j = num + 1 Then
Label5.Caption = "在数组中没有找到" + Str(Key)
End If
End Sub
【二分查找】又称折半查找,它是一种效率较高的查找方法。
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
以下程序是在上面的command1_click中随机生成num个整数放在数组d中,然后使用冒泡排序方法将数组d中的数从小到大排好序,然后输入一个数,在数组d中二分查找,如果找到就输出在数组中的位置,否则输出在数组中没有找到的信息。Dim d(1 To 1000) As Integer
Dim num As Integer
Private Sub Command1_Click() '生成随机数按钮
num = Val(Text1.Text)
If num <= 0 Or num >= 1000 Then
Text1.Text = "数据个数不符合"
Exit Sub
End If
Randomize '初始化随机函数
List1.Clear
For i = 1 To num
j = Round(Rnd * 1000) 'rnd函数生成一个[0,1)之间的随机数
List1.AddItem Str(i) + " " + Str(j)
d(i) = j
Next
End Sub
Private Sub Command2_Click() '冒泡排序按钮
List2.Clear
For i = 1 To num - 1 '冒泡排序 递增
For j =1 To num-i Step 1
If d(j) >d(j + 1) Then ' 如果下个数据小,则于上一个数据交换
temp = d(j)
d(j) = d(j +1)
d(j +1) = temp
End If
Next j
Next i
For i = 1 To num '在列表2中显示排序后的数据
List2.AddItem Str(i) + " " + Str(d(i))
Next i
End Sub
Private Sub Command4_Click()
Key = Val(Text2.Text)
i = 1
j = num
Do While i <= j
M = (j + i) 2
If d(M) = Key Then
Label6.Caption = "在数组的 " + Str(M) + " 位置中"
Exit Sub
End If
If d(M) < Key Then
i = M + 1
Else
j = M - 1
End If
Loop
Label6.Caption = "在数组中没有找到" + Str(Key)
End Sub
了解一到两种经典排序算法思想(如冒泡排序、插入排序)。
通过二分查找算法的使用,我们发现经常要把无序的数据经过排序操作变成有序的数据,然后才能使用。计算机中有各种各样的排序方法,如冒泡排序、选择排序、快速排序等。
【冒泡排序】(BubbleSort)的基本概念是:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
例如有一组关键字{14,15,30,28,5,10},
第一趟:14和15比不交换
15和30比不交换
30和28比交换
30和5比交换
30和10比交换
第一趟冒泡结果:14,15,28,5,10,30
经过第一趟冒泡最大的数30到了最后一个位置,其它的数都上升了一个位置,好像轻的泡泡升上去了一样
第二趟:14和15比不交换
15和28比不交换
28和5比交换
28和10比交换
第二趟冒泡结果:14,15,5,10,28,30
经过第二趟冒泡第二大的数28到了最后第二个位置,其它的数都上升了一个位置,好像轻的泡泡升上去了一样
第三趟:14和15比不交换
15和5比交换
15和10比交换
第三趟冒泡结果:14,5,10,15,28,30
经过第三趟冒泡第三大的数15到了最后第三个位置,其它的数都上升了一个位置,好像轻的泡泡升上去了一样
第四趟:14和5比交换
14和10比交换
第四趟冒泡结果:5,10,14,15,28,30
经过第四趟冒泡第四大的数14到了最后第四个位置,其它的数都上升了一个位置,好像轻的泡泡升上去了一样
第五趟:5和10比不交换
第五趟冒泡结果:5,10,14,15,28,30
6个数经过5趟比较就全部排好序了。
以下程序是在上面的command1_click中随机生成num个整数放在数组d中,然后使用冒泡排序方法将数组d中的数从小到大排好序
Dim d(1 To 1000) As Integer
Dim num As Integer
Private Sub Command1_Click() '生成随机数按钮
num = Val(Text1.Text)
If num <= 0 Or num >= 1000 Then
Text1.Text = "数据个数不符合"
Exit Sub
End If
Randomize '初始化随机函数
List1.Clear
For i = 1 To num
j = Round(Rnd * 1000) 'rnd函数生成一个[0,1)之间的随机数
List1.AddItem Str(i) + " " + Str(j)
d(i) = j
Next
End Sub
Private Sub Command2_Click() '冒泡排序按钮
List2.Clear
For i = 1 To num - 1 '冒泡排序 递增
For j =1 To num-i Step 1
If d(j) >d(j + 1) Then ' 如果下个数据小,则于上一个数据交换
temp = d(j)
d(j) = d(j +1)
d(j +1) = temp
End If
Next j
Next i
For i = 1 To num '在列表2中显示排序后的数据
List2.AddItem Str(i) + " " + Str(d(i))
Next i
End Sub
【选择排序】(BubbleSort)的基本概念是:
(1)从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;
(2)除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;
(3)以此类推,最后构成递增序列。
选择排序算法步骤:
1、从原始数列{a1,a2,a3,…,an}开始进行排序,比较n-1次,从中选出最小关键字,放在有序数列中形成{a1}、{a2,a3,…,an}有序数列和无序数列两部分,完成第1趟排序。
2、处理第i趟排序时(i=2,3,…,n),从剩下的n-i+1个元素中找出最小关键字,放在有序数列的后面
3.重复第二步,共进行n-1趟的选择处理,数列全部有序。
选择排序举例:
设有数列{ 18,12,10,12,30,16 }
初始状态:{},{18,12,10,12,30,16} 比较次数
i=1 {10},{18,12,12,30,16} ??????????5
i=2 {10,12},{12,18,30,16}????????? ? 4
i=3 {10,12,12},{18,30,16} ?????????? 3
i=4 {10,12,12,16},{18,30} ????????? 2
i=5 {10,12,12,16,18},{30} ??????? 1
总计: 15 次比较次数,5次交换次数
以下代码是用选择法为随机产生的10个数字排序:
Private Sub Command1_Click()
Dim a(1 To 10) As Integer
Randomize ‘随机产生10个整数
For i = 1 To 10
a(i) = Int(Rnd * 10)
Print a(i),
Next i
Print
For i = 1 To 9 ‘10个数选择9趟
k = i
For j = i + 1 To 10
If a(k) > a(j) Then
k = j ‘将选择出来的小树的坐标放入k中
End If
Next j
t = a(i): a(i) = a(k): a(k) = t ‘将选择出来
Next i 的小树a(k)与a(i)交换
For i = 1 To 10 Step 1 ‘输出10个从小到
Print a(i), 大排好序的数
Next i
End Sub
【选择法排序】总结:
选择法排序每一次选取一个最小值,在每次比较时先不进行交换,一趟比较完成后再和假想的极值交换,提高了排序效率。
【冒泡排序】和【选择法排序】的区别:
冒泡和快速排序的区别在于:冒泡算法,每次比较如果发现较小的元素在后面,就交换两个相邻的元素。将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个"气泡"序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即"轻"的元素在下面,就交换它们的位置。显然,处理一遍之后,"最轻"的元素就浮到了最高位置;处理二遍之后,"次轻"的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是"最轻"元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。而选择排序算法的改进在于:先并不急于调换位置,先从A[1]开始逐个检查,看哪个数最小就记下该数所在的位置P,等一躺扫描完毕,再把A[P]和A[1]对调,这时A[1]到A[10]中最小的数据就换到了最前面的位置。
所以,选择排序每扫描一遍数组,只需要一次真正的交换,而冒泡可能需要很多次。比较的次数是一样的。
了解递归思想与递归的数学意义。
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
递归过程一般通过函数或子过程来实现。 递归算法:在函数或子过程的内部,直接或者间接地调用自己的算法。
递归算法的特点
递归算法是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归算法解决问题的特点:
递归就是在过程或函数里调用自身。
在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
递归算法要求
递归算法所体现的“重复”一般有三个要求:
一是每次调用在规模上都有所缩小(通常是减半);
二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。如何设计递归算法
确定递归公式
确定边界(终了)条件
用递归解决问题:
年龄问题:有5个人,第5个人的年龄比第4个的年龄大2岁,第4个人的年龄比第3个的年龄大2岁,第3个人的年龄比第2个的年龄大2岁,第2个人的年龄比第1个的年龄大2岁,第1个的年龄10岁。问第5个人年龄多大?
算法分析:
要想知道第5个人的年龄就必须知道第4个人的年龄,要想知道第4个人的年龄就必须知道第3个人的年龄,要想知道第3个人的年龄就必须知道第2个人的年龄,要想知道第2个人的年龄就必须知道第1个人的年龄,
第1个人年龄是10岁,所以第2个人年龄就是10+2=12岁,第2个人年龄是12岁,所以第3个人年龄就是12+2=14岁,第3个人年龄是14岁,所以第4个人年龄就是14+2=16岁,第4个人年龄是16岁,所以第5个人年龄就是16+2=18岁。
设计算法:
设n为第几个人,显然当n=1时,问题的解为10,而当n〉1时,问题的解可以转化为:2+f(n-1)
编写程序:
定义一个递归函数f(n)
Function f(n as integer) as integer
Dim f as integer
If n=1 then
f=10
Else
f=2+f(n-1)
Endif
End fun_ction
调用递归函数f(n)
Privat sub command1_click()
Dim f, n as integer
n=inputbox()
f=f(n)
print f
Endsub
【递归算法总结】:
能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。例如上例中,求解f(n),把它推到求解f(n-1)。也就是说,为计算f(n),必须先计算f(n-1),而计算f(n-1),又必须先计算f(n-3)。依次类推,直至计算f(1),能立即得到结果10。在递推阶段,必须要有终止递归的情况。例如在函数f中,当n为1的情况。在回归阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解,例如得到f(1)后,返回得到f(2)的结果,……,在得到了f(n-1)的结果后,返回得到f(n)的结果。在编写递归函数时要注意,函数中的局部变量和参数知识局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列“简单问题”层,它们各有自己的参数和局部变量。由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。
同步集训
单选题
使用枚举法解决问题,在列举问题可能解的过程中,____。A.不能遗漏,但可以重复B.不能遗漏,也不应重复C.可以遗漏,但不应重复D.可以遗漏,也可以重复
鸡、兔共笼问题,有腿共60条,问鸡、兔各有多少只?下面鸡和兔只数最合理的范围是____。(范围确定了循环的起始值和终止值)A.鸡:1到28,兔:1到14B.鸡:2到28,兔:1到14C.鸡:1到28,兔:2到14D.鸡:2到28,兔:2到143. 采用盲目的搜索方法,在搜索结果的过程中,把各种可能的情况都考虑到,并对所得的结果逐一进行判断,过滤掉那些不合要求的,保留那些合乎要求的结果,这种方法叫做____。A.递推法 B.枚举法
C.选择法 D.解析法4.以下算法中,需通过多重循环一一列举出解决问题所有可能解,并在逐一列举的过程中,检验每个可能的解是否是问题的真正解的是 。而需要从实际问题中归纳出反映事物内在联系的数学公式,就此设计出合适的算法的是 。
A.解析法穷举法B.递归法解析法
C.穷举法解析法D.穷举法递归法
有5个人,问第5人年龄,说比前面第4人小3岁。问第4、3、2人,都说比前面人小3岁,问第1人,说他的年龄为38岁。问第5人的年龄多大。用递归法解决此问题的正确步骤是()A ①定义age(n)函数 ②函数中当n>1时返回函数值age(n-1)当n=1返回函数值为38B ①定义age(n)函数 ②函数中当n>1时返回函数值age(n-1)-3当n=1返回函数值为38
C ①定义age(n)函数 ②函数中不断调用age(n-1)-3D ①定义age(n)函数 ②函数中不断调用age(n)函数自己
6.我们在用计算机解决问题时,常采用的算法有解析法、穷举法、递归法、冒泡排序法、选择排序法等,分析下列问题应采用哪种算法解决?
一个数除以5余1,除以6余5,除以7余4,除以11余10,求符合这些条件的最小的数是多少?
某学校图书管理系统中有10万条图书资料记录(已经索引排序),假设从中取出一条记录与待查项进行比较所花的时间为10毫秒,则用对分法在该系统中查找任意一本指定图书最多花费的时间约为()
A.100万毫秒 B.10万毫秒C.10毫秒 D.170毫秒
二分法查找(对半查找)算法,下列正确的是 ( ) (A)先将数据按降序或升序排列 (B)数据依输入顺序排列(C)应先将数据由小到大排列 (D)数据的个数为奇数个
9.编程求解1000以内的所有素数,下列算法中最适用的是
A二分法 B穷举法
C.解析法 D冒泡排序法
填空题
1.随机产生10个1-100之间的正整数,按从小到大的次序排序并输出。为了实现这一目标,完善下面的VB程序,在划线处填入合适的语句或表达式,完成程序设计Sub Command1_Click()Const n = 10Dim i As Integer, j As Integer, t As IntegerDim a(1 To 100) As IntegerFor i = 1 To 10a(i) = 100 * Rnd(1) + iNext iFor i = 1 To n - 1
For j = i + 1 To n If _______________ Then
k = a(j-1): a(j-1) = a(j): a(j) = k
End IfNext jNext iFor i = 1 To 10List1.AddItem Str(a(i))Next iEnd Sub2. 有一张单据上有一个5位数的号码67□□8,其中百位和十位上的数字看不清了,但知道该数能够被78整除,也能被67整除,下面是用穷举法求出该号码的程序段:
Dim a As Integer, b As Integer
Dim n As Long
For a = 0 To 9
For b = 0 To ①
n = 67008 + ② * 100 + b * 10
If n Mod 78 = 0 ③ n Mod 67 = 0 Then
Print ④
End If
Next b
Next a
请将应填写的内容写在下面相应的空格内并运行程序写出该号码(每空3分,共12分)。
①_____________
②_____________
③_____________
④ _____________
3. 有一个数组DATA存放了N个数据,现从中删除了一个元素,其余的元素依次向前递补(假设删除的是第3个元素,则要将第4个元素移到第3个元素处,第5个元素移到第4个元素处,以此类推),然后输出数组内容。填写程序中的空缺Private Sub Command1_Click()Dim data(10) As IntegerDim I, N, T As IntegerN = 10For I = 1 To N data(I) = I * 2Next IT = InputBox("删除第几个元素")For I = ____________________data(I - 1) = data(I)Next I__________________For I = 1 To N Print data(I);Next IEnd Sub4.写出下列程序的输出结果
Private Sub Command1_Click() Print f(100, 8) End Sub Public Function f(ByVal n%, ByVal r%) If n <> 0 Then f = f(n r, r) Print n Mod r End If End Function
主题三 算法与程序实现
同步集训答案
一选择题:
1、B 2、B 3、B4、C5、B6、穷举法7、D8、A11、B11、D
填空题
1、a(j-1)>a(j)
2、9 a and n
3、t+1 to n n=n-1
4、4 4 1
主题四 程序设计思想和方法
点击考点
了解模块化程序设计的基本思想和方法
了解面向对象程序设计的思想和方法
了解面向对象程序设计的基本特征
考点注解
1、了解模块化程序设计的基本思想和方法
1)模块化程序设计的基本思想:
在程序设计过程中,为了有效地完成任务,把所要完成的任务精心分割成若干相对独立,但相互仍可有联系的任务模块,这样的任务模块还可以继续细分成更小的模块。直至那些小模块变得任务相对单纯,对外的数据交换相对简单,容易编写,容易检测,容易阅读和维护。
在VB语言中,使用函数和过程来实现被细分了的各个模块的代码
2)模块化程序设计方法: 在设计程序求解问题时,首先要对问题从整体的角度进行分析,将其分解成几个有机的组成部分,如果某些部分还比较复杂可再分解,经过逐步分解和细化后,将一个大而复杂的问题,从总体到局部,逐步分解为若干个小的可解的基本问题,再通过求解这些基本问题最终求解得原问题的解。模块化程序设计方法反映了结构化程序设计的“自顶而下,逐步求精”的基本思想。 3)模块划分原则:使每个模块都容易解释。设计程序系统时使用按功能划分模块的方法,使模块的内聚度强,耦合度弱(独立性比较高)。 4)采用模块化方法得到的系统是由互相连接的模块构成的。进行模块化程序设计时,提倡按层次结构组织各模块。
VB中过程与函数使用举例如下:1、自定义函数格式: Public Function 函数名(形式参数表) As 类型 语句组 函数名=表达式End Function注意:
(1)形式参数表中的参数是自变量(2)第一个语句的“As 类型”指明函数值勤的数据类型(3)“函数名=表达式”是一个赋值语句(4)可用Exit Function退出自定义函数调用:与内部函数一样例:求三个数的平均数的自定义函数:Public Function ave(a As Integer, b As Integer, c As Integer) As Single ave = (a + b + c) / 3End Function调用自定义函数如下: Private Sub Command1_Click()Dim a As Integer, b As Integer, c As Integera = InputBox("input")b = InputBox("input")c = InputBox("input")x = ave(a, b, c) ‘调用自定义函数AVE()Print "平均数为"; xEnd Sub2、自定义过程格式:Private Sub 子过程名(形式参数表) 语句组(过程体) End Sub调用:子过程名 实际参数表例:Private Sub average(a As Integer, b As Integer, c As Integer, ave As Single)ave = (a + b + c) / 3End Sub调用:Private Sub Command2_Click()Dim a As Integer, b As Integer, c As Integer, x As Singlea = InputBox("input")b = InputBox("input")c = InputBox("input")average a, b, c, x ‘子过程average的调用Print "平均数为"; xEnd Sub2、了解面向对象程序设计的思想和方法
面向对象,VB采用了面向对象的程序设计思想。它的基本思路是把复杂的程序设计问题分解为一个个能够完成独立功能的相对简单的对象集合,所谓“对象”就是一个可操作的实体,如窗体、窗体中的命令按钮、标签、文本框等。面向对象的编程就好像搭积木一样,程序员可根据程序和界面设计要求,直接在屏幕上“画"出窗口、菜单、按钮等不同类型的对象,并为每个对象设置属性。
属性
属性是对对象特性的描述,VB为每一类对象都规定了若干属性,设计中可以改变具体对象的属性值。比如窗体的背景颜色、高度与宽度。
事件驱动
在Windows环境下,程序是以事件驱动方式运行的,每个对象都能响应多个不同的事件,每个事件都能驱动一段代码——事件过程,该代码决定了对象的功能。通常称这种机制为事件驱动。事件可由用户的操作触发,也可以由系统或应用程序触发。例如,单击一个命令按钮,就触发了按钮的Click(单击)事件,该事件中的代码就会被执行。若用户未进行任何操作(未触发事件),则程序就处于等待状态。整个应用程序就是由彼此独立的事件过程构成。
在VB中事件的调用形式是:
Private Sub对象名_事件名
(事件内容)
End Sub
4)方法(Method)
方法指的是控制对象动作行为的方式。它是对象本身内含的函数或过程,它也是一个动作,是一个简单的不必知道细节的无法改变的事件,但不称作事件;同样,方法也不是随意的,一些对象有一些特定的方法。在VB里方法的调用形式是:
对象名.方法名
属性、方法和事件之间的关系
VB对象具有属性、方法和事件。属性是描述对象的数据;方法告诉对象应做的事情;事件是对象所产生的事情,事件发生时可以编写代码进行处理。
VB的窗体和控件是具有自己的属性、方法和事件的对象。可以把属性看作一个对象的性质,把方法看作对象的动作,把事件看作对象的响应。
在VB程序设计中,基本的设计机制就是:改变对象的属性、使用对象的方法、为对象事件编写事件过程。程序设计时要做的工作就是决定应更改哪些属性、调用哪些方法、对哪些事件作出响应,从而得到希望的外观和行为。
事件驱动模型
在传统的或“过程化”的应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码。从第一行代码执行程序并按应用程序中预定的路径执行,必要时调用过程。
在事件驱动的应用程序中,代码不是按照预定的路径执行,而是在响应不同的事件时执行不同的代码片段。事件可以由用户操作触发、也可以由来自操作系统或其它应用程序的消息触发、甚至由应用程序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此应用程序每次运行时所经过的代码的路径都是不同的。
了解面向对象程序设计的基本特征
面向对象主要特征:
封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。
综上可知,在面对对象方法中,对象和传递消息分别表现事物及事物间相互联系的概念。类和继承是是适应人们一般思维方式的描述范式。方法是允许作用于该类对象上的各种操作。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。
同步集训
下面选项内不属于描述面向对象程序设计特征的名词是( )A、继承性 B、多态性
C、连续性 D、封装性
2、模块化程序设计方法反映了结构化程序设计的 ( ) 基本思想。
A.自顶而下、逐步求精 B.面向对象
C. 自定义函数、过程 D. 可视化编程
3、下列 属性是每个控件都有的。
A、 Name B、 Caption
C、 Font D、 Interval
4、下列控件中可用于接受用户输入文本,又可用于显示文本的是 。
A、 Label B、 TextBox
C、 Timer D、 CommandButton
5、改变Label中显示的文本内容,要设置的属性是()。
A、 Text B、 BackColor
C、 Caption D、 (名称)
6、改变Text中显示的文本内容,要设置的属性是()。
A、 Text B、 BackColor
C、 Caption D、 (名称)
① ② ③ 图1
7、在图1 中,这3个控件名称依次是()。
A、 Label、TextBox、CommandButton B、 TextBox、Label、CommandButton
C、 CommandButton、Label、TextBox D、 CommandButton、TextBox、Label
8、双击窗体中的对象后,VB将显示的窗口是()。
A、 项目(工程)窗口 B、 工具箱 C、 代码窗口 D、 属性窗口
9、如果文本框Text1的内容为-12,文本框Text2的内容为7,则下列程序段运行后文本框Text3的内容显示为()。
Dim x As Single, y As Single, z As Single
x=Val(Text1.Text)
y=Val(Text2.Text)
z=x-y
Text3.Text=Str(z)
-5 B、 7
C、 -12 D、 -19
10、如果文本框Text1的内容为3,则下列程序段运行后Label1的内容显示为()。
Dim x As Single, i As Single, s As Double
s=0
x=Val(Text1.Text)
For i=1 To x
s=s*i
Next i
Label1.Caption=Str(s)
A、6 B、9
C、0 D、 1
主题四 程序设计思想和方法
同步集训答案
一选择题:
1、C 2、A 3、A4、B5、C6、A7、A8、C9、D10、A