中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

4.4.4循環控制的應用 練習(原卷+解析卷)

資源下載
  1. 二一教育資源

4.4.4循環控制的應用 練習(原卷+解析卷)

資源簡介

中小學教育資源及組卷應用平臺
4.4.4循環控制的應用-粵教版(2019)高中信息技術必修一練習
學校:___________姓名:___________班級:___________考號:___________
一、選擇題
1.有如下
VB
程序段:
For
i
=
1
To
Len(Text1.Text)
c
=
Mid(Text1.Text,
i,
1)
If
c
>=
"0"
And
c
<=
"9"
Then
x
=
Val(c)
a((x
+
1)
Mod
10)
=
a((x
+
1)
Mod
10)
+
1
End
If
Next
i
s
=
""
For
i
=
0
To
9
s
=
s
&
a(i)
Next
i
Text2.Text
=
s
數組元素
a(0)

a(9)
的值均為0,執行該程序段后,文本框Text2
顯示的內容為“1302000100”。則文本框
Text1
中輸入的內容可能是(

A.2020-6-09
B.2020-02-28
C.2020-6-01
D.2019-01-07
2.有如下
VB
程序段:
a(1)
=
1:
a(2)
=
1:b(1)
=
1:
b(2)
=
2
For
i
=
3
To
5
a(i)
=
a(i
-
1)
+
a(i
-
2)
b(i)
=
b(i
-
1)
+
a(i)
Next
i
執行該程序段后,數組元素
b(5)的值為


A.5
B.8
C.12
D.15
3.有如下
VB
程序段:
Dim
n
As
Integer
Dim
sum
As
Integer
Dim
i
As
Integer
Function
fx(i
As
Integer)
as
Integer
If
i
=
1
Then
fx
=
5
Else
fx
=
5
2
^
(i
-
1)
+
fx(i
-
1)
End
if
End
Function
Private
Sub
Command1_Click()
n
=
Val(Text1.Text):
sum
=
0
For
i
=
1
To
n
sum
=
sum
+
fx(i)
Next
i
Label1.Caption
=
Str(sum)
End
Sub
若在
Text1
中輸入4,單擊
Command1,則
Label1
中顯示的內容為(

A.55
B.75
C.80
D.130
4.有如下VB程序段:
Dim
d(1
to
5)as
integer,i
as
integer
Dim
flag
as
Boolean,j
as
integer
‘給數組元素d(1)至d(5)賦初值為1,代碼略
Randomize
For
i=1
to
5
J
=
l:flag
=
True
d(i)
=
int(Rnd
9)
Do
while
j<
=i-1
and
flag
=
True
d(i)
=
int(Rnd
5+1)
If
d(i)
=
d(j)
then
i=i-l:flag
=
False
j
=
j+1
Loop
Next
i
運行程序后,數組中的數據值可能是(

A.1
3
4
5
6
B.3
5
4
1
1
C.8
3
1
2
5
D.1
2
6
2
1
5.有如下VB程序段:
a="10001":b=0:t=0
For
i=1
To
Len(a)
c=
Mid(a,
i,
1)
If
c="0"
Then
t
=
t
-1
Else
t
=
t
+1
If
t
<
0
Then
b
=
b
2
Else
b
=
b
2+1
Next
i
執行該程序段后,變量b的值為(

A.15
B.17
C.20
D.24
6.有如下VB程序段:
b=0
For
a=1
To
10
b=a+b
a=a+3
Next
a
c=a+b
執行該程序段后,變量c的值為(

A.15
B.22
C.28
D.32
7.有如下VB程序段:
n
=
Val(Text1.Text)
i
=
1
Do
While
n
>
0
num
=
n
Mod
16
If
num
>=
0
And
num
<=
9
Then
Text2.Text
=
Chr(Asc("0")
+
num)
+
Text2.Text
Else
Text2.Text
=
Chr(Asc("A")
+
num
-
10)
+
Text2.Text【來源:21·世紀·教育·網】
End
If
n
=
n
\
16
i
=
i
+
1
Loop
執行該程序段,在文本框Text1中輸入420,則文本框Text2中顯示的內容的是(

A.4A
B.A4
C.1A4
D.4A1
8.有如下VB程序段:
For
i=2
to
5
For
j=i
to
5
If
j
mod
i=0
then
a(j)=a(j)+1
Next
j
Next
i
For
i=1
to
5
If
a
(i)<>1
then
s=str(i)+s
Next
i
若數組a
的初始值都為0,則運行該程序段后,s的值為(

A.2
3
5
B.1
4
C.5
3
2
D.4
1
9.有如下VB程序段:
For
i
=
1
To
6
a(i)
=
Int(Rnd()
10)
+
1
If
a(i)
Mod
2
=
i
Mod
2
Then
a(i)
=
a(i)
+
1
Else
a(i)
=
a(i)
Mod
2
End
If
Next
i
執行該程序段后,在下列選項中,a(1)~a(6)各元素可能的值是(

A.0,1,1,0,0,1
B.0,5,6,6,10,9
C.2,3,6,7,8,11
D.2,1,8,3,12,5
10.有如下
VB
程序段:
Private
Sub
Command1_Click()
Dim
a(1
To
6)
As
Integer,
i
As
Integer
For
i
=
1
To
6
a(i)
=
Int(Rnd
5)
2
+
1
Next
i
For
i
=
2
To
6
Step
2
a(i)
=
cha(a(i
-1),
a(i))
Next
i
End
Sub
Function
cha(x
As
Integer,
y
As
Integer)
As
Integer
【來源:21cnj
y.co
m】
Dim
t
As
Integer
If
x
<
y
Then
t=x:
x
=
y:
y
=
t
cha
=
y
Else
cha
=
x
-1
End
If
End
Function
執行該程序段后,在下列選項中,a(1)~a(6)各元素值可能的是(

A.8,9,3,2,5,1
B.7,6,5,5,3,1
C.9,3,5,4,4,3
D.7,3,1,0,5,4
11.字符串旋轉。若整型變量
s、t、c
的值分別為
3、9、4,則下列程序執行后
str1
的值為(
)【出處:21教育名師】
str1
=
"go
it
for!"
str2
=
Mid(str1,
s,
t
-
s
+
1)
len1
=
Len(str1)
:
len2
=
Len(str2)
c
=
c
Mod
len2
For
i
=
1
To
c
str2
=
Mid(str2,
len2,
1)
+
Mid(str2,
1,
len2
-
1)
21
cnjy
com
Next
i
str1
=
Mid(str1,
1,
s
-
1)
+
str2
+
Mid(str1,
t
+
1,
len1
-
t)
A.go
for
it!
B.for!
go
it
C.for
it
go!
D.it
for
go!
12.有如下VB程序段:
For
i=1
to
3
For
j=1
to
5-i
If
a(j)>a(j+1)
Then
t=a(j)
:
a(j)=a(j+1)
:
a(j+1)=t
End
If
Next
j
Text1.Text
=
Str(a(i))+Text1.Text
Next
i
數組元素a(1)到a(5)的值依次為“2,9,7,8,5”。若該程序段執行后,文本框Text1顯示的內容是(

A.2
5
7
B.9
8
7
C.2
7
7
D.7
7
2
13.字符串s1中保存了一個單詞,字符串s2中保存了一句以空格結尾的句子,字符串s1和s2均由小寫字母組成且s2中各個單詞之間僅用空格隔開,下列程序能夠統計單詞s1在句子s2中出現的次數:
i=1:j=1:cnt=0
Do
While
j<=
Len(s2)
If
Mid(s1,i,1)<>
Mid(s2,j,1)Then
Else
Do
While
i<=lens
and
j<=lens2
If
Mid(s1,
i,
1)
=Mid(s2,
j,
1)Then
Else
End
If
Loop
lf
i=len(s1)+1
And
Mid(s2,j,1)=""then
cnt=
cnt+1
End
If
i=1
End
If
Loop
方框中的代碼分別是:①i=1:j=j+1
②i=i+1:j=j+1
③j=j+1
代碼從上到下正確的順序是()
A.①②③
B.③②①
C.③①②
D.②①③
二、操作題
14.小王設計了一個利用矩陣“翻轉法”實現矩陣逆序輸出的程序,其功能為:運行程序時,在文本框
Text1
中輸入矩陣大小n,點擊“產生矩陣”按鈕
Command1,在列表框
List1
中顯示一個
n×n
的矩陣,該矩陣數據為隨機兩位正奇數。點擊“翻轉矩陣”按鈕
Command2,該矩陣翻轉(水平翻轉和垂直翻轉均要實現)后顯示在列表框
List2
中,再點一次“翻轉矩陣”按鈕
Command2,列表框
List2
中顯示的矩陣被還原為初始狀態。程序運行界面如圖所示。
實現上述功能的
VB
程序如下,請回答下列問題:
(1)在上圖的程序運行界面基礎上,再連續兩次單擊
Command2
按鈕,則列表框
List2
中第一行顯示的內容是____________________。
(2)實現此程序的代碼如下,請完成程序填空。
Dim
n
As
Integer
Dim
L
As
String
Dim
i
as
Integer
Dim
j
as
Integer
Dim
a(1
To
100)
As
Integer
Dim
b(1
To
100)
As
Integer
Private
Sub
Command1_Click()
n
=
Val(Text1.Text)
Randomize
For
i
=
1
To
n
n
a(i)
=

+
1
Next
i
For
i
=
1
To
n
L
=
""
For
j
=
1
To
n
L
=
L
+
"
"
+
Str(a((i
-
1)
n
+
j))
Next
j
List1.AddItem
L
Next
i
End
Sub
Private
Sub
Command2_Click()
List2.Clear
For
i
=
1
To
n
L
=
""
For
j
=
1
To
n
b((i
-
1)
n
+
j)
=

L
=
L
+
"
"
+
Str(b((i
-
1)
n
+
j))
Next
j
List2.AddItem
L
Next
i
For
i
=
1
To
n
n
a(i)
=

Next
i
End
Sub
15.小李編寫
VB
程序,功能如下:單擊“產生數組”按鈕
Command1,則隨機生成
10
個取值范圍是
1~10
的正整數,分別存儲到數組
a
中,對數組
a
的元素進行升序排列,并在標簽
Label1
中顯示;
再單擊“重復數”按鈕
Command2,則在排序后的數組
a
中查找連續個數最多的一組重復數值,
若有兩組連續重復數個數一樣多,則取數值小的一組,將重復數的數組元素下標顯示在標簽Label2
中。運行界面如圖所示。
21教育網
(1)已知窗體名稱為
Form1,要使程序加載時,窗體標題自動顯示為“統計重復數”,則可在___________(單選,填字母)事件過程中添加代碼:Form1.Caption
=
“統計重復數”。
A.Form_Click()
B.Form_Load()
C.Form1_Click()
D.Form1_Load()
(2)實現上述功能的程序如下,請在劃線處填寫合適代碼,使程序正常運行。
(3)程序加框處代碼有錯,請改正。
Dim
a(1
To
10)
As
Integer
Dim
n
As
Integer
Private
Sub
Command1_Click()
Dim
i
As
Integer
xkw,
j
As
Integer,
k
As
Integer,
temp
As
Integer
Dim
s
As
String
Randomize
n
=
10
For
i
=
1
To
n
a(i)
=
Int(Rnd
10)
+
1
Next
i
For
i
=
1
To
n
-
1
k
=
i
For
j
=
i
+
1
To
n
If
a(j)
<
a(k)
Then

Next
j
If
k
<>
i
Then
temp
=
a(i):
a(i)
=
a(k):
a(k)
=
temp
End
If
Next
i
s
=
""
For
i
=
1
To
n
s
=
s
+
Str(a(i))
If
i
<
n
Then
s
=
s
+
","
Next
i
Label1.Caption
=
s
End
Sub
Private
Sub
Command2_Click()
Dim
i
As
Integer,
j
As
Integer,
k
As
Integer
Dim
length
As
Integer,
origin
As
Integer
Dim
s
As
String
k
=
1:origin=1:length
=
1
For
i
=
2
To
n
If
a(i)
=
a(i
-
1)
Then
k
=
k
+
1
If
k
>
length
Then
length
=
k
origin
=

End
If
Else
k
=
1
End
If
Next
i
s
=
""
For
j
=
origin
To
s
=
s
+
Str(j)
Next
j
Label2.Caption
=
s
End
Sub
16.小章想將a數組中n個元素排列成合唱隊列形態,具體方法如下:
①如果n是奇數,選出所有數據中最大元素,將其放在a數組正中間位置。
②從剩下待處理數據中選出最大的兩個元素,同時將較大元素放在已處理數據段的右側,
較小元素放在已處理數據段的左側。2·1·c·n·j·y
③反復執行操作②,直到所有數據處理完畢。
按上述要求,小章編寫一個
VB
程序,功能如下:
在文本框
Text1
中輸入
n,單擊“生成”按鈕
Command1,并在文本框
List1
中顯示排序前
數據;單擊“排序”21世紀教育網按鈕
Command2,在列表框
List2
中輸出處理后的結果。程序運行界面如下圖所示。
(1)下列哪個選項,可以將窗體Form1標題改為:“生成合唱隊列”_____(單選,填字
母:A.Form.Caption="生成合唱隊列"/
B.Label1.Caption
="生成合唱隊列"/
C.Form1.Caption="生成合唱隊列")
(2)實現上述功能的VB程序如下,請在劃線處①②③填入合適代碼。
①________________
②________________
③________________
(3)程序加框處代碼有錯,請改正。
改正:__________________
Dim
a(1
To
100)
As
Integer
Dim
n
As
Integer
Private
Sub
Command1_Click()
'在文本框
Text1
中輸入
n(n<=100)
'排序前數據存儲在數組
a
中,并在文本框
List1
中顯示
'代碼略
End
Sub
Private
Sub
Command2_Click()
Dim
i
As
Integer,
j
As
Integer,
t
As
Integer
Dim
pMax1
As
Integer,
pMax2
As
Integer
pMax1
=
n
\
2
+
1:
pMax2
=
n
\
2
If

Then
For
i
=
1
To
n
If
a(i)
>
a(pMax1)
Then
t
=
a(pMax1):
a(pMax1)
=
a(i):
a(i)
=
t
Next
i
pMax1
=
pMax1
+
1
End
If
For
i
=
1
To
n
\
2
If

Then
t
=
a(pMax1):
a(pMax1)
=
a(pMax2):
a(pMax2)
=
t
j
=
pMax1
Mod
n
+
121cnjy.com
Do
While
j
<>
pMax2
If
a(j)
>
a(pMax1)
Then
t
=
a(pMax1):
a(pMax1)
=
a(j):
a(j)
=
t
t
=
a(pMax2):
a(pMax2)
=
a(j):
a(j)
=
t
t
=
a(pMax2):
a(pMax2)
=
a(j):
a(j)
=
t
End
If

Loop
pMax1
=
pMax1
+
1
pMax2
=
pMax2
-
1
Next
i
For
i
=
1
To
n
List2.AddItem
Str(a(i))
Next
i
End
Sub
17.隨機產生n個三位數,并對這些數進行索引排序。從文本框Text1中輸入n的值,在列表List1中輸出原始數據,列表框List2中輸出升序排序結果。例如,原始數據140,472,876,811,436,965,884,150數據關系如下表所示:
原始數組a(i)
140
472
876
811
436
965
884
150
初始化索引數組index(i)
1
2
3
4
5
6
7
8
排序后的索引數組index(i)
1
4
6
5
3
8
7
2
排序后結果
140
150
436
472
811
876
884
965
(1)實現上述功能的VB程序如下,運行結果如圖所示,請在劃線處填入合適的代碼。
Private
Sub
Command1_Click()
Dim
i
As
Integer,
j
As
Integer,
n
As
Integer
Dim
a(1
To
100),
index(1
To
100)
As
Integer,
b(1
To
100)
As
Integer
n
=
Val(Text1.Text)
List1.Clear:
List2.Clear
For
i
=
1
To
n
__________
List1.AddItem
Str(a(i))
Next
i
'索引排序
For
i
=
1
To
n
index(i)
=
i
For
j
=
1
To
i
-
1
If
a(i)
<
a(j)
Then
index(i)
=
index(i)
-
1:_____21·cn·jy·com
Next
j
Next
i
For
i
=
1
To
n
_____
Next
i
For
i
=
1
To
n
List2.AddItem
Str(b(i))
Next
i
End
Sub
(2)加框處代碼改為
index(i)=1
For
j=1
to
n
If
a(i)>a(j)
then
index(i)=index(i)+1
Next
j
能否實現排序?_______(填:能/不能)
18.小董編寫了一個有關“篩選操作”的VB程序,實現如下功能:在文本框Text1中顯示一組隨機生成個位數為“9”的兩位數(原始數據),在文本框Text2中輸入篩選個數,單擊“操作”按鈕Command1后,在文本框Text3中按降序顯示所篩選個數的不重復最大數據(以逗號分隔
并以數據結尾),若在文本框Text2中輸入的數大于原始數據中不相同數的個數,則在文本框Text3中顯示“篩選的個數太大,請重新輸入!”。程序運行界面如圖所示。
(1)如圖所示,該VB程序的窗體中共有
類對象(填數字)。
(2)實現上述功能的VB程序如下,請在劃線處填入合適的代碼。
(3)程序中加框處代碼有錯,請改正。
Const?n?=?10
Dim?d(n)?As?Integer,?c?As?Integer
Private?Sub?Form_Load()
???
Dim?i?As?Integer,?j?As?Integer,?f?As?Boolean,?s?As?String
????
Randomize
????
c?=?n
???
?
For?i?=?1?To?n
????????
f?=?False
?????????
d(i)?=?

??
?'
隨機生成個位數為“9”的兩位數www.21-cn-jy.com
?????????
For?j?=?1?To?i?-?1
????????????
If?

?Then?f?=?True2-1-c-n-j-y
?????????
Next?j
?????????
If?f?Then?c?=?c?-?1
????
Next?i
'原始數據在文本框Text1中顯示。代碼略
End?Sub
Private?Sub?Command1_Click()
Dim?i?As?Integer,?j?As?Integer,?k?As?Integer,?m?As?Integer
Dim
cnt?As?Integer,t?As?String,?s?As?String
d(0)?=?100
cnt?=?Val(Text2.Text)
????
If?cnt?>?c?Then
Text3.Text?=?"輸入篩選的個數太大,請重新輸入!"
???
Exit?Sub??????'Exit?Sub表示退出過程
End?If
For?i?=?1?To?cnt
?
k?=?i
For?j?=?i?+?1?To?n
If?d(j)?Next?j
??????If?k?<>?i?Then
????????????t?=?d(i):?d(i)?=?d(k):?d(k)?=?t
??????End?If
Next?i
For?i?=?1?To?cnt
??????s?=?s?+?Str(d(i))?+?","
Next?i
Text3.Text?=?

End?Sub
三、簡答題
19.在“抗擊疫情,‘宅’出精彩”征文活動中,每位選手可以提交一篇作品?;顒右曰ピu的形式展開:每位選手對m篇作品進行打分(本人作品回避),方法如下:【版權所有:21教育】

用1-n數字代表n個作品,打亂順序后分配給n個選手。分配方案保存在數組a中,如圖a存儲了兩組分配方案(n=5)。在第一個分配方案中把4號作品分配給1號參賽者,1號作品分配給2號參賽者(選手編號與序號錯開)……。
4
1
5
2
3
a(1)~a(n)中存儲第一個分配方案
2
3
4
5
1
a(n+1)~a(2
n)中存儲第二個分配方案
↑第i列中的作品拿給i號參賽者打分
圖a
②分配方案的形成方法:
將1~n之間的隨機數字依次放到第1個位置、第2個位置……,隨機數不能與位置號相同,并且要防止分配沖突,如前三個分配序號是“2
3
4”,那么在第4位上只能放“5”(如放“1”會導致第5個位置沒有符合要求的數字,因此位置n-1需要判斷數“n”是否已經分配,如果未分配,位置n-1放置數“n”),最終方案“2
3
4
5
1”。
③評m個作品需要m個分配方案。方案間要避免同一個人拿到重復的作品。如第16題圖a第3行上的數據“5
1
2
3
4”不符合要求,因為會使第2號選手重復拿到1號作品。
小明依據上述方法設計了VB程序,功能如下:在文本框Text1和Text2分別輸入參賽人數和每人打分的作品數量,單擊“分配”按鈕Command1,在列表框List1中輸出結果。程序運行效果如圖b所示。
請回答下列問題:
(1)n=5,m=3,a(1)~a(10)中的數據如圖a所示,a(11)~a(15)的數據可能是
(單選,填字母:A.5
4
3
1
2/B.5
4
1
3
2/C.3
4
5
1
2)
(2)請在劃線處填入合適的代碼。
Dim
n
As
Integer
'總人數/總作品數
Dim
m
As
Integer
'每人分配篇數
Dim
a(1
To
500)
As
Integer
'數組a大小滿足處理要求
Dim
c(1
To
100)
As
Integer
'數組c大小滿足處理要求
Private
Sub
Command1_Click()
Dim
i
As
Integer,
j
As
Integer,
k
As
Integer
n
=
Val(Text1.Text):
m
=
Val(Text2.Text)
Randomize
i
=
1
Do
While
i
<=
m
For
j
=
1
To
n
c(j)
=
0
'本輪分配方案中還沒有數字j,
c(j)=0,否則c(j)=1
Next
j
For
j
=
1
To
n
If
j
=
n
-
1
And
c(n)
=
0
Then

Else
k
=
r(n,
j)
End
If
a((i
-
1)
n
+
j)
=
k
'分配數字k到當前方案的第j個位置上
c(k)
=
1
Next
j
If

Then
i
=
i
+
1
21教育名師原創作品
Loop
s
=
""
For
i
=
1
To
n
s
=
"參賽者"
&
i
&
":"
For
j
=
1
To
m
s
=
s
+
Str(a((j
-
1)
n
+
i))+
","
Next
j
List1.AddItem
s
s
=
""
Next
i
End
Sub
Function
r(x
As
Integer,
y
As
Integer)
As
Integer
www-2-1-cnjy-com
'生成一個取值在[1,x]之間,可以放在y位置上的隨機數,滿足條件r<>y
andc(r)=0
End
Function
Function
check(c
As
Integer)
As
Boolean
'本輪方案和前面幾次的分配方案比較,如果有人分到了重復作品,返回FALSE
Dim
p
As
Integer,f
As
Boolean
f
=
True
p
=
1
For
i
=
1
To
c
n
If

Then
f
=
False:
Exit
For
End
If
p
=
p
mod
n
+1
Next
i
check
=
f
End
Function
四、填空題
20.某學校要對班主任進行滿意度調查,有20個評分項(為方便程序處理,評分項具體的名稱本題中不顯示,僅以序號代替),每個評分項學生可以打A、B、C
三個等級中的一個,現在已經收集所有學生對班主任的評價,為了保證隱私,不顯示學生姓名,只顯示班級,并存儲在數據庫的表中,點擊command2(讀取數據),讀取原始數據顯示在左側list1中,左側列表顯示的原始評價數據第一條表示高二(01)班有1位同學在第9項給班主任打A,依次類推,點擊command1(統計),統計出各項目的評價統計(A+B所占的百分比)。
(1)根據以下代碼可知,本程序訪問的數據庫名稱是___________
(2)完成劃線處的代碼填空:
Dim
classname(1
To
8000)
As
String'存儲原始數據中的班級名稱
Dim
selectabc(1
To
8000)
As
String'存儲原始數據選項的值
Dim
xiangmu(1
To
8000)
As
String'存儲原始數據選項的序號
Dim
n
As
Integer
Private
Sub
Command2_Click()'
從數據庫讀取數據,并且按班級名稱排序
Dim
conn
As
New
ADODB.Connection
conn.ConnectionString
=
"provider=microsoft.ace.oledb.12.0;data
source="&App.Path&"\pingjia.accdb"21·世紀
教育網
conn.Open
Dim
rs
As
New
ADODB.Recordset
Set
rs.ActiveConnection
=
conn
rs.Open
"select
from
data"
n
=
0'
記錄評價的總條數
'讀取數據,并按班級排序,代碼略
End
Sub
Private
Sub
Command1_Click()
Dim
cstart(1
To
50)
As
Integer
'存儲每個班級在數組classname中的起始位置
Dim
cend(1
To
50)
As
Integer
'存儲每個班級在數組classname中的末尾位置
Dim
k
As
Integer
'存儲班級數量
Dim
testall(1
To
20)
As
Integer
'存儲每一項總選擇人數,例如testall(1)里存儲這評價項目1里的總人數,testc(1)里存儲評價項目1里選C的人數
Dim
testc(1
To
20)
As
Integer
'存儲每一題(項)選c的人數
'
確定每個班級的起止位置,存儲到cstart數組和cend數組
cstart(1)
=
1
temp
=
classname(1)
k
=
1
For
i
=
1
To
n
If
classname(i)
<>
temp
Then
________________
k
=
k
+
1
cstart(k)
=
i
temp
=
classname(i)
End
If
Next
i
cend(k)
=
n
For
i
=
1
To
k
'每個班級分別統計評價項目
_________________
For
q
=
1
To
20
'對testall和testc數組初始化,
testall(q)
=
0
testc(q)
=
0
Next
q
For
j
=
cstart(i)
To
cend(i)
'對第i個班級進行統計
testall(xiangmu(j))
=
testall(xiangmu(j))
+
121世紀教育網版權所有
If
selectabc(j)
=
"C"
Then
_________________21
cnjy
com
Next
j
For
p
=
1
To
20
'統計完成后輸出這個班級的20個項目的
A+B所占百分比
s
=
s
&""&Str(Round((testall(p)
-
testc(p))
/
testall(p)
100,
1))
Next
p
List2.AddItem
s
Next
i
End
Sub
21世紀教育網
www.21cnjy.com
精品試卷·第
2

(共
2
頁)
21世紀教育網(www.21cnjy.com)中小學教育資源及組卷應用平臺
4.4.4循環控制的應用-粵教版(2019)高中信息技術必修一練習
學校:___________姓名:___________班級:___________考號:___________
一、選擇題
1.有如下
VB
程序段:
For
i
=
1
To
Len(Text1.Text)
c
=
Mid(Text1.Text,
i,
1)
If
c
>=
"0"
And
c
<=
"9"
Then
x
=
Val(c)
a((x
+
1)
Mod
10)
=
a((x
+
1)
Mod
10)
+
1
End
If
Next
i
s
=
""
For
i
=
0
To
9
s
=
s
&
a(i)
Next
i
Text2.Text
=
s
數組元素
a(0)

a(9)
的值均為0,執行該程序段后,文本框Text2
顯示的內容為“1302000100”。則文本框
Text1
中輸入的內容可能是(

A.2020-6-09
B.2020-02-28
C.2020-6-01
D.2019-01-07
【答案】A
【解析】
【分析】
【詳解】
本題考查VB程序段。該VB程序段對Text1中的數字字符進行桶排序,對數字x的排序規則為a((x+1)Mod10)=a((x+1)Mod10)+1。最后在文本框Text2依次輸出a(0)~a(9)的值,從輸出結果1302000100知,文本框Text1中含有1個9,3個0,2個2,1個6,不包含其余數字,四個選項中,只有A符合要求。
21教育網
2.有如下
VB
程序段:
a(1)
=
1:
a(2)
=
1:b(1)
=
1:
b(2)
=
2
For
i
=
3
To
5
a(i)
=
a(i
-
1)
+
a(i
-
2)
b(i)
=
b(i
-
1)
+
a(i)
Next
i
執行該程序段后,數組元素
b(5)的值為


A.5
B.8
C.12
D.15
【答案】C
【解析】
【分析】
【詳解】
本題考查VB程序段。i=3時,a(3)=2,b(3)=4。i=4時,a(4)=3,b(4)=7。i=5時,a(5)=5,b(5)=12。故本題選C。
3.有如下
VB
程序段:
Dim
n
As
Integer
Dim
sum
As
Integer
Dim
i
As
Integer
Function
fx(i
As
Integer)
as
Integer
If
i
=
1
Then
fx
=
5
Else
fx
=
5
2
^
(i
-
1)
+
fx(i
-
1)
End
if
End
Function
Private
Sub
Command1_Click()
n
=
Val(Text1.Text):
sum
=
0
For
i
=
1
To
n
sum
=
sum
+
fx(i)
Next
i
Label1.Caption
=
Str(sum)
End
Sub
若在
Text1
中輸入4,單擊
Command1,則
Label1
中顯示的內容為(

A.55
B.75
C.80
D.130
【答案】D
【解析】
【分析】
【詳解】
本題考查對遞歸算法的掌握。遞歸即調用自身函數在函數中,每次循環調用5
2^(i-1)+f(i-1),當i為1時,直接返回5,作為遞歸邊界。i等于4,則第一次計算f函數得到f(4)=40+f(3),得到f(3)=20+f(2),再次計算f(2)得到
f(2)=15,因此f(1)=5,f(2)=15,f(3)=35,f(4)=75,四個數累加為130。故選D。
4.有如下VB程序段:
Dim
d(1
to
5)as
integer,i
as
integer
Dim
flag
as
Boolean,j
as
integer
‘給數組元素d(1)至d(5)賦初值為1,代碼略
Randomize
For
i=1
to
5
J
=
l:flag
=
True
d(i)
=
int(Rnd
9)
Do
while
j<
=i-1
and
flag
=
True
d(i)
=
int(Rnd
5+1)
If
d(i)
=
d(j)
then
i=i-l:flag
=
False
j
=
j+1
Loop
Next
i
運行程序后,數組中的數據值可能是(

A.1
3
4
5
6
B.3
5
4
1
1
C.8
3
1
2
5
D.1
2
6
2
1
【答案】C
【解析】
【詳解】
本題考查的是VB綜合應用。For循環的作用控制產生d(i)的次數,由d(i)
=
int(Rnd
9)及while
j<
=i-1,可知第一個元素的取值范圍是[0,8],每次Do循環j的值從1到i-1,每次隨機產生一個整數d(i),一方面d(i)的范圍是[1,5],另一方面,每次產生的隨機數與前面一個不重復,否則重新產生。故可以排除選項ABD,選項C正確。
5.有如下VB程序段:
a="10001":b=0:t=0
For
i=1
To
Len(a)
c=
Mid(a,
i,
1)
If
c="0"
Then
t
=
t
-1
Else
t
=
t
+1
If
t
<
0
Then
b
=
b
2
Else
b
=
b
2+1
Next
i
執行該程序段后,變量b的值為(

A.15
B.17
C.20
D.24
【答案】D
【解析】
【分析】
【詳解】
本題考查VB程序段。
i
1
2
3
4
5
c
1
0
0
0
1
t
1
0
-1
-2
-1
b
1
3
6
12
24
故最終b=24,本題選D。
6.有如下VB程序段:
b=0
For
a=1
To
10
b=a+b
a=a+3
Next
a
c=a+b
執行該程序段后,變量c的值為(

A.15
B.22
C.28
D.32
【答案】C
【解析】
【詳解】
本題考查VB循環語句。第一次循環,a=1,b=1,a=4,執行next
a后,a=5。第二次循環,a=5,b=6,a=8,執行next
a后,a=9。第三次循環,a=9,b=15,a=12,執行next
a后,a=13。c=a+b=15+13=28,故本題選C。
7.有如下VB程序段:
n
=
Val(Text1.Text)
i
=
1
Do
While
n
>
0
num
=
n
Mod
16
If
num
>=
0
And
num
<=
9
Then
Text2.Text
=
Chr(Asc("0")
+
num)
+
Text2.Text
Else
Text2.Text
=
Chr(Asc("A")
+
num
-
10)
+
Text2.Textwww.21-cn-jy.com
End
If
n
=
n
\
16
i
=
i
+
1
Loop
執行該程序段,在文本框Text1中輸入420,則文本框Text2中顯示的內容的是(

A.4A
B.A4
C.1A4
D.4A1
【答案】C
【解析】
【分析】
【詳解】
本題考查循環語句,選擇語句。
num
4
10
1
n
420
26
1
Text2.Text
4
A4
1A4
最后可知,選項C為正確選項。
8.有如下VB程序段:
For
i=2
to
5
For
j=i
to
5
If
j
mod
i=0
then
a(j)=a(j)+1
Next
j
Next
i
For
i=1
to
5
If
a
(i)<>1
then
s=str(i)+s
Next
i
若數組a
的初始值都為0,則運行該程序段后,s的值為(

A.2
3
5
B.1
4
C.5
3
2
D.4
1
【答案】D
【解析】
【詳解】
本題考查循環語句。i=2,j=2
to
5。a(2)=1,a(4)=1。i=3,j=3
to
5,a(3)=1。i=4,j=4
to
5,a(4)=2。i=5,a(5)=1。綜上,a(1)=0,a(2)=1,a(3)=1,a(4)=2,a(5)=1。故s的值為41,本題選D?!緛碓矗?1·世紀·教育·網】
9.有如下VB程序段:
For
i
=
1
To
6
a(i)
=
Int(Rnd()
10)
+
1
If
a(i)
Mod
2
=
i
Mod
2
Then
a(i)
=
a(i)
+
1
Else
a(i)
=
a(i)
Mod
2
End
If
Next
i
執行該程序段后,在下列選項中,a(1)~a(6)各元素可能的值是(

A.0,1,1,0,0,1
B.0,5,6,6,10,9
C.2,3,6,7,8,11
D.2,1,8,3,12,5
【答案】C
【解析】
【詳解】
本題考查VB程序綜合能力,循環語句,選擇語句。外循環For
i
=
1
To
6,循環總共執行六次。
根據a(i)
=
Int(Rnd()
10)
+
1,a(i)數組的初值范圍應該是[1,10],而在后面的語句中有
a(i)
=
a(i)
+
1,故a(i)的最大值應該不會超過11,故先將選項D排除。再根據判斷If
a(i)
Mod
2
=
i
Mod
2
Then,若a(i)的奇偶性和i相同,則
a(i)
=
a(i)
+
1,否則a(i)
=
a(i)
Mod
2。不妨分類討論,當i=1,3,5的時候,若a(i)是奇數,則a(i)
=
a(i)
+
1變為偶數,否則執行a(i)
=
a(i)
Mod
2,則a(i)=0。所以第1,3,5項是偶數或者0,根據這個可將A排除。再根據i=2,4,6時,a(i)是奇數或者a(i)=1,結合判斷可將B排除。故本題最終C是正確選項。
21·世紀
教育網
10.有如下
VB
程序段:
Private
Sub
Command1_Click()
Dim
a(1
To
6)
As
Integer,
i
As
Integer
For
i
=
1
To
6
a(i)
=
Int(Rnd
5)
2
+
1
Next
i
For
i
=
2
To
6
Step
2
a(i)
=
cha(a(i
-1),
a(i))
Next
i
End
Sub
Function
cha(x
As
Integer,
y
As
Integer)
As
Integer
Dim
t
As
Integer
If
x
<
y
Then
t=x:
x
=
y:
y
=
t
cha
=
y
Else
cha
=
x
-1
End
If
End
Function
執行該程序段后,在下列選項中,a(1)~a(6)各元素值可能的是(

A.8,9,3,2,5,1
B.7,6,5,5,3,1
C.9,3,5,4,4,3
D.7,3,1,0,5,4
【答案】D
【解析】
【詳解】
本題考查VB程序段。根據第一個循環內a(i)=Int(Rnd
5)
2+1,可知,a數組是[1,9]中的奇數。又根據第二個循環可知i=2,4,6,又a(i)=cha(a(i-1),a(i)),兩種情況,若a(i-1)=a(i),則a(i)=a(i-1)-1,會出現a(i-1)>a(i),綜合兩種情況,必定有a(i-1)>a(i)。A中8,9不會出現,B中5,5不會出現,C中4,3不會出現,只能選D。
11.字符串旋轉。若整型變量
s、t、c
的值分別為
3、9、4,則下列程序執行后
str1
的值為(

str1
=
"go
it
for!"
str2
=
Mid(str1,
s,
t
-
s
+
1)
len1
=
Len(str1)
:
len2
=
Len(str2)
c
=
c
Mod
len2
For
i
=
1
To
c
str2
=
Mid(str2,
len2,
1)
+
Mid(str2,
1,
len2
-
1)
2·1·c·n·j·y
Next
i
str1
=
Mid(str1,
1,
s
-
1)
+
str2
+
Mid(str1,
t
+
1,
len1
-
t)
A.go
for
it!
B.for!
go
it
C.for
it
go!
D.it
for
go!
【答案】A
【解析】
【分析】
【詳解】
本題考查VB程序段。
i
0
1
2
3
4
Str2
it
fo
r
it
fo
or
it
f
for
it
for
it(第一個字符為空格)
Str1
go
for
it!
故本題選A。
12.有如下VB程序段:
For
i=1
to
3
For
j=1
to
5-i
If
a(j)>a(j+1)
Then
t=a(j)
:
a(j)=a(j+1)
:
a(j+1)=t
End
If
Next
j
Text1.Text
=
Str(a(i))+Text1.Text
Next
i
數組元素a(1)到a(5)的值依次為“2,9,7,8,5”。若該程序段執行后,文本框Text1顯示的內容是(
)21·cn·jy·com
A.2
5
7
B.9
8
7
C.2
7
7
D.7
7
2
【答案】D
【解析】
【詳解】
本題考查冒泡排序。根據外循環可知,循環執行3趟,根據內循環可知,排序方向為從上往下,結合If
a(j)>a(j+1)
Then可知,將數值更大的往下換,形成升序排序。i=1時,a(1)=2,i=2時,a(2)=7,i=3時,a(3)=7。故最終text1中為772。本題選D。www-2-1-cnjy-com
13.字符串s1中保存了一個單詞,字符串s2中保存了一句以空格結尾的句子,字符串s1和s2均由小寫字母組成且s2中各個單詞之間僅用空格隔開,下列程序能夠統計單詞s1在句子s2中出現的次數:【出處:21教育名師】
i=1:j=1:cnt=0
Do
While
j<=
Len(s2)
If
Mid(s1,i,1)<>
Mid(s2,j,1)Then
Else
Do
While
i<=lens
and
j<=lens2
If
Mid(s1,
i,
1)
=Mid(s2,
j,
1)Then
Else
End
If
Loop
lf
i=len(s1)+1
And
Mid(s2,j,1)=""then
cnt=
cnt+1
End
If
i=1
End
If
Loop
方框中的代碼分別是:①i=1:j=j+1
②i=i+1:j=j+1
③j=j+1
代碼從上到下正確的順序是()
A.①②③
B.③②①
C.③①②
D.②①③
【答案】B
【解析】
【詳解】
本題考查VB程序段。第一空,當If
Mid(s1,i,1)<>
Mid(s2,j,1)Then成立時,那么j變量向后移動一個位置,重新開始判斷,故填入j=j+1。第二空,當
If
Mid(s1,
i,
1)
=Mid(s2,
j,
1)Then成立時,i和j都往后移動,故填入i=i+1:j=j+1。第三空,表示i回到s1的起始位置,重新檢測,故填入i=1:j=j+1。結合上述分析,本題選B。
二、操作題
14.小王設計了一個利用矩陣“翻轉法”實現矩陣逆序輸出的程序,其功能為:運行程序時,在文本框
Text1
中輸入矩陣大小n,點擊“產生矩陣”按鈕
Command1,在列表框
List1
中顯示一個
n×n
的矩陣,該矩陣數據為隨機兩位正奇數。點擊“翻轉矩陣”按鈕
Command2,該矩陣翻轉(水平翻轉和垂直翻轉均要實現)后顯示在列表框
List2
中,再點一次“翻轉矩陣”按鈕
Command2,列表框
List2
中顯示的矩陣被還原為初始狀態。程序運行界面如圖所示。
實現上述功能的
VB
程序如下,請回答下列問題:
(1)在上圖的程序運行界面基礎上,再連續兩次單擊
Command2
按鈕,則列表框
List2
中第一行顯示的內容是____________________。
(2)實現此程序的代碼如下,請完成程序填空。
Dim
n
As
Integer
Dim
L
As
String
Dim
i
as
Integer
Dim
j
as
Integer
Dim
a(1
To
100)
As
Integer
Dim
b(1
To
100)
As
Integer
Private
Sub
Command1_Click()
n
=
Val(Text1.Text)
Randomize
For
i
=
1
To
n
n
a(i)
=

+
1
Next
i
For
i
=
1
To
n
L
=
""
For
j
=
1
To
n
L
=
L
+
"
"
+
Str(a((i
-
1)
n
+
j))
Next
j
List1.AddItem
L
Next
i
End
Sub
Private
Sub
Command2_Click()
List2.Clear
For
i
=
1
To
n
L
=
""
For
j
=
1
To
n
b((i
-
1)
n
+
j)
=

L
=
L
+
"
"
+
Str(b((i
-
1)
n
+
j))
Next
j
List2.AddItem
L
Next
i
For
i
=
1
To
n
n
a(i)
=

Next
i
End
Sub
【答案】(1)99
43
33
49
75
(2)
①int(rnd
45+5)
2
②a((n-i+1)
n-j+1)
③b(i)
【解析】
【分析】
【詳解】
本題考查VB綜合能力。(1)在圖示的程序運行界面基礎上,單擊command2按鈕一次,回到初始狀態,再單擊一次,實現翻轉,結果為圖示list2的第一行。(2)①兩位奇數范圍是11到99,兩位奇數是兩位偶數加1,兩位偶然范圍是10到98,先求出5到49的整數,乘以2得到兩位偶數,加1得到兩位奇數。②水平翻轉和垂直翻轉均要實現,行與行上下換,列與列左右換,控制行號是i變量,n-i+1為翻轉后的的行號,(n-i+1)
n算出翻轉后每一行元素的首元素坐標,首元素坐標-j+1為每一行后面元素的坐標。③題目要求再點一次“翻轉矩陣”按鈕command2,列表框list2中顯示的矩陣被還原為初始狀態,所以要把存放翻轉后矩陣的數據b(i)賦值給a(i)繼續翻轉。
15.小李編寫
VB
程序,功能如下:單擊“產生數組”按鈕
Command1,則隨機生成
10
個取值范圍是
1~10
的正整數,分別存儲到數組
a
中,對數組
a
的元素進行升序排列,并在標簽
Label1
中顯示;
再單擊“重復數”按鈕
Command2,則在排序后的數組
a
中查找連續個數最多的一組重復數值,
若有兩組連續重復數個數一樣多,則取數值小的一組,將重復數的數組元素下標顯示在標簽Label2
中。運行界面如圖所示。
21世紀教育網版權所有
(1)已知窗體名稱為
Form1,要使程序加載時,窗體標題自動顯示為“統計重復數”,則可在___________(單選,填字母)事件過程中添加代碼:Form1.Caption
=
“統計重復數”。
A.Form_Click()
B.Form_Load()
C.Form1_Click()
D.Form1_Load()
(2)實現上述功能的程序如下,請在劃線處填寫合適代碼,使程序正常運行。
(3)程序加框處代碼有錯,請改正。
Dim
a(1
To
10)
As
Integer
Dim
n
As
Integer
Private
Sub
Command1_Click()
Dim
i
As
Integer
xkw,
j
As
Integer,
k
As
Integer,
temp
As
Integer
Dim
s
As
String
Randomize
n
=
10
For
i
=
1
To
n
a(i)
=
Int(Rnd
10)
+
1
Next
i
For
i
=
1
To
n
-
1
k
=
i
For
j
=
i
+
1
To
n
If
a(j)
<
a(k)
Then

Next
j
If
k
<>
i
Then
temp
=
a(i):
a(i)
=
a(k):
a(k)
=
temp
End
If
Next
i
s
=
""
For
i
=
1
To
n
s
=
s
+
Str(a(i))
If
i
<
n
Then
s
=
s
+
","
Next
i
Label1.Caption
=
s
End
Sub
Private
Sub
Command2_Click()
Dim
i
As
Integer,
j
As
Integer,
k
As
Integer
Dim
length
As
Integer,
origin
As
Integer
Dim
s
As
String
k
=
1:origin=1:length
=
1
For
i
=
2
To
n
If
a(i)
=
a(i
-
1)
Then
k
=
k
+
1
If
k
>
length
Then
length
=
k
origin
=

End
If
Else
k
=
1
End
If
Next
i
s
=
""
For
j
=
origin
To
s
=
s
+
Str(j)
Next
j
Label2.Caption
=
s
End
Sub
【答案】(1)B
(2)①
k
=
j

i-length+1

i
-
k
+
1
(3)origin
+
length
-
1
【解析】
【分析】
【詳解】
本題考查VB綜合能力。(1)窗體載入事件的考查,窗體載入事件處理過程為form_load(),對象名不會隨著窗體名的改變而改變。(2)①本題主要考查排序算法知識,根據代碼分析,此處要實現的用k變量記錄最小數的位置,實現a(k)和a(i)的數值交換功能,因此答案是k=j,這樣,數組成員a(j)中的最小值下標記錄在k變量中。②分析代碼可知,此處實現重復數起始位置的計算,重復數起始位置為當前數組元素位置減去重復數長度加1。答案為i-length+1或i-k+1(3)此處判斷重復數的終止位置,長度=終止位置-起始位置+1,因此終止位置=起始位置+長度-1,即為origin+length-1或length+origin-1。
16.小章想將a數組中n個元素排列成合唱隊列形態,具體方法如下:
①如果n是奇數,選出所有數據中最大元素,將其放在a數組正中間位置。
②從剩下待處理數據中選出最大的兩個元素,同時將較大元素放在已處理數據段的右側,
較小元素放在已處理數據段的左側。
③反復執行操作②,直到所有數據處理完畢。
按上述要求,小章編寫一個
VB
程序,功能如下:
在文本框
Text1
中輸入
n,單擊“生成”按鈕
Command1,并在文本框
List1
中顯示排序前
數據;單擊“排序”21世紀教育網按鈕
Command2,在列表框
List2
中輸出處理后的結果。程序運行界面如下圖所示。
(1)下列哪個選項,可以將窗體Form1標題改為:“生成合唱隊列”_____(單選,填字
母:A.Form.Caption="生成合唱隊列"/
B.Label1.Caption
="生成合唱隊列"/
C.Form1.Caption="生成合唱隊列")
(2)實現上述功能的VB程序如下,請在劃線處①②③填入合適代碼。
①________________
②________________
③________________
(3)程序加框處代碼有錯,請改正。
改正:__________________
Dim
a(1
To
100)
As
Integer
Dim
n
As
Integer
Private
Sub
Command1_Click()
'在文本框
Text1
中輸入
n(n<=100)
'排序前數據存儲在數組
a
中,并在文本框
List1
中顯示
'代碼略
End
Sub
Private
Sub
Command2_Click()
Dim
i
As
Integer,
j
As
Integer,
t
As
Integer
Dim
pMax1
As
Integer,
pMax2
As
Integer
pMax1
=
n
\
2
+
1:
pMax2
=
n
\
2
If

Then
For
i
=
1
To
n
If
a(i)
>
a(pMax1)
Then
t
=
a(pMax1):
a(pMax1)
=
a(i):
a(i)
=
t
Next
i
pMax1
=
pMax1
+
1
End
If
For
i
=
1
To
n
\
2
If

Then
t
=
a(pMax1):
a(pMax1)
=
a(pMax2):
a(pMax2)
=
t
j
=
pMax1
Mod
n
+
1
Do
While
j
<>
pMax2
If
a(j)
>
a(pMax1)
Then
t
=
a(pMax1):
a(pMax1)
=
a(j):
a(j)
=
t
t
=
a(pMax2):
a(pMax2)
=
a(j):
a(j)
=
t
t
=
a(pMax2):
a(pMax2)
=
a(j):
a(j)
=
t
End
If

Loop
pMax1
=
pMax1
+
1
pMax2
=
pMax2
-
1
Next
i
For
i
=
1
To
n
List2.AddItem
Str(a(i))
Next
i
End
Sub
【答案】C

n
Mod
2
=
1

n
mod
2
<>
0

a(pMax1)
<
a(pMax2)

j
=
j
Mod
n
+
1
ElseIf
a(j)
>
a(pMax2)
Then
【解析】
【詳解】
本題考查VB綜合能力。(1)將窗體Form1標題改為“生成合唱隊列”,語句為Form1.Caption="生成合唱隊列"。(2)根據題干,如果n是奇數,選出所有數據中最大元素,將其放在a數組正中間位置。故填入n
Mod
2=1。(3)挑選出最大的數放入pmax1中,故需要先比較pmax1和pmax2的大小,填入a(pMax1)Mod
n+1。(5)改錯語句判斷是在pmax1和pmax2之間,故改為ElseIf
a(j)
>
a(pMax2)
Then。
17.隨機產生n個三位數,并對這些數進行索引排序。從文本框Text1中輸入n的值,在列表List1中輸出原始數據,列表框List2中輸出升序排序結果。例如,原始數據140,472,876,811,436,965,884,150數據關系如下表所示:
原始數組a(i)
140
472
876
811
436
965
884
150
初始化索引數組index(i)
1
2
3
4
5
6
7
8
排序后的索引數組index(i)
1
4
6
5
3
8
7
2
排序后結果
140
150
436
472
811
876
884
965
(1)實現上述功能的VB程序如下,運行結果如圖所示,請在劃線處填入合適的代碼。
Private
Sub
Command1_Click()
Dim
i
As
Integer,
j
As
Integer,
n
As
Integer
Dim
a(1
To
100),
index(1
To
100)
As
Integer,
b(1
To
100)
As
Integer
n
=
Val(Text1.Text)
List1.Clear:
List2.Clear
For
i
=
1
To
n
__________
List1.AddItem
Str(a(i))
Next
i
'索引排序
For
i
=
1
To
n
index(i)
=
i
For
j
=
1
To
i
-
1
If
a(i)
<
a(j)
Then
index(i)
=
index(i)
-
1:_____21
cnjy
com
Next
j
Next
i
For
i
=
1
To
n
_____
Next
i
For
i
=
1
To
n
List2.AddItem
Str(b(i))
Next
i
End
Sub
(2)加框處代碼改為
index(i)=1
For
j=1
to
n
If
a(i)>a(j)
then
index(i)=index(i)+1
Next
j
能否實現排序?_______(填:能/不能)
【答案】①a(i)=100+int(rnd
900)
②index(j)=index(j)+1
③b(index(i))=a(i)
不能
【解析】
【詳解】
本題考查索引排序。(1)隨機產生三位數,故填入a(i)=100+int(rnd
900)。(2)a(i)18.小董編寫了一個有關“篩選操作”的VB程序,實現如下功能:在文本框Text1中顯示一組隨機生成個位數為“9”的兩位數(原始數據),在文本框Text2中輸入篩選個數,單擊“操作”按鈕Command1后,在文本框Text3中按降序顯示所篩選個數的不重復最大數據(以逗號分隔
并以數據結尾),若在文本框Text2中輸入的數大于原始數據中不相同數的個數,則在文本框Text3中顯示“篩選的個數太大,請重新輸入!”。程序運行界面如圖所示。
(1)如圖所示,該VB程序的窗體中共有
類對象(填數字)。
(2)實現上述功能的VB程序如下,請在劃線處填入合適的代碼。
(3)程序中加框處代碼有錯,請改正。
Const?n?=?10
Dim?d(n)?As?Integer,?c?As?Integer
Private?Sub?Form_Load()
???
Dim?i?As?Integer,?j?As?Integer,?f?As?Boolean,?s?As?String
????
Randomize
????
c?=?n
???
?
For?i?=?1?To?n
????????
f?=?False
?????????
d(i)?=?

??
?'
隨機生成個位數為“9”的兩位數21cnjy.com
?????????
For?j?=?1?To?i?-?1
????????????
If?

?Then?f?=?True
?????????
Next?j
?????????
If?f?Then?c?=?c?-?1
????
Next?i
'原始數據在文本框Text1中顯示。代碼略
End?Sub
Private?Sub?Command1_Click()
Dim?i?As?Integer,?j?As?Integer,?k?As?Integer,?m?As?Integer
Dim
cnt?As?Integer,t?As?String,?s?As?String
d(0)?=?100
cnt?=?Val(Text2.Text)
????
If?cnt?>?c?Then
Text3.Text?=?"輸入篩選的個數太大,請重新輸入!"
???
Exit?Sub??????'Exit?Sub表示退出過程
End?If
For?i?=?1?To?cnt
?
k?=?i
For?j?=?i?+?1?To?n
If?d(j)?Next?j
??????If?k?<>?i?Then
????????????t?=?d(i):?d(i)?=?d(k):?d(k)?=?t
??????End?If
Next?i
For?i?=?1?To?cnt
??????s?=?s?+?Str(d(i))?+?","
Next?i
Text3.Text?=?

End?Sub
【答案】(1)3
(2)①
Int(Rnd
9)
10
+
19或者Int(Rnd
9
+
1)
10
+
9

d(i)
=
d(j)

Mid(s,
1,
Len(s)
-
1)
或Mid(s,
1,
Len(s)
-
2)
(3)d(k)
<
d(j)
Or
d(k)
>=
d(i
-
1)
【解析】
【詳解】
本題考查VB綜合能力。(1)該VB程序的窗體中共有3類對象,標簽,文本框和按鈕。(2)代碼第一空,隨機生成個位數為9的兩位數,故填入Int(Rnd
9)
10+19。(2)代碼第二空,判斷當前產生的數是否重復,故填入d(i)=d(j)。(3)代碼第三空將最后的逗號去掉,填入Mid(s,1,Len(s)-1)。(4)改錯語句要注意不能和之前有重復,或者大于之前的數,在剩余的數中尋找最大的即可。故填入d(k)Or
d(k)>=d(i-1)。【版權所有:21教育】
三、簡答題
19.在“抗擊疫情,‘宅’出精彩”征文活動中,每位選手可以提交一篇作品?;顒右曰ピu的形式展開:每位選手對m篇作品進行打分(本人作品回避),方法如下:

用1-n數字代表n個作品,打亂順序后分配給n個選手。分配方案保存在數組a中,如圖a存儲了兩組分配方案(n=5)。在第一個分配方案中把4號作品分配給1號參賽者,1號作品分配給2號參賽者(選手編號與序號錯開)……。
4
1
5
2
3
a(1)~a(n)中存儲第一個分配方案
2
3
4
5
1
a(n+1)~a(2
n)中存儲第二個分配方案
↑第i列中的作品拿給i號參賽者打分
圖a
②分配方案的形成方法:
將1~n之間的隨機數字依次放到第1個位置、第2個位置……,隨機數不能與位置號相同,并且要防止分配沖突,如前三個分配序號是“2
3
4”,那么在第4位上只能放“5”(如放“1”會導致第5個位置沒有符合要求的數字,因此位置n-1需要判斷數“n”是否已經分配,如果未分配,位置n-1放置數“n”),最終方案“2
3
4
5
1”。
③評m個作品需要m個分配方案。方案間要避免同一個人拿到重復的作品。如第16題圖a第3行上的數據“5
1
2
3
4”不符合要求,因為會使第2號選手重復拿到1號作品。
小明依據上述方法設計了VB程序,功能如下:在文本框Text1和Text2分別輸入參賽人數和每人打分的作品數量,單擊“分配”按鈕Command1,在列表框List1中輸出結果。程序運行效果如圖b所示。
請回答下列問題:
(1)n=5,m=3,a(1)~a(10)中的數據如圖a所示,a(11)~a(15)的數據可能是
(單選,填字母:A.5
4
3
1
2/B.5
4
1
3
2/C.3
4
5
1
2)
(2)請在劃線處填入合適的代碼。
Dim
n
As
Integer
'總人數/總作品數
Dim
m
As
Integer
'每人分配篇數
Dim
a(1
To
500)
As
Integer
'數組a大小滿足處理要求
Dim
c(1
To
100)
As
Integer
'數組c大小滿足處理要求
Private
Sub
Command1_Click()
Dim
i
As
Integer,
j
As
Integer,
k
As
Integer
n
=
Val(Text1.Text):
m
=
Val(Text2.Text)
Randomize
i
=
1
Do
While
i
<=
m
For
j
=
1
To
n
c(j)
=
0
'本輪分配方案中還沒有數字j,
c(j)=0,否則c(j)=1
Next
j
For
j
=
1
To
n
If
j
=
n
-
1
And
c(n)
=
0
Then

Else
k
=
r(n,
j)
End
If
a((i
-
1)
n
+
j)
=
k
'分配數字k到當前方案的第j個位置上
c(k)
=
1
Next
j
If

Then
i
=
i
+
1
【來源:21cnj
y.co
m】
Loop
s
=
""
For
i
=
1
To
n
s
=
"參賽者"
&
i
&
":"
For
j
=
1
To
m
s
=
s
+
Str(a((j
-
1)
n
+
i))+
","
Next
j
List1.AddItem
s
s
=
""
Next
i
End
Sub
Function
r(x
As
Integer,
y
As
Integer)
As
Integer
'生成一個取值在[1,x]之間,可以放在y位置上的隨機數,滿足條件r<>y
andc(r)=0
End
Function
Function
check(c
As
Integer)
As
Boolean
'本輪方案和前面幾次的分配方案比較,如果有人分到了重復作品,返回FALSE
Dim
p
As
Integer,f
As
Boolean
f
=
True
p
=
1
For
i
=
1
To
c
n
If

Then
f
=
False:
Exit
For
End
If
p
=
p
mod
n
+1
Next
i
check
=
f
End
Function
【答案】(1)B
(2)①k=
n
②check(i
-
1)
③a(i)
=
a(c
n
+
p)
【解析】
【詳解】
本題考查VB綜合能力,循環語句,自定義函數。(1)根據題意,評m個作品需要m個分配方案。方案間要避免同一個人拿到重復的作品。A選項,3號選手會拿到自己的作品。B選項可以。C選項,3號選手會重復拿到5號作品。故此題選B。(2)根據條件If
j
=
n
-
1
And
c(n)
=
0
Then,在第i行,第j列時,若j=n-1,并且此時
c(n)
=
0,意味著第n號作品沒有分配,而n號作品不能分給第n號選手,故n號作品只能分給n-1號選手,所以此空填入k=n。(3)
此處判斷語句判斷該方案時候符合條件,代入自定義函數中判斷,填入check(i-1)。(4)自定義函數check的作用,根據注釋語句得知,函數是讓本輪方案和前面幾次的分配方案比較,判斷是否有重復,a(c
n+p)表示當前方案中的每一個編號,要和之前的所有數據逐一比較,故填入a(i)=a(c
n+p)。
四、填空題
20.某學校要對班主任進行滿意度調查,有20個評分項(為方便程序處理,評分項具體的名稱本題中不顯示,僅以序號代替),每個評分項學生可以打A、B、C
三個等級中的一個,現在已經收集所有學生對班主任的評價,為了保證隱私,不顯示學生姓名,只顯示班級,并存儲在數據庫的表中,點擊command2(讀取數據),讀取原始數據顯示在左側list1中,左側列表顯示的原始評價數據第一條表示高二(01)班有1位同學在第9項給班主任打A,依次類推,點擊command1(統計),統計出各項目的評價統計(A+B所占的百分比)。
(1)根據以下代碼可知,本程序訪問的數據庫名稱是___________
(2)完成劃線處的代碼填空:
Dim
classname(1
To
8000)
As
String'存儲原始數據中的班級名稱
Dim
selectabc(1
To
8000)
As
String'存儲原始數據選項的值
Dim
xiangmu(1
To
8000)
As
String'存儲原始數據選項的序號
Dim
n
As
Integer
Private
Sub
Command2_Click()'
從數據庫讀取數據,并且按班級名稱排序
Dim
conn
As
New
ADODB.Connection
conn.ConnectionString
=
"provider=microsoft.ace.oledb.12.0;data
source="&App.Path&"\pingjia.accdb"2-1-c-n-j-y
conn.Open
Dim
rs
As
New
ADODB.Recordset
Set
rs.ActiveConnection
=
conn
rs.Open
"select
from
data"
n
=
0'
記錄評價的總條數
'讀取數據,并按班級排序,代碼略
End
Sub
Private
Sub
Command1_Click()
Dim
cstart(1
To
50)
As
Integer
'存儲每個班級在數組classname中的起始位置
Dim
cend(1
To
50)
As
Integer
'存儲每個班級在數組classname中的末尾位置
Dim
k
As
Integer
'存儲班級數量
Dim
testall(1
To
20)
As
Integer
'存儲每一項總選擇人數,例如testall(1)里存儲這評價項目1里的總人數,testc(1)里存儲評價項目1里選C的人數
Dim
testc(1
To
20)
As
Integer
'存儲每一題(項)選c的人數
'
確定每個班級的起止位置,存儲到cstart數組和cend數組
cstart(1)
=
1
temp
=
classname(1)
k
=
1
For
i
=
1
To
n
If
classname(i)
<>
temp
Then
________________
k
=
k
+
1
cstart(k)
=
i
temp
=
classname(i)
End
If
Next
i
cend(k)
=
n
For
i
=
1
To
k
'每個班級分別統計評價項目
_________________
For
q
=
1
To
20
'對testall和testc數組初始化,
testall(q)
=
0
testc(q)
=
0
Next
q
For
j
=
cstart(i)
To
cend(i)
'對第i個班級進行統計
testall(xiangmu(j))
=
testall(xiangmu(j))
+
121
cnjy
com
If
selectabc(j)
=
"C"
Then
_________________
Next
j
For
p
=
1
To
20
'統計完成后輸出這個班級的20個項目的
A+B所占百分比
s
=
s
&""&Str(Round((testall(p)
-
testc(p))
/
testall(p)
100,
1))
Next
p
List2.AddItem
s
Next
i
End
Sub
【答案】pingjia.accdb
cend(k)=i-1
s=classname(cstart(i))或s=classname(cend(i))
testc(xiangmu(j))=
testc(xiangmu(j))+1
【解析】
【分析】
【詳解】
本題考查VB程序綜合能力,包括題干閱讀,VB鏈接數據庫,循環嵌套,數組嵌套等。
第(1)題根據conn.ConnectionString
=
"provider=microsoft.ace.oledb.12.0;data
source="&App.Path&"\pingjia.accdb"得知,本程序訪問的數據庫名稱是pingjia.accdb。21教育名師原創作品
第(2)題第一空,根據代碼最上方注釋語句,該處循環功能是確定每個班級的起止位置,存儲到cstart數組和cend數組,當classname(i)
<>
temp成立時,表示當前的班級temp和此時第i項的班級classname(i)已經不同,換話句話說已經到下一個班級了。因而k
=
k
+
1,cstart(k)
=
i,下一個班級的起始位置存放于cstart(k)中。同樣的當前班級的結束位置需要記錄,所以在第一空記錄第k個班級的結束位置,代碼為cend(k)=i-1。第二空,在整個For
i
=
1
To
k……next
i的循環中,是對每個班級分別統計評價項目,仔細閱讀整個結構不難發現在For
p
=
1
To
20……next
p循環中,變量s在進行一次輸出后未能重置,如不重置將會一直疊加。需要將s重置,結合題干圖中list2每一行內容,可知變量s在一開始需要放入班級名稱,因而第二空代碼為:s=classname(cstart(i))或s=classname(cend(i))。第三空,根據判斷語句If
selectabc(j)
=
"C"
Then,后續填入的是該項目評價為C的人數數量+1,因而代碼為testc(xiangmu(j))=
testc(xiangmu(j))+1
21世紀教育網
www.21cnjy.com
精品試卷·第
2

(共
2
頁)
21世紀教育網(www.21cnjy.com)

展開更多......

收起↑

資源列表

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 永清县| 扶风县| 无锡市| 唐海县| 高邮市| 息烽县| 兴宁市| 郧西县| 闽清县| 平昌县| 东乡族自治县| 青神县| 景洪市| 兖州市| 卢龙县| 理塘县| 精河县| 临颍县| 临高县| 吉木乃县| 涟水县| 福州市| 安化县| 绥宁县| 贡觉县| 青海省| 遵义县| 开平市| 临沭县| 营口市| 徐汇区| 聂荣县| 苏州市| 石河子市| 巴南区| 沙雅县| 巴里| 万安县| 岢岚县| 土默特左旗| 昭通市|