- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- + 过程和自定义函数
- 枚举算法及程序实现
- 解析算法及程序实现
- 递归算法及程序实现
- 排序算法及程序实现
- 查找算法及程序实现
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
给定 m 个区间和 1 个数组(有 n 个元素),现要求根据各区间限定的取值范围,将数组依次分割成 m+1 个段。具体分割方法如下:
•第 1 段是从数组首个元素开始,元素值都属于第 1 区间的最长连续元素段,如果首个元素不属于第 1 区间,则第1 段元素个数为 0;
•第 1 段分割后的剩余元素,用同样的方法来依次分割第 2段、第 3 段、…、第 m 段;
•第 m 段分割后的剩余元素分割到第 m+1 段(剩余段)。
若第 p(1≤p≤m-1)段末尾连续元素的值也同时属于第 p+1区间,则这块连续元素称为第 p 段“重叠块”,该段其余部分称为第 p 段“非重叠块”。由于不存在第 m+1 区间,这里特别规定:第 m 段的全部元素都分割到 m 段“非重叠块”,第 m段“重叠块”的元素个数为 0。一个数组分段示例如图。图中数组第 1 个元素 10 不属于第 1 区间[0,5],因此第 1 段的元素个数为 0。 10 和 20 属于第 2 区间,而 33 不属于第 2 区间,因此第 2 段只包含 10 和 20 两个元素。第 3 段末尾连续3 个元素的值也同时属于第 4 区间,因此,第 3 段“非重叠块”包含 33,58,46,第 3 段“重叠块”包含 55,62,69。

(1)给定 2 个区间,数组各元素为“12,44,34,45,66,50,45,70”,第 1 段“重叠块”中的元素个数为 3 个,第 1 个区间为[10,50],则第 2 个区间可能为______________(单选,填字母
(2)小李根据上述描述,设计了一个统计各段“非重叠块”“重叠块”和剩余段中元素个数的算法。算法的 VB 程序如下,请在划线处填入合适的代码。
Const n = 18: m = 6
Dim a(1 To n) As Integer
Dim b(1 To 2 ∗ m) As Integer
'b(1)、b(2)为第 1 区间的下限和上限,b(3)、b(4)为第 2区间的下限和上限,…
Dim c(1 To 2 ∗ m + 1) As Integer
'数组 c 用于保存统计结果:
'c(1)、c(2)分别存储第 1 段"非重叠块"和"重叠块"的元素个数,
'c(3)、c(4)分别存储第 2 段"非重叠块"和"重叠块"的元素个数,…
'c(2 m-1)存储第 m 段"非重叠块"元素个数,c(2 m)存储
第 m 段"重叠块"的元素个数(值为 0)
'c(2 m+1)存储剩余段元素个数
Private Sub Command1_Click()
Dim i As Integer, p As Integer, L As Integer, LL
As Integer
'读取 n 个数据并保存在数组 a 中,代码略
'读取m 个区间的下限和上限并保存在数组b 中,代码略
For i = 1 To 2 ∗ m + 1
c(i) = 0
Next i
i = 1: p = 1
L = 0: LL = 0
Do While i <= n And p <= m
If IsIn(i, p) Then
If①_____ Then
LL = LL + 1
Else
L = L + LL + 1
LL = 0
End If
i = i + 1
Else
c(2 ∗ p - 1) = L
c(2 ∗ p) = LL
L = 0
②_____
p = p + 1
End If
Loop
If i <= n Then
③_______
Else
c(2 ∗ p - 1) = L
c(2 ∗ p) = LL
End If
'输出统计结果,代码略
End Sub
'函数 IsIn 用来判断 a(i)值是否属于第 p 区间
Function IsIn ( i As Integer, p As Integer )
As Boolean
If a(i) >= b(2 ∗ p - 1) And a(i) <= b(2 ∗ p)
And p <= m Then
IsIn = True
Else
IsIn = False
End If
End Function
•第 1 段是从数组首个元素开始,元素值都属于第 1 区间的最长连续元素段,如果首个元素不属于第 1 区间,则第1 段元素个数为 0;
•第 1 段分割后的剩余元素,用同样的方法来依次分割第 2段、第 3 段、…、第 m 段;
•第 m 段分割后的剩余元素分割到第 m+1 段(剩余段)。
若第 p(1≤p≤m-1)段末尾连续元素的值也同时属于第 p+1区间,则这块连续元素称为第 p 段“重叠块”,该段其余部分称为第 p 段“非重叠块”。由于不存在第 m+1 区间,这里特别规定:第 m 段的全部元素都分割到 m 段“非重叠块”,第 m段“重叠块”的元素个数为 0。一个数组分段示例如图。图中数组第 1 个元素 10 不属于第 1 区间[0,5],因此第 1 段的元素个数为 0。 10 和 20 属于第 2 区间,而 33 不属于第 2 区间,因此第 2 段只包含 10 和 20 两个元素。第 3 段末尾连续3 个元素的值也同时属于第 4 区间,因此,第 3 段“非重叠块”包含 33,58,46,第 3 段“重叠块”包含 55,62,69。

(1)给定 2 个区间,数组各元素为“12,44,34,45,66,50,45,70”,第 1 段“重叠块”中的元素个数为 3 个,第 1 个区间为[10,50],则第 2 个区间可能为______________(单选,填字母
A.[30,80] / | B.[9,45] / | C.[60,90])。 |
Const n = 18: m = 6
Dim a(1 To n) As Integer
Dim b(1 To 2 ∗ m) As Integer
'b(1)、b(2)为第 1 区间的下限和上限,b(3)、b(4)为第 2区间的下限和上限,…
Dim c(1 To 2 ∗ m + 1) As Integer
'数组 c 用于保存统计结果:
'c(1)、c(2)分别存储第 1 段"非重叠块"和"重叠块"的元素个数,
'c(3)、c(4)分别存储第 2 段"非重叠块"和"重叠块"的元素个数,…
'c(2 m-1)存储第 m 段"非重叠块"元素个数,c(2 m)存储
第 m 段"重叠块"的元素个数(值为 0)
'c(2 m+1)存储剩余段元素个数
Private Sub Command1_Click()
Dim i As Integer, p As Integer, L As Integer, LL
As Integer
'读取 n 个数据并保存在数组 a 中,代码略
'读取m 个区间的下限和上限并保存在数组b 中,代码略
For i = 1 To 2 ∗ m + 1
c(i) = 0
Next i
i = 1: p = 1
L = 0: LL = 0
Do While i <= n And p <= m
If IsIn(i, p) Then
If①_____ Then
LL = LL + 1
Else
L = L + LL + 1
LL = 0
End If
i = i + 1
Else
c(2 ∗ p - 1) = L
c(2 ∗ p) = LL
L = 0
②_____
p = p + 1
End If
Loop
If i <= n Then
③_______
Else
c(2 ∗ p - 1) = L
c(2 ∗ p) = LL
End If
'输出统计结果,代码略
End Sub
'函数 IsIn 用来判断 a(i)值是否属于第 p 区间
Function IsIn ( i As Integer, p As Integer )
As Boolean
If a(i) >= b(2 ∗ p - 1) And a(i) <= b(2 ∗ p)
And p <= m Then
IsIn = True
Else
IsIn = False
End If
End Function
为分析数组a中各元素依次变化的情况,进行如下定义:
变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。
波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。
对称波峰:上升段与下降段个数相同的波峰称为对称波峰。
下图为一组数据的变化段及波峰示意图。
(1)数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为_____。
(2)请在划线处填入合适的代码。
Const n = 20
Dim a(1 To n) As Integer
Private Sub Form_Load()
'读取数据,并存储到数组a中,代码略
End Sub
Private Sub Command1_Click()
Function IsSymPeak(flag As Integer, steps As Integer) As Boolean
变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)<a(i-1))和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。
波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。
对称波峰:上升段与下降段个数相同的波峰称为对称波峰。
下图为一组数据的变化段及波峰示意图。
(1)数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为_____。
(2)请在划线处填入合适的代码。
Const n = 20
Dim a(1 To n) As Integer
Private Sub Form_Load()
'读取数据,并存储到数组a中,代码略
End Sub
Private Sub Command1_Click()
Dim flag As Integer '存储变化段的状态:1表示升,-1表示降,0表示平
Dim count As Integer '存储对称波峰段的个数
Dim steps As Integer
Dim i As Integer
flag = 0: steps = 0: count = 0
For i = ________ To n
If a(i) > a(i - 1) Then
If IsSymPeak(flag, steps) Then count = count + 1
If flag = 0 Or flag = -1 Then
_________
Else
steps = steps + 1
End If
flag = 1
ElseIf a(i) = a(i - 1) Then
If IsSymPeak(flag, steps) Then count = count + 1
steps = 0
flag = 0
Else
steps = steps - 1flag = -1
End If
Next i
If IsSymPeak(flag, steps) Then count = count + 1
Text1.Text = Str(count)
End SubFunction IsSymPeak(flag As Integer, steps As Integer) As Boolean
If __________________ Then
IsSymPeak = True
Else
IsSymPeak = False
End If
End Function辗转相除法:用辗转相除法求三个数的最大公约数。
程序界面如图所示,在文本框Text1、Text2和Text3中分别输入三个数从a、b和c,单击"求最大公约数"按钮(Command1)后,在文本框Text4中输出a、b、c的最大公约数y。


辗转相除法具体为:设两数为a、b(a>b),求最大公约数(a,b)的步骤如下:a除以b,得a=bq......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0, b除以r1,得b="r1q......r2" (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续r1除以r2,……如此下去,直到余数为0,这时的除数即为最大公约数(a,b)。
相应的Visual Basic 程序如下:
Function temp(num1 as Integer, num2 as Integer) as Integer
Dim r As Integer
if num1<num2 then
t=num1:num1=num2:num2=t
endif
r =" num1" Mod num2
Do While (1)
num1 = (2)
num2 = (3)
r =" num1" Mod num2
Loop
temp = num2
End Function
-------------------------------------------------------------------------------
Private Sub Command1_Click()
Dim a as Integer, b as Integer, c as Integer, x as Integer, y as Integer
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
x = (4)
y =" temp(x," c) ‘调用函数TEMP
Text4.Text = Str(y)
End Sub
在(1)中应该填入(_____)
A、r =0 B、 r<>0 C、 r< 0 D、r>0
在(2)中应该填入(______)
A、num1 B、num2 C、 r D、num1 mod num2
在(3)中应该填入(___)
A、num1 B、num2 C、 r D、num1 mod num2
在(4)中应该填入(___)
A、temp(a, b) B 、temp(x, c) C、temp(b, c) D、temp(x, y)
程序界面如图所示,在文本框Text1、Text2和Text3中分别输入三个数从a、b和c,单击"求最大公约数"按钮(Command1)后,在文本框Text4中输出a、b、c的最大公约数y。


辗转相除法具体为:设两数为a、b(a>b),求最大公约数(a,b)的步骤如下:a除以b,得a=bq......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0, b除以r1,得b="r1q......r2" (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续r1除以r2,……如此下去,直到余数为0,这时的除数即为最大公约数(a,b)。
相应的Visual Basic 程序如下:
Function temp(num1 as Integer, num2 as Integer) as Integer
Dim r As Integer
if num1<num2 then
t=num1:num1=num2:num2=t
endif
r =" num1" Mod num2
Do While (1)
num1 = (2)
num2 = (3)
r =" num1" Mod num2
Loop
temp = num2
End Function
-------------------------------------------------------------------------------
Private Sub Command1_Click()
Dim a as Integer, b as Integer, c as Integer, x as Integer, y as Integer
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
x = (4)
y =" temp(x," c) ‘调用函数TEMP
Text4.Text = Str(y)
End Sub
在(1)中应该填入(_____)
A、r =0 B、 r<>0 C、 r< 0 D、r>0
在(2)中应该填入(______)
A、num1 B、num2 C、 r D、num1 mod num2
在(3)中应该填入(___)
A、num1 B、num2 C、 r D、num1 mod num2
在(4)中应该填入(___)
A、temp(a, b) B 、temp(x, c) C、temp(b, c) D、temp(x, y)
键盘输入两个数,然后输出大数。
DIM A AS INTEGER,B AS INTEGER
A=5:B=7
MAX=___________
PRINT MAX
END
FUNCTION AA(X AS INTEGER,Y AS INTEGER)
IF X>Y THEN
_______________________
ELSE
_______________________
END FUNCTION
DIM A AS INTEGER,B AS INTEGER
A=5:B=7
MAX=___________
PRINT MAX
END
FUNCTION AA(X AS INTEGER,Y AS INTEGER)
IF X>Y THEN
_______________________
ELSE
_______________________
END FUNCTION
编写子程序对两个整数进行对调。
DIM A AS INTEGER,B AS INTEGER
A=5:B=7
PRINT A,B
CALL SS(A,B)
_______________________
END
SUB SS(X AS INTEGER,Y AS INTEGER)
T=X
__________________
__________________
__________________
DIM A AS INTEGER,B AS INTEGER
A=5:B=7
PRINT A,B
CALL SS(A,B)
_______________________
END
SUB SS(X AS INTEGER,Y AS INTEGER)
T=X
__________________
__________________
__________________
Sub过程与Function过程最根本的区别是( )。
A.Sub过程可以使用Call 语句或直接使用过程名调用,而Function过程不可以 |
B.Function过程可以有参数,Sub过程不可以 |
C.两种过程参数的传递方式不同 |
D.Sub过程的过程名不能返回值,而Function过程能通过过程名返回值 |
要想在过程调用后返回两个结果,下面的过程定义语句合法的是[ ]。
A.Sub p(Byval n,Byval m) | B.Sub p(n,byval m) |
C.Sub p(n,m) | D.Sub p(Byval n,m) |
function abc( n as integer) as integer
Abc=n*5+10
End function
Private sub form_click()
Dim x as integer
X=abc(2)+100* abc(1)
Print x
End sub
Abc=n*5+10
End function
Private sub form_click()
Dim x as integer
X=abc(2)+100* abc(1)
Print x
End sub
A.2 | B.1520 | C.1500 | D.700 |