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

2021版信息技術新導學大一輪復習浙江專用(課件+精練):五 算法與VB語言基礎 (共2份打包)

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

2021版信息技術新導學大一輪復習浙江專用(課件+精練):五 算法與VB語言基礎 (共2份打包)

資源簡介

(共124張PPT)
考點一????算法的表示——流程圖
考向基礎
一、算法及算法的特征
1.算法的概念
算法就是對解題方法的精確而完整的描述,即解決問題的方法和步驟。
2.算法的特征
(1)有窮性。一個算法必須保證它的執行步驟是有限的,即它是能終止的。
(2)確定性。算法中的每個步驟必須有確切的含義,不應當模棱兩可。
(3)可行性。算法中的每一個步驟都要足夠簡單,是實際能運行的,而且能
在有限的時間內完成。
(4)有0個或多個輸入。初始數據可從外界輸入,也可含于算法之中。
(5)有一個或多個輸出。算法一定要有結果且以一定方式輸出。
二、算法的三種表示方法
1.自然語言
就像寫文章時所列的提綱一樣,可以有序地用簡潔的自然語言加數學符號
來描述算法。用自然語言描述的算法通俗易懂,但缺乏直觀性和簡潔性,容
易產生歧義。
2.流程圖
流程圖也叫程序框圖,它是算法的一種圖形化的表示方法,與自然語言相
比,它描述的算法形象、直觀,更容易理解。最常用的流程圖構件如表所
示。
符號名稱 圖形 功能
起止框 ? 表示算法的開始和結束
輸入/輸出框 ? 表示算法的輸入/輸出操作
處理框 ? 表示算法中的各種處理操作
判斷框 ? 表示算法中的條件判斷操作
流程線 → 表示算法的執行方向
連接框 ? 表示流程圖的延續
3.偽代碼
偽代碼使用某些程序設計語言中的控制結構,來描述算法中各步驟的執行
次序和模式,使用自然語言、數學符號或其他符號,來表示計算步驟要完成
的處理或需要涉及的數據。偽代碼是介于自然語言和計算機程序語言之
間的一種算法描述,沒有嚴格的語法限制,是專業軟件開發人員描述算法的
一種常用方法。
三、順序、選擇和循環三種基本結構
1.順序結構:按指令的先后順序依次執行。
2.選擇結構:又稱分支結構,根據分支條件判斷是否成立,選擇某一條路徑中
的指令執行。
3.循環結構:首先判斷條件是否成立,如果不成立,則直接執行循環體外的指
令,如果條件成立,則執行循環體內的指令,執行完后再次判斷條件是否成
立,如果條件成立,再次執行循環體內的指令……,直至條件不成立跳出循
環體為止。
以下是三種基本結構的流程圖:
考向突破
循環結構流程圖解題技巧
1.常見考法
【考法一】流程圖執行完后,求某變量的值。
例1 某算法的部分流程圖如圖所示,執行這部分流程后,變量c的值是?
(  )
?
A.6  B.7  C.0  D.3
解析 本題考查算法流程圖。分析流程圖可知,變量c表示循環次數,45反
復減7,減到值小于等于7為止,45-6*7=3,因此是6次。當然也可以將循環過
程全部列出,也能得出正確答案,但比較費時。
答案????A
  【考法二】求循環條件執行幾次,循環體執行幾次。循環條件一般比
循環體多執行一次。
例2 某算法流程圖如圖所示,執行該算法后,變量s的值及x←x+1執行的次
數分別為?(  )
?


A.0,3  B.-5,4  C.0,4  D.-5,3
解析 本題考查循環結構流程圖。執行過程中變量變化如表所示:
因此退出循環時s=0,循環體執行了4次。
s x
第1次循環 10-1=9 1+1=2
第2次循環 9-2=7 2+1=3
第3次循環 7-3=4 3+1=4
第4次循環 4-4=0 4+1=5
答案????C
  【考法三】執行流程圖過程中,輸入變量的值,最后求結果。
例3????(2018浙江紹興柯橋高三選考模擬)某算法部分流程圖如圖所示。執
行這部分流程,依次輸入1、1、2、4、3、5、6、8、0,則輸出值是?(???? )
?


A.243568    B.46    C.112358    D.2358
解析 本題考查循環結構流程圖。執行過程中變量變化如表所示:
n a b c
第1次輸入c 0 1 1 2
第2次輸入c 2 1 2 4
第3次輸入c 3
第4次輸入c 23 2 3 5
第5次輸入c 235 3 5 6
第6次輸入c 8
第7次輸入c 2358 5 8 0
答案????D
2.解題突破口
進入循環體的前提是滿足循環條件,因此退出循環時,一定是不滿足循環條
件的狀態,利用好這一點,可以快速解題。
例4 某算法的部分流程圖如圖所示,執行這部分流程后,變量a和b的值分
別為?(  )
?
A.5和6  B.11和5  C.6和5  D.-3和-4
解析 本題主要考查循環結構流程圖。退出循環時,一定是a<=b的狀態,
只有選項A符合。
答案????A
考點二????面向對象程序設計基礎
考向基礎
1.對象、類、屬性、方法、事件、事件處理過程的概念
(1)對象:在現實世界中,我們眼睛看得見摸得著的都是對象,如一本書、一
支筆、一個西瓜、一條狗等都是對象。對象是有著狀態和行為的實體。
而在VB程序中,對象是指某個窗體、文本框、標簽、命令按鈕等控件。
(2)類:具有相同性質的對象的一種抽象,一個對象則是類的一個實例。如
窗體上有兩個對象Label1和Label2,這兩個對象都屬于Label類,是Label類
的兩個實例。
常見的控件類有:
對象名 所屬類 中文名
如Form1、Form2 Form 窗體
如Text1、Text2 TextBox 文本框
如Label1、Label2 Label 標簽
如List1、List2 ListBox 列表框
如Command1、Command2 CommandButton 命令按鈕
  (3)屬性:對象可以通過屬性來描述它的狀態。方法一:在屬性面板中
設置某個對象的各個屬性的屬性值;方法二:在程序中通過語句來設置,一
般格式為:
對象名.屬性名=屬性值
如Label1.Height=1000,可設置Label1對象的高度是1000。
常見的屬性有:
屬性名 屬性值 意義
Name 如:Command1 對象的名稱,每個控件都具有的
屬性,也是最重要的屬性
BackColor 如:&H0000FFFF& 對象的背景色
Left 如:2000 對象的左上角水平坐標
Top 如:1000 對象的左上角垂直坐標
Height 如:500 對象的高度
Width 如:1000 對象的寬度
Font 如:宋體 對象中文字的字體
Caption 如:確定 對象的標題,一般用于設置窗
體、標簽、命令按鈕
Text 如:10 設置文本框的內容,只有文本框
對象才有此屬性,一般用于輸入
輸出
Picture 如:LoadPicture("1.jpg") 設置對象中顯示的圖片,常用在
Image和PictureBox控件中
Enable 如:True 設置對象是否有效,如設置計時
器控件的開關
Interval 如:1000 計時器控件的Timer事件觸發的
時間間隔,單位為毫秒
  (4)方法:每個對象都有自己的行為,如List1.Clear是List1對象清空自身
所有的列表項,List1.AddItem a是往List1對象中添加一條項目。一般格式為:
對象名.方法名(參數)
(5)事件:事件就是發生在對象上的事情,通常是由用戶在對象上做的一種動作。
常見的事件有:
事件名 含義 說明
Load 加載 一般用于窗體對象
Click 單擊鼠標左鍵 可用于各種對象,常用于命令按鈕
DblClick 雙擊鼠標左鍵 可用于各種對象
KeyPress 在鍵盤上按鍵,通過參數
KeyAscii獲知按下了鍵盤上哪
一個鍵 一般用于文本框
Change 對象內容改變 一般用于文本框
Timer 計時器事件 一般用于計時器
  (6)事件處理過程:一個事件的發生,可以引起某個對象上的某個事件
處理過程(往往是用戶編制的一段程序)的執行,這就是面向對象程序設計
中的事件驅動概念。
例1 在Visual Basic中,要在窗體中的標簽對象Label1上顯示文字“請輸
入驗證碼:”,應改變的標簽對象屬性是?(  )
A.Width  B.Font  C.Caption  D.Top
解析 標簽對象用Caption(標題)屬性設置顯示文字。
答案????C

2.事件處理過程的代碼編寫
事件處理過程的一般格式如下:
Private Sub對象名_事件名()
  代碼段
End Sub
事件處理過程名稱為:對象名_事件名,表示在某個對象上發生某個事件時,
執行代碼段里的指令。如:
Private Sub Command1_Click()
  a=b+c
End Sub
則事件處理過程名稱為Command1_Click,即當Command1對象上發生鼠標
單擊事件時,執行指令a=b+c。
例2????在VB中,雙擊名為count的時鐘后,默認出現的事件是?(  )
A.timer1_Timer()  B.timer1_Click()
C.count_Timer()  D.count_Click()
解析 本題考查對VB事件的掌握。雙擊控件會出現對應的默認事件過程
代碼,其中事件名由對象名、下劃線、事件名組成,本題中對象名為count,
是Timer控件,Timer控件的事件名為Timer。
答案????C

3.VB程序的建立、調試和保存
(1)VB程序設計環境如圖所示:

?
 (2)VB程序設計的一般步驟
建立窗體→添加控件→修改控件的屬性→添加事件處理過程→編寫代碼
→運行測試→保存源文件→導出exe可執行程序。
(3)窗體
窗體設計即程序的界面設計,從VB界面圖中的“窗體”上可看到該程序
界面共有三個對象,分別是一個窗體、一個文本框、一個按鈕。
如果在代碼中訪問窗體中沒有的對象(第一種情況是窗體沒有該對象;第
二種情況是窗體中有該對象,但是代碼中訪問時名稱寫錯),則程序運行時
會報如下錯誤:
?
(4)工程資源管理器
從VB界面圖中的“工程資源管理器”中可看到該程序工程對象的對象名
為“工程1”,窗體對象的對象名為“Form1”。該程序只有保存以后才有
工程文件和窗體文件,文件名分別是“工程1.vbp”和“test.frm”。
?
(5)屬性面板
從VB界面圖中的“屬性面板”中可看到當前選中的控件是Cmd1,屬于
CommandButton(命令按鈕)類。該控件的對象名是Cmd1,在屬性面板中左
邊一列是該控件所具有的屬性名稱,右邊一列是對應的屬性值,可看到該控
件的“Caption”(標題)屬性設置為“計算”。
(6)程序的運行和調試
程序的界面設計、代碼編寫全部完成后,就可以運行程序來進行測試。點
擊菜單欄里的“運行”按鈕或按快捷鍵F5,可直接運行程序。如果程序中
有語法錯誤,則程序運行時會提示“編譯錯誤”,并會提示錯誤類型和錯誤
的位置,如圖所示:

?
如果程序運行正常,但是結果是錯誤的,則說明沒有語法錯誤,但是有算法
設計錯誤,則需要通過“調試”,添加變量監視,按快捷鍵F8讓指令逐條運
行,并同時觀察變量值的變化過程,找到邏輯錯誤所在。
(7)保存和導出
VB程序保存時會生成兩個重要文件,一個是工程文件,后綴名為“.vbp”,
一個是窗體文件,后綴名為“.frm”。窗體文件又稱源文件,包含了窗體的
對象屬性以及事件過程代碼。工程文件包含了窗體、模塊及添加的引
用、使用的控件等相關信息,沒有其他代碼,僅僅是工程的相關設置。
程序調試完成后,可通過菜單下的“生成工程.exe”命令,將程序編譯成可
執行程序。
考向突破
1.常考控件及其屬性和方法
控件名 屬性或方法 含義 實例
窗體(Form) Caption(屬性) 標題 Load(加載)
標簽(Label)
命令按鈕
(CommandButton) Click(鼠標單擊)
文本框(TextBox) Text(屬性) 內容
列表框(ListBox) AddItem(方法) 添加列表項
計時器(Timer) Interval(屬性) 間隔 Timer(計時事件)
Enabled(屬性) 可用
代碼 作用 說明
Label1.Caption=
"面積:" 將標簽Label1的標題設置為"面
積:" 要注意文本框沒有Caption屬性
Text1.Text="hello!" 將文本框Text1的內容設置為"
hello!" 只有文本框才有Text屬性,通過
設置文本框的Text屬性可實現
輸入輸出
Text1.Text="" 將文本框Text1清空
List1.AddItem "abc" 在列表框List1中輸出字符串
“abc” AddItem是方法,其后不能加
“=”
List1.Clear 清空列表框List1中的所有內容
Timer1.Interval=1000 表示每隔1秒啟動計時器事件 時間間隔的單位是毫秒
使用舉例:
Timer1.Enabled=True 表示開啟計時器 True表示開啟,False表示關閉
Form_Load() 窗體裝載事件 該事件在程序啟動時自動觸發,
因此程序的初始化代碼可放在
該事件處理過程中
Command1_Click 按鈕上的鼠標單擊事件
例1 編寫如下程序:
?
在設計應用程序界面時,應使用圖b所示“控件工具箱”中的 ????(填寫相
應編號)添加標簽“Label1”。要在按鈕“Command1”上顯示“計算”
字樣,可以修改“Command1”的屬性 ????的屬性值。
答案 4;Caption
例2 在設計程序界面時,要清空文本框中的顯示內容,應修改該文本框中
的 ????屬性。
答案 Text
2.事件處理過程
事件處理過程名:對象名_事件名(),如Command1_Click()。
例3 代碼“Private Sub Command1_Click()”中的Click是   ????。(單
選,填字母:A.對象名/B.屬性名/C.事件名)
解析 Command1_Click是事件處理過程名,Command1是對象名,Click是
事件名。
答案????C????
考點三????VB語言基礎
考向基礎
一、VB基本數據類型
在VB中,常用的基本數據類型有以下幾種:Integer(整數型)、Long(長整數
型)、Single(單精度實數型)、Double(雙精度實數型)、String(字符串型)、
Boolean(邏輯型)、Date(日期型)。
二、常量、變量
1.常量
常量是在程序執行過程中其值不變的存儲單元或數據。在VB中,常量有
整數常量、實數常量、字符串常量和邏輯常量這幾種類型。如整數常量1
5、20等;實數常量3.14159、-2.01等;字符串常量“VB”“15”等;邏輯常
量True、False。
直接用值的常量叫直接常量,還有一類常量是符號常量。為了方便程序修
改、調試及使程序具有更好的可閱讀性,我們通常將某個常量定義成符號
常量,并且在代碼中使用該符號來代替實際值。如下列語句定義了符號常
量PI,來代替圓周率的近似值:
Const PI=3.1416
符號常量在定義時同時賦值,代碼中凡是用到符號“PI”的地方,運算時實
際用了值3.1416。而且PI一旦被定義為符號常量,則后續代碼中不允許對
“PI”進行再次賦值。
2.變量
在程序運行時,值一開始不確定,或者運行過程中可能會發生改變的存儲單
元稱為變量。每個變量都要有確定的變量名和數據類型。
變量的命名規則:
(1)由字母、數字或下劃線等字符組成,必須以字母開頭;
(2)變量名最長為255個字符;
(3)VB中不區分變量名的大小寫;
(4)不能使用VB中的關鍵字。
變量說明語句的常用形式為:
Dim 變量名 As 變量的類型
例1 在Visual Basic中,下列能作為變量名的是?(  )
A.x+1  B.x_1  C.Or  D.If
解析????本題考查變量的命名規則。變量的名稱由字母、數字或下劃線等
字符組成,且必須以字母開頭。“x+1”中“+”是不允許用的。題目中
Or、If在VB中有特定用途,不能作為變量名。
答案????B
例2 用變量存儲詩朗誦比賽中選手的平均得分(保留2位小數),則變量的
數據類型應說明為?(  )
A.Integer  B.Long  C.Single  D.Date
解析 Integer是整型,Long是長整型,Single是單精度實數型,Date是日期
型。
答案????C????
例3 下列Visual Basic程序用于計算1010的值:
Private Sub Command1_Click()
 Dim n As Integer,s As Integer
 n=10
 s=10^n
 Text1.Text=Str(s)
End Sub
運行程序時,單擊命令按鈕Command1后彈出如圖所示的出錯信息提示,引
起該錯誤的原因是?(  )
?
A.變量s的數據類型說明不當
B.變量n的數據類型說明不當
C.文本框Text1的寬度不夠
D.s值太大,因此不能在文本框Text1中輸出
解析 每種數據類型的存儲空間是不一樣的。存儲空間也決定了數據類
型的值范圍,比如Integer型占兩個字節,最大為32 767,而Long型占四個字
節,最大為2 147 483 647。1010明顯超過了32 767,如果存到Integer型的變量
s中,就發生了“溢出”錯誤。
答案????A????
三、VB中常用的標準函數
1.常用數學函數:Abs(X)、Int(X)、Sqr(X)、Exp(X)、Log(X)、Sin(X)、
Cos(X)、Tan(X)。
2.常用類型轉換函數和字符串函數:Asc(X)、Chr(X)、Val(X)、Str(X)、
Len(X)、Mid(X,n,k)、Fix(X)。
3.隨機函數Rnd:產生一個大于或等于0且小于1的單精度隨機數。
例4 在Visual Basic中,a=-100,表達式“360”+Str(a)的值是?(  )
A.260  B.360-100  C.460  D.360100
解析 類型轉換函數Str(x)的功能是將數值x轉換為字符串。a=-100,Str(a)
=“-100”,“360”+Str(a)=“360-100”,完成字符串的連接運算。
答案????B????
四、算術、關系、邏輯三類基本運算及表達式
1.VB的基本運算包括算術運算、關系運算和邏輯運算三大類。
算術類基本運算有:^、-(取負)、*、/、\、Mod、+、-(減法)。
關系類基本運算有:=、<>、<、>、<=、>=。
邏輯類基本運算有:Not、And、Or。
2.表達式主要用來規定值的計算過程,以及對于某些情況或條件的判斷。
一個表達式中可能包括算術運算、關系運算和邏輯運算等多種基本運算,
以及這些基本運算所涉及的數據(變量和常量)。
例5 能正確判斷x為偶數的VB表達式是?(  )
A.x Mod 2=0  B.Int(x/2)=0
C.x/2=0  D.x\2=0
解析 判斷“x是不是偶數”的條件是x能否被2整除,其Visual Basic條件
表達式是x Mod 2=0,即x除以2余數為0。
答案????A????
例6 已知a=1,b=2,c=3,下列表達式中值為True的是
(  )
A.Not(ab And b>c  C.ac  D.a>c
解析 本題考查關系表達式和邏輯表達式的運算方法。當ab的值為False并且b>c的值為False時,a>b And b>c的值為False。當ac的值為False時,ac的值為True。a>c的值為False。
答案????C????

考向突破
一、VB基本數據類型
VB中常用的數據類型如下表:
數據類型名 說明 性質
Integer 整數型 -32 768~32 767范圍內的任何整數
Long 長整數型 -2 147 483 648~2 147 483 647范圍內的任何整數
Single 單精度實數型 絕對值在1.401 298E-45到3.402 823E38內的任何實數,有效數字約6~7位
Double 雙精度實數型 絕對值在10E-324到1.79E308內的任何實數,有效數字約14~15位
String 字符串型 一段文字和符號,放在一對雙引
號(英文狀態)之間
Boolean 邏輯型 判斷的結果,其值為真(True)或
假(False)
Date 日期型 日期和時間
其中邏輯(Boolean)數據類型只有兩個值True或False。將邏輯型轉換成整
型時,True為-1,False為0;其他數據轉換成邏輯型時,非0為True,0為False。
例1 運行如下Visual Basic程序,單擊命令按鈕Command1,出現如圖所示
的出錯信息。
Private Sub Command1_Click()
 Dim p As String,a As String
 p="" ’①
 a="abcd" ’②
 b=p+a ’③
 Label1.Caption=Str(p)’④
End Sub
?
發生“類型不匹配”錯誤時所執行的語句是?(  )
A.①  B.②  C.③  D.④
解析 程序執行到Label1.Caption=Str(p)時出現錯誤,類型轉換函數Str(p)
的作用是將數值轉換為字符串,而p是字符串型,于是出現“類型不匹配”
的問題。正確寫法應該是Label1.Caption=p。
答案????D????
例2 在VB中,下列表達式的值屬于字符串常量的是?(  )
A.Abs(100)  B.“false”  C.Val(“100”)  D.True
解析 本題考查VB的基本數據類型。A和C的值都為100,是整數型,D為邏
輯型,B中false本來是邏輯型,但加了雙引號,則為字符串型。
答案????B????
二、基本運算與表達式
VB的基本運算包括算術運算、關系運算和邏輯運算三大類。把變量、常
量、運算符、函數和圓括號按一定的規則組合起來,構成一個表達式,用來
描述值的計算過程,或描述對于某種情況下所遇到的條件的判斷。
(1)算術類運算符
基本運算 運算符號 優先級 舉例 結果
乘冪 ^ 1 2^3 8
取負 - 2 -a a的相反數
乘法 * 3 2*3 6
實數除法 / 3 5/2 2.5
整數除法 \ 4 5\2 2
求余數 Mod 5 5 Mod 2 1
加法 + 6 2+3 5
減法 - 6 2-3 -1
  數字越大,優先級越低,在一個表達式中先執行優先級高的運算,同優
先級則按自左向右順序執行,若有括號,則先計算括號內的表達式,如果有
多層括號,則按由內向外的順序進行計算。
①整數除法的優先級比乘法和實數除法的優先級低一級,因此表達式15\8/
4相當于15\(8/4),結果為7。此外整數除法要求被除數與除數也必須是整
數,得到的商取整。
②求余數的運算符Mod是唯一一個由字母構成的運算符,注意與標準函數
的區別,函數有參數,而運算符沒有參數。Mod運算要求被除數與除數都必
須是整數,得到的余數也是整數。Mod的優先級是5級,比整數除法低一級,
比加減法優先級高。
(2)關系運算符
所有關系運算具有相同的優先級。
基本運算 運算符號 優先級 舉例 結果
相等 = 7 1=2 False
不相等 <> 7 1<>2 True
小于 < 7 1<2 True
大于 > 7 1>2 False
小于等于 <= 7 1<=2 True
大于等于 >= 7 1>=2 False
  ①關系運算主要是比較運算符兩邊數據的大小關系。在VB中,可以
對數值進行比較;也可以對字符進行比較,字符的ASCII值大的,字符值就
大;還可以對字符串進行比較,先比較第一個字符,如果相等,則比較第二個
字符,依此類推,因此字符串“final”<“find”。
②關系運算的結果是邏輯值真(True)或假(False),表示該表達式成立或不
成立。
③“1<=2”相當于“1<2 或1=2”,“或”運算只要其中一個條件成立,結
果即為真(True)。
④特別注意數值區間的寫法,數學上的“33
And x<10”。
(3)邏輯運算符
基本運算 運算符號 優先級 舉例 結果
非 Not 8 Not(1<2) False
與 And 9 3<4 And 4>5 False
或 Or 10 3<4 Or 4>5 True
①三個邏輯運算符的優先級是不一樣的。“非”最高,“與”其次,
“或”最低。但都比其他類型運算符低。
②“與”運算中,只要“與”兩邊有一個表達式不成立,“與”運算結果就是False;“與”兩邊的表達式都成立,最后結果才是True。
③“或”運算中,只要“或”兩邊有一個表達式成立,“或”運算結果就是True;“或”兩邊的表達式都不成立,結果才是False。
(4)表達式書寫注意點
①乘號不能省略,如表達式a=2*b+1寫成a=2b+1會報錯,寫成a=b2+1不會


②條件表達式中區間的判斷不能連寫,比如判斷a是否在區間[1,10]內,不能
寫成1<=a<=10,應該寫成a>=1 And a<=10;判斷a,b,c三個變量是否相等,不
能寫成a=b=c,應該寫成a=b And b=c。
③要注意運算的優先級,比如求根公式應該寫成(-b-Sqr(b*b-4*a*c))/(2*a),
而不是(-b-Sqr(b*b-4*a*c))/2*a
例3????(2018溫州新力量聯盟)已知a=30,b=10,c=3,則表達式Int(Sqr(a)) Mod
b\c的值為?(  )
A.1  B.2  C.0  D.1.67
解析 a=30,Int(Sqr(a))=5,“\”的優先級高于“Mod”,因此先算b\c=3,再
算5 Mod 3=2。
答案????B????
報錯,但是程序會把b2看成一個變量名,因此運算結果也是不正確的。
例4 在VB中,設x=2019,能正確得到其十位數字“1”的表達式是?(???? )
A.x Mod 100  B.x Mod 100\10
C.x\10 Mod 10  D.x\100 Mod 10
解析 Mod運算和\運算有一些特殊的功能,比如x Mod 10,可取出x的個位
數;x Mod 100可取出x的十位和個位,依次類推。x\10相當于劃去個位,x\10
0相當于劃去十位和個位,依次類推。因此取十位數字表達式為x\10 Mod 1
0,取百位數字表達式為x\100 Mod 10,依次類推。注意“Mod”運算的優
先級比“\”運算的優先級低。A選項值為2019 Mod 100=19;B選項值為20
19 Mod 10=9;C選項值為201 Mod 10=1;D選項值為20 Mod 10=0。
答案????C??
??三、常用標準函數
常用的數學函數:
  隨機函數在書寫時可以不要參數,括號也可省略,函數返回值是一個大
于等于0且小于1的單精度隨機數。產生[a,b]區間內的隨機整數的表達式:
函數名 函數的功能 應用舉例 函數返回值
Abs(X) 求X的絕對值 Abs(-3.5) 3.5
Int(X) 求不大于X的最大整數 Int(4.1)
Int(-4.1) 4
-5
Sqr(X) 求X的算術平方根 Sqr(4)
Sqr(6) 2
2.44948
Rnd() 產生一個[0,1)之間的隨
機實數 Rnd() 例如:0.32
Int(Rnd*(b-a+1)+a)。如:產生[1,100]的隨機整數,表達式為Int(Rnd*100+1)。
常用的類型轉換函數和字符串函數:
函數名 函數的功能 應用舉例 函數返回值
Asc(X) 求字符的ASCII值 Asc(“A”) 65
Chr(X) ASCII值轉換為字符 Chr(48) “0”
Val(X) 數字字符串轉換為數
值 Val(“-170”) -170
Str(X) 數值轉換成字符串 Str(-170) “-170”
Len(X) 計算字符串的長度 Len(“asd”) 3
Mid(X,n,k) 取字符串X中第n個字
符起長度為k的子串 Mid(“abcd”,3,2) “cd”
Fix(X) 截掉數據的小數部分 Fix(2.56) 2
  ①Asc()、Val()、Len()三個函數的參數是字符串型,函數返回值是數
值型。Chr()、Str()兩個函數的參數是數值型,函數返回值是字符串型。
Mid()函數有三個參數,函數返回值是字符串型。
②Len()函數與Mid()函數組合使用,可以取出一個字符串的所有字符。代
碼如下:
n=Len(s)
For i=1 to n
Print Mid(s,i,1)
Next
例5 下列VB表達式的值等于23的是?(  )
A.Str(20)+“3”    B.Len(“-20”)+20
C.Val(“-20”)+20  D.Abs(Int(-23.3))
解析 本題考查VB標準函數。A選項值為“203”,B選項值為23(即3+20),
C選項值為0(即-20+20),D選項Int(X)函數是取不大于X的最大整數,因此Int
(-23.3)=-24,取絕對值后是24。
答案????B????
例6 產生一個隨機大寫字母的VB表達式是?(  )
A.Chr(Int(Rnd*25+65))  B.Asc(Int(Rnd*25+65))
C.Chr(Int(Rnd*26+65))  D.Asc(Int(Rnd*26+65))
解析 “A”的ASCII碼值為65,“A~Z”共26個字母,因此產生隨機數的
范圍應該是[65,90],隨機數公式為Int(Rnd*26+65)。Chr()是將ASCII值轉換
為相應的字符,Asc()是求字符的ASCII值。因此答案為C。
答案????C????
考點四????VB基本語句
考向基礎
一、賦值語句
賦值語句的作用是把等號右邊的表達式的計算結果存儲到等號左邊的變
量中,或某個對象的屬性中。其格式為:
變量名=表達式  或 ????對象名.屬性名=表達式
說明:
①如果在同一行中出現多個賦值語句,則語句之間用冒號(:)隔開。如:
a=b:b=c:c=a
該行代碼中包含了三個賦值語句,最后的結果是變量b和c中的值被交換。
②對某個對象的某個屬性進行賦值,如:Label1.Caption=“結果”,表示將標
簽Label1的標題設置為“結果”兩字。
③“=”號兩邊的數據類型應該一致。
二、選擇語句
選擇語句又稱為條件語句、分支語句或判斷語句。用于實現三種基本結
構中的分支結構。條件語句用If語句來表示,有行If語句和塊If語句兩種語
句格式。
1.行If語句
行If語句必須在一行內寫完。語法格式如下:
If 條件表達式 Then 語句1 Else 語句2

If 條件表達式 Then 語句
該指令執行過程是:先判斷條件表達式,如果成立,則執行語句1,如果不成
立,則執行語句2。
2.塊If語句
單個分支:
If 條件表達式 Then
語句塊
End If
兩個分支:
If 條件表達式 Then
語句塊1
Else
語句塊2
End If
多個分支:
If 條件表達式1 Then
語句塊1
ElseIf 條件表達式2 Then
語句塊2
ElseIf 條件表達式3 Then
……
Else
語句塊n
End If
注意:塊If語句必須要以End If結束,如下代碼:
For i=1 To 10
 If i Mod 2=0 Then
Print “偶數”
 Else
  Print “奇數”
Next
運行后,會出現如下提示,錯誤原因并非缺少Next,而是缺少了End If。
?
3.If語句的嵌套
If 條件表達式1 Then
語句塊1
 If 條件表達式2 Then
語句塊2
 Else
   語句塊3
 End If
Else
語句塊4
End If
這是一個If語句的雙層嵌套,內層If語句是嵌套在外層的Then分支中。因
此有如下結論:
條件表達式1成立 執行:語句塊1 條件表達式2成立 執行:語句塊2
條件表達式2不成立 執行:語句塊3
條件表達式1不成立 執行:語句塊4
三、循環語句
1.For循環,也稱計數型循環,語法結構如下:
For 循環變量=初值 To 終值 [Step步長]
循環體
Next [循環變量]
步長=1時,可省略Step。
流程圖如下:
?
例1 有如下Visual Basic 程序:
Private Sub Command1_Click()
Dim sum As Double, x As Double
sum=0
n=0
For i=1 To 5
 x=n / i
 n=n + 1
 sum=sum + x
Next
End Sub
該程序通過For循環計算sum的值,下列表達式的值與sum相等的是?(????)
A.1+1/2+2/3+3/4+4/5
B.1+1/2+2/3+3/4
C.1/2+2/3+3/4+4/5
D.1+1/2+1/3+1/4+1/5
解析 本題考查程序閱讀。程序運行過程如下:
i x=n/ i 執行n=n+1后的n sum
1 0 1 0
2 1/2 2 1/2
3 2/3 3 1/2+2/3
4 3/4 4 1/2+2/3+3/4
5 4/5 5 1/2+2/3+3/4+4/5
退出循環
答案????C????
2.Do循環,也稱當型循環,語法結構如下:
Do While 條件表達式
  循環體
Loop
Do語句的執行過程畫成流程圖如下:
Do語句的執行過程相對簡單,先判斷條件,成立則執行循環體,然后再次判
斷條件,成立則再次執行循環體,每執行完一次循環體,則回到條件判斷,直
到條件不成立,則退出循環。在事先不知道循環次數的情況下,可使用Do
語句,但是要設置好循環條件,否則有可能陷入死循環。當知道循環次數
時,既可使用Do語句,也可使用For語句,以下是等價的兩個程序段:
For i=1 To 5
循環體
Next=i=1
Do While i<=5
循環體
i=i+1
Loop
例2 閱讀如下程序段,程序運行結束時,k和s的值分別是?(  )
k=0:s=0
Do While k <=10
s=s+1
k=k+1
Loop
A.k=10,s=10  B.k=10,s=11
C.k=11,s=10  D.k=11,s=11
解析 k和s的初值都為0,每循環一次,s加1,k加1;循環變量k從0開始,一直
到k=10,故一共循環11次,所以程序結束時,s=11,最后一次循環完成后k=1
1。當k=11時,循環條件不滿足,退出循環。所以程序結束時,k=11,s=11。
答案????D
例3 現要求剛好輸出1 至100 內所有能被7 整除的數,下列程序不能實現
的是?(  )
A.
????For i=1 To 100
 If i Mod 7=0 Then
  List1.AddItem i
 End If
Next i   B.
????For i=7 To 100 Step 7
 List1.AddItem i
Next i
C.
????i=1: s=7
Do While s <=100
 List1.AddItem s
 i=i+1
 s=i*7
Loop  D.
????s=0
Do While s <=100
 s=s+7
 List1.AddItem s
Loop
解析 A選項i從1循環到100,步長為1,當i Mod 7=0(即i能被7整除)時輸出i;
B選項i從7開始循環到100,步長為7;C選項i從1開始,執行s=i*7再輸出s,直到
s大于100停止;D選項最后一次循環s=98,執行s=s+7=105,因此多輸出了105。
答案????D
  3.循環語句的應用
計數器:定義一個變量如c作為計數器,賦初值為0,在循環體內執行指令如c
=c+1。則每當循環體被執行一次,就執行一次c=c+1,從而實現計數功能。
累加器:定義一個變量如s作為累加器,賦初值為0,在循環體內執行指令如s
=s+i或s=s+a(i),可實現數值累加或數組元素的相加。
4.循環語句的中途跳出:指令Exit For或Exit Do,如果是循環嵌套,則退出Ex-
it指令所在的這一層循環。
5.循環的嵌套——多重循環語句
有如下雙重循環:
For i=1 To 10
 語句塊1
 For j=1 To 10
語句塊2
 Next j
 語句塊3
Next i
則:語句塊1、語句塊3在外層循環中,分別執行10次;語句塊2在內層循環
中,執行100次。
例4 有如下Visual Basic程序段:
s=0
For i=1 To 10
  For j=1 To i
s=s+j*j
  Next j
  s=s+i*i
Next i
則該程序段運行后,語句“s=s+j*j”執行的次數為  ????。
解析 本題考查雙重循環。外循環i從1到10共10次,內循環是i次,因此內
循環中循環體總的執行次數是:1+2+3+4+5+6+7+8+9+10=55。
答案 55

四、注釋語句
注釋是以單引號(’)開頭的一串文字,可以出現在程序中需要說明的位置
上,通過這一串文字,對附近的程序段進行簡要的說明,增加程序的可讀
性。注釋對程序的執行效果沒有任何影響,程序運行時自動跳過注釋。考
試時,有時可通過注釋語句分析變量和算法,幫助解題。
如:
Dim n As Integer ’變量n用于存儲班級總人數
五、輸入、輸出語句
1.輸入語句
Inputbox()輸入函數
①語法格式:Inputbox(提示信息,標題)。
②語法解釋:
提示信息:指對輸入數據的提示,顯示在輸入窗口中,不能省略;
標題:輸入窗口的標題,可省略;
③該函數一般不單獨作為一個語句使用,通常是用賦值語句的形式將輸入
的內容賦值給某個變量。例:x=InputBox(“A=”,“輸入”)。
該代碼執行后,屏幕上將出現一個輸入窗口,標題為“輸入”,窗口中的提
示信息為“A=”,如圖所示。
?
2.輸出語句
(1)Msgbox()輸出函數
①語法格式:Msgbox(消息,按鈕類型,標題)。
②語法解釋:
消息:輸出的消息,不能省略;
按鈕類型:彈出窗口包含的按鈕,可省略;
標題:消息窗口的標題,可省略。
如:Msgbox(s),在彈出窗口中輸出變量s的值。
如:Msgbox(“兔子的數量為”+str(s)),在彈出窗口中輸出如“兔子的數量
為5”(假設s=5)。
(2)Print打印
Print方法是輸出數據、文本的一個重要方法。
①基本格式:Print 輸出內容。
在這里,輸出內容可以是數、變量、表達式,也可以是用雙引號括起來的字
符串。
②如果輸出的內容是變量或表達式,則輸出的是變量或表達式的值。如果
是用雙引號括起來的字符串,則原樣輸出。
例如:語句 Print 3的輸出結果為:3;
語句 Print 2+2的輸出結果為:4;
語句Print “2+2”的輸出結果為:2+2;
語句Print “你好”的輸出結果為:你好。
輸出內容后面有一個分號,表示輸出完本內容后不換行;輸出內容后面沒有
符號,則輸出完本行內容后換行;如果Print中沒有輸出內容,則表示輸出一
個空行。
例如:A=5,B=3。
那么執行以下四行語句:
Print “A=”;
Print A
Print “B=”;
Print B
輸出結果為:A=5
B=3
3.其他輸入、輸出方法
(1)文本框輸入、輸出:
輸入:x=Val(Text1.Text),說明:將文本框Text1中輸入的內容(數字字符串)賦
給數值型變量x。
輸出:Text1.Text=Str(x),說明:將數值型變量x的值輸出到文本框Text1中。
(2)標簽輸出:Label1.Caption Str(x),說明:將數值型變量x的值輸出到標簽
Label1中。
(3)列表框輸出:List1.AddItem Str(x),說明:將數值型變量x的值輸出到列表
框List1中。
考向突破
一、賦值語句
(1)與關系表達式的區別:關系表達式中的“=”用于判斷等號兩邊是否相
等。賦值語句中的“=”是賦值。如果等式出現在If語句或Do語句的條件
表達式中,則該等式一定是關系表達式。
(2)作為輸入輸出語句時,“=”左右兩邊的內容不要寫反。
Text1.Text=Str(a)是輸出a,b=Val(Text2.Text)是輸入b。
(3)賦值語句的執行過程:先計算右邊表達式的值,再賦值給左邊的變量。
如:a=a+5,該行代碼執行前,如果a=3,則該行代碼執行后,a=8。
例1 下面給出的賦值語句中錯誤的是?(  )
A.x=x=y         B.x+y=3
C.Label1.Caption=“hello”  D.x=-b
解析 A選項正確,第1個等號是賦值,第2個等號是“相等”運算,B選項
“=”左側是算術表達式,格式錯誤。C和D選項都是正確的賦值語句。
答案????B????
例2 下面VB程序的功能是    ????。
a=a+b:b=a-b:a=a-b
解析 如一開始a=3,b=4。執行a=a+b后,a=7,b不變。執行b=a-b后,b=7-4=
3,a不變。執行a=a-b后,a=7-3=4,b不變。因此最后得到a=4,b=3,這樣就實現
了變量a、b的互換。要實現兩數交換最常用的是以下指令:t=a:a=b:b=t。
這里的t相當于一個臨時變量,暫時存放交換前a的值。需要注意的是,語句
a=b:b=a不能實現交換。
答案????交換變量a、b的值
例3 變量a的初值為0,在下列語句中,每執行一次能使變量a的值在5、0兩
數值上交替出現的是?(  )
A.a=5-a  B.a=-a
C.a=a+5  D.a=a-5
解析 當a=5時,執行5-a=5-5,得a=0;當a=0時,執行5-a=5-0,得a=5。
答案????A????
二、If語句
(1)If語句的多種形式,造成代碼理解困難,一定要注意行If語句和塊If語句
的開始和結束位置,尤其是If語句和If語句嵌套,If語句和循環語句嵌套。考
試時,可以將語句的開始和結束位置進行配對,有助于分析程序。
(2)If語句的條件:
邏輯運算符And:所有分項都是真,則值為真;只要有一個分項都是假,則值為假。
邏輯運算符Or:只要有一個分項是真,則值為真;所有分項是假,則值為假。



例4 若x=5,執行以下代碼:
If x>3 Then x=x+3
If x>6 Then
 x=x-2
Else
 x=x+5
End If
最后x的值為?(  )
A.8  B.10  C.13  D.6
解析 代碼中有兩個If語句,一個是行If,一個是塊If,依次執行,不互斥。第一個If語句條件成立,執行x=x+3=8;到第二個If語句,條件成立,執行分支x=x-2=6。
答案????D????
例5 有如下VB程序段:
a=3:b=4:c=5
If a>=b And a>=c Then
 y=a
ElseIf b>=c Then
 y=b
Else
 y=c
End If
該程序段運行之后,整數型變量y的值為?(  )
A.0  B.3  C.4  D.5
解析 本題考查塊If語句的執行過程。當a=3,b=4,c=5時,條件表達式a>=b
And a>=c為False,表達式b>=c的值為False,程序執行y=c語句。
答案????D????
例6 有如下VB程序段:
Dim a As Single, b As Single
a = Val(Text1.Text)
If a >= 15 Then
 b = a ^ 2
Else If a>= 0 Then
 b = 10*a
Else
 b = a
End If
Text1.Text=Str(b)
若要測試所有分支程序代碼是否正確,以下測試數據中,最恰當的一組是?
(  )
A.-1,0,1  B.16,0,-2
C.-5,2,10  D.15,25,-1
解析 本題主要考查分支結構。分支一:a≥15;分支二:0≤a<15;分支三:a<
0。為測試所有分支代碼是否正確,應選擇B選項。
答案????B???
?三、循環語句的循環次數
1.For 循環:
For 循環變量=初值 To終值 Step 步長
語句塊
Next 循環變量
循環次數=Int((終值-初值)/步長)+1。
以下情況,循環次數是0次:初值大于終值,且步長為正數;初值小于終值,且
步長為負數。
以下情況,循環次數是1次:(終值-初值)/步長<1。
如果終值≠初值,并且步長=0,則程序陷入死循環。
例7 以下程序段運行之后,變量s的值為?(  )
Dim i, s As Integer
s = 0
For i= 1 To 5 Step -1
 s = s + i
Next i
A.15  B.10  C.0  D.程序錯誤
解析 該For循環語句的循環次數是0次,因此s的值不變。
答案????C????
例8 有以下一段語句:
For i=1 To 5 Step 10
 Print i
Next i
則循環體語句執行次數為?(  )
A.1  B.5  C.10  D.2
解析 本題中(終值-初值)/步長<1,執行次數是1次。
答案????A????
2.Do循環:首次檢驗條件表達式,如果發現是假,則循環體執行次數是0次。
例9????(2018紹興期末調測)有如下 VB 程序段:
n =Val(Text1.Text)
i = 2: flag = True
Do While i <= Int(Sqr(n))
 If n Mod i = 0 Then
  flag = False
 Else
  i=i+1
 End If
Loop
"If flag Then Label1.Caption = "Yes" Else Label1.Caption = "No"
該程序段運行后,若在文本框 Text1 中輸入“15”,則下列說法正確的是(  )?
A.flag 的值為 True
B.Label1 中輸出“No”
C.程序將進入死循環
D.條件表達式 n Mod i=0 等價于 Int(n/i)=n\i
解析 i=2,n=15,因此n Mod i=0不成立,執行i=i+1=3;第2次循環, n Mod i=0
成立,因此執行flag=False,不執行i=i+1,i值不變,因此條件n Mod i=0 一直成
立,i值一直為3,循環條件一直成立,因此程序進入死循環。
答案????C????
考點五????數組的定義及使用
考向基礎
數組是由一批同類型的變量構成的一個序列,組成數組的每一個變量被稱
為數組的元素,也稱為下標變量,下標是一個整數,用來指出某個元素在數
組中的位置,數組中每個元素的位置由它的下標唯一確定。
一維數組的常用形式為:
Dim 數組變量名(A1 To A2) As 元素的類型
經典的數組問題:
1.求數組中的最小值、最大值。
k=a(1)
For i=2 To n
 If a(i)Next
代碼運行完后,k中存儲的是數組a中的最小值;將a(i)k,則k中是
最大值。
2.求數組中最小值(最大值)所在的位置。
k=1
For i=2 To n
 If a(i)Next
3.判斷一個10位數n中數字剛好是0123456789的不同組合,不重復,不缺失
(即每個數字均只出現一次)。
Dim a(0 To 9) As Integer
Do While n > 0
a(n Mod 10) = 1
  n = n \ 10
Loop
s = 0
For i = 0 To 9
 s = s + a(i)
Next
If s = 10 Then Print "yes"
4.統計字符串s中出現次數最多的小寫字母。
Dim a(1 To 26) As Integer
For i = 1 To Len(s)
 c = Mid(s,i,1)
 If c >= "a" And c <= "z" Then
  n =Asc(c) - Asc("a") + 1
  a(n) = a(n) + 1
 End If
Next
Max = 1
For i = 2 To 26
 If a(i) > a(Max) Then Max = i
Next
PrintChr(Asc("a") + Max - 1)
數組是考試重點,也是難點。數組下標的靈活運用,可以實現很多算法,同
時也增加了考試難度。甚至在數組中再引入另一個數組做下標變量,如a(b
(i))、a(b(c(i)))等,大大增加了解題難度。對于此類題型,沒有捷徑,唯有多練多總結,同時也要熟練掌握循環語句,才能在考試時,做到胸有成竹、不慌不亂。
例1 有如下程序段,運行時程序出現如下錯誤提示,出錯語句的位置是 ?
(  )
Private Sub Command1_Click()
 Dim i As Integer
 Dim a(1 to 10)As Integer  ’①
 For i=1 To 10 ’②
  a(i)=Rnd* 100 ’③
 Next i
 Label1.Caption=Str(a(i)) ’④
End Sub
?
A.①  B.②  C.③  D.④
解析 循環結束后i= 11, 數組a下標范圍為 1~10,因此語句④中a(i),也即a(1
1)出現下標越界。
答案????D????
例2 有如下VB程序:
Private Sub Command1_Click()
 Dim a(1 To 5) As Integer
 a(5)=Val(Text1.Text)
 For i=4 To 1 Step -1
   a(i)=a(i+1)\2
 Next i
 Label1.Caption=Str(a(1))
End Sub
在文本框Text1中輸入“100”,單擊命令按鈕Command1后,標簽Label1中
顯示的內容是?(  )
A.25  B.6  C.12  D.50
解析 根據代碼可知前一項是后一項的一半(整數除),因此a(5)=100,a(4)=5
0,a(3)=25,a(2)=12,a(1)=6。
答案????B????
例3 有如下程序段:
key =5 : pmin = a(1)
For i = 2 To 6
 If a(i) > key And a(i) < pmin Then pmin = a(i)
Next i
數組元素 a(1)到 a(6)的值依次為“9,1,7,3,8,4”,執行程序后,變量pmin 的
值為?(  )
A.1  B.4  C.7  D.9
解析 本題是找出數組中的最小值,但加了一個條件a(i) > key,也即在大于
5的元素里找出最小值,應該是7。
答案????C????
考向突破
一、產生不重復的數
產生10個1至100的不重復的數:
方法一:利用數組做標記
Dim f(1 To 100) As Boolean
For i = 1 To 10
 a(i) = Int(Rnd * 100) + 1
 Do While f(a(i)) = True
  a(i) = Int(Rnd * 100) + 1
 Loop
 f(a(i)) = True
Next
利用數組f做標記,如果某數值x已經產生,則f(x)=true。
方法二:通過查找的方法
For i = 1 To 10
 a(i) = Int(Rnd * 100) + 1
 For j = 1 To i - 1
  If a(j) = a(i) Then i = i - 1: Exit For
 Next j
Next i
利用順序查找,查找第i次產生的隨機數是否與前i-1個數有相同,如果有相

同,則重新產生,此處i=i-1是一個巧妙的運用。
方法三:利用自定義函數
Dim a(1 To 10) As Integer
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 10
 a(i) = Int(Rnd * 100) + 1
 Do While f(i)
  a(i) = Int(Rnd * 100) + 1
 Loop
Next
End Sub
Public Function f(n As Integer) As Boolean
f = False
For i = 1 To n - 1
 If a(i) = a(n) Then f = True: Exit For
Next
End Function
自定義函數f的作用是判斷第i個數是否已經產生,在函數中利用順序查找,
查找第i個數是否與前i-1個數有相同,如果有相同則返回函數值True。因為
有兩個過程要使用數組,因此數組定義為通用變量。
二、在數組中插入或刪除數
1.在數組a的第k個位置刪除一個數,并將第k+1至第n個數依次往前移。
For j = i To n - 1
 a(j) = a(j + 1)
Next
n = n-1 ’總個數減1
2.在數組a的第i個位置插入一個數key,并將第i至第n個數依次往后移。
For j = n + 1 To i + 1 Step -1
 a(j) =a(j - 1)
Next
a(i)=key
3.去除數組中的重復數。
i = 2  ’從第2個數開始找重復數
Do While i <= n
 For j = 1 To i - 1  ’第i個數與前i-1個數比較
  If a(i) = a(j) Then
   a(i) = a(n)  ’若a(i)是重復數,將最后位置的數直接替換a(i)
   n = n - 1  ’總個數減1
i = i - 1  ’這步操作很重要,因為移過去的數可能也是重復的,要重新判

   Exit For  ’當前數已經被刪除,不用再比較
  End If
 Next
i = i + 1
Loop
例1????(2018紹興期末調測)某數組 a(1)~a(10)中的數值分別為 5,3,5,10,3,5,1
2,96,12,10,經過去重后,a(1)~a(5)的數值為 5,3,10,12,96,部分程序如下:
i = 1:n=10
Do While i <= n
 j=i+1
 Do While j <=n
  If  ①????Then
   For k = j To n - 1
 ②????
   Next k
   n=n-1
  Else
   j=j+1
  End If
 Loop
 i=i+1
Loop
為實現以上功能,劃線①②處應分別填寫?(  )
A.①a(j)=a(j+1) ②a(k)=a(k+1)
B.①a(j)=a(i) ②a(k)=a(k+1)
C.①a(j)=a(j+1) ②a(k)=a(k-1)
D.①a(j)=a(i) ②a(k)=a(k-1)
解析 這是一個數組的去重問題。變量i從1至n,表示對數組中每個a(i)都
進行一次去重,變量j從i+1到n,表示每遍去重的方法是:將a(i)與其后的所有
元素進行比較,如果有a(j)=a(i),則將a(j)刪去,并將a(j)后的數依次往前移。
因此①處填a(j)=a(i),②處填a(k)=a(k+1),表示將所有元素依次往前移一個
位置。
答案????B????
三、可能與不可能問題
通過隨機函數產生數組,并經過一系列操作后,選出可能或不可能的狀態,
這是近來比較熱門的考題,難度往往也比較大。解這類題目的關鍵是:①注
意隨機數的范圍;②注意元素的奇偶性和奇偶位置;③通過模擬代碼執行,
找出規律或程序的目的,有助于提高解題速度。
例2????(2019浙江名校新高考研究聯盟(Z20聯盟)第二次聯考)有如下VB程
序段:
For i = 1 To 8
 a(i) = Int(Rnd * 2)
Next i
sum = 0
For i = 1 To 8 Step 3
 For j =i To 8
  a(j) = 1 - a(j)
 Next j
 sum = sum + a(i)
Next i
Text1.Text = Str(sum)
執行程序段后, 文本框 Text1中顯示的內容不可能是?(  )
A.0  B.2  C.3  D.4
解析 本題考查隨機函數和數組的綜合應用。從a(i) = Int(Rnd * 2)可知,a
(i)的值要么是0,要么是1。第一次循環i=1,將第1個到第8個數的值取反(0
變1,1變0),并且將a(1)值累加至sum;第二次循環i=4,將第5個到第8個數的值
取反, 并且將a(4)值累加至sum;第三次循環i=7,將第7個到第8個數的值取
反, 并且將a(7)值累加至sum。顯然不必研究數組中8個元素的值到底是多
少,因為sum中最多只加了3個元素(要么0,要么1),所以sum的值不可能是4。
答案????D????
例3????(2018期末調研測試卷)有如下 VB 程序段:
i = 1: n = 5
Do While i <= n
 x = Int(Rnd() * 9) + 1
 If x Mod 2 = 1 Then
  a(i) = x
 Else
  a(n) = x
  n = n - 1
 End If
 i = i + 1
Loop
數組元素的初值均為0, 執行該程序段后, 在下列選項中 a(1)至 a(5)各元素
值不可能的是?(  )
A. 7 1 3 9 8  B. 3 3 0 8 8
C. 0 1 0 4 2  D. 1 3 5 5 0
解析 分析代碼可知,隨機數的范圍是[1,9],奇數賦給數組的頭,偶數賦給
數組的尾,變量i是頭,變量n是尾,但要注意的是,語句n=n-1是在分支語句中
的,也即數組尾賦值后才執行,而i=i+1是在分支語句外的,不管本次有沒有
賦值,都會執行,因此當產生的是偶數時,數組頭會被跳過,保持原值0。A選
項的產生序列是:7、1、3、9、8,B選項的產生序列是:3、3、8、8,C選項
的產生序列是:2、1、4。D選項不可能。
答案????D????
考點六????過程與自定義函數
考向基礎
1.模塊化程序設計的基本思想
當某一段程序需要反復書寫時,可以將它封裝成一個通用過程或函數,這樣
可以大大減少程序的總代碼量,并且提高程序的可閱讀性。過程強調的是
動作,函數強調的是值的計算。函數有返回值,過程沒有返回值。
2.通用過程
Public Sub 過程名(參數1,參數2,……)
[局部變量和常數聲明]
語句塊
[Exit Sub]
[語句塊]
End Sub
如果過程沒有參數,調用寫法是:[Call]過程名,其中Call可省略。
如果過程有參數,調用寫法有:
過程名 參數1,參數2,……
或:
Call 過程名(參數1,參數2,……)
注意使用Call時,參數必須在括號內。
注:自定義過程的調用選考不作要求。
3.自定義函數
自定義函數類似于過程,不同之處是函數執行完成后,函數的計算結果(即
“函數返回值”)被送到函數的調用點上(即調用函數的程序位置),供程序
的后續部分繼續進行處理。
雖然VB提供了很多常用的標準函數,用戶可以調用這些函數來實現某些
數學計算或數據類型的轉換,但有一些程序需要自己來定義函數,來實現一
些特殊的功能。
自定義函數格式如下:
Public Function 函數名(參數1,參數2……)[As 類型名]
[局部變量和常數聲明]
語句塊
[Exit Function]
[語句塊]
函數名=表達式
End Sub
①函數名的命名規則與變量名的命名規則相同,長度不超過40個字符。
②參數表是函數調用的紐帶。在定義函數時,參數表里定義的變量是形參
(不知道具體的數值,但必須知道數據類型),當程序的其他模塊調用函數時,
參數值一般就得到確認了,因此函數調用時,調用語句中參數表里填寫的是
實參(也就是實際的參數,有值的參數),要求實參的個數和類型必須與形參
的個數和類型相匹配。通過函數調用,代入參數值,求出函數的返回值,并
返回調用點。
③由于自定義函數有函數返回值,因此在定義函數時應指定返回值的類型,
如果省略As子句,缺省類型是可變型(Variant)。
④在程序體中,至少有一個形如“函數名=表達式”的語句,這樣,表達式的
計算結果才能作為函數的返回值,被送回調用點。函數名就像普通變量一
樣使用。
⑤自定義函數的調用跟VB中標準函數的調用方法相同。
⑥自定義函數執行過程中,可隨時退出函數過程,使用語句:Exit Function從
函數過程中退出。
例 素數:只能被1和它本身整除的自然數。要求編寫VB程序找出任意兩
個整數之間所有的素數及個數,程序運行界面如圖所示。
請根據算法將下列程序補充完整。
Function prime(a As Integer) As Boolean
  Dim j As Integer
  prime=True
  j=2
  Do While prime And j<=a\2
   If a Mod j=0 Then
     prime=False
     Exit Do
   End If
    ①   ????
  Loop
End Function
Private Sub Command1_Click( )
  Dim i As Integer,a As Integer,b As Integer
  Dim count As Integer
  a=Val(Text1.Text)
  b=Val(Text2.Text)
  For i=a To b
    If  ② ????=True Then
      List1.AddItem Str(i)
      count=count + 1
    End If
  Next i
  Label1.Caption="素數共有" + Str(count) + "個!"
End Sub
答案 ①j=j+1 ②prime(i)
解析 ①自定義函數prime的功能是判斷變量a是不是素數,判斷的方法是
用循環語句逐個測試2到a\2的整數中,是否存在能把a整除的數,如果有,那
么a就不是素數,用變量j來記錄測試的整數,因此每測試完一個j,需要將j加1。
②該處是判斷數i是不是素數,通過調用函數prime檢驗。
專題五 算法與VB語言基礎
探考情 悟真題
【考情探究】
考點 考試內容 考試要求 5年考情 預測熱度
考題示例 考向 難度
算法 及VB 語言 基礎 1.算法的表示——流程圖 b 2015浙江10月選考,5,2分; 2016浙江4月選考,5,2分; 2016浙江10月選考,5,2分; 2017浙江4月選考,6,2分; 2017浙江11月選考,5,2分; 2018浙江4月選考,7,2分; 2018浙江6月學考,5,2分; 2018浙江11月選考,5,2分; 2019浙江4月選考,6,2分; 2019浙江6月學考,5,2分 循環結構流程圖 ★★☆ ★★★
2.面向對象程序設計基礎 b 注:主觀題第一個程序題第1小題,分值為1分,整合至其他考點,真題此處不再羅列 程序界面設計中的控件、屬性、事件、方法等知識和概念 ★☆☆ ★★★
3. VB 語言 基礎 VB基本數據類型 c 注:本知識點是VB基礎知識中的重點,雖然考題中沒有直接考查該知識點,但其是讀懂代碼、分析代碼的基礎,分值整合至其他知識點中,真題此處不再羅列 整型、字符串型和邏輯型是熱門考點 ★★☆ ★★★
常量、變量的定義及使用 c 分析變量的作用和類型,是讀懂程序的關鍵,變量定義語句后的注釋語句有時可作為參考 ★★☆ ★★★
基本運算、表達式及常用標準函數 c 2018浙江6月學考,11,5分; 2019浙江1月學考,5,2分 取整函數Int、整數除\、求余Mod、隨機函數Rnd、字符串處理函數Mid和Len是學考熱門考點 ★★☆ ★★★
4.VB 基本 語句 賦值語句 c 2016浙江10月選考,11,2分; 2019浙江4月選考,14,5分 每一道程序題都是VB語句的綜合應用,需要熟練掌握這三種基本語句 ★☆☆ ★★★
判斷語句 ★★☆ ★★★
循環語句 ★★★ ★★★
5.數組的定義及使用 c 2015浙江10月選考,12,2分; 2017浙江11月選考,11,2分; 2017浙江11月選考,17,6分; 2018浙江4月選考,11,2分; 2018浙江11月選考,11,2分;2019浙江4月選考,11,2分 數組加循環 ★★★ ★★★
6.過程與自定義函數 c 2015浙江10月選考,17,3分; 2017浙江4月選考,17,6分; 2018浙江4月選考,17,6分; 2019浙江4月選考,17,6分 ★★★ ★★★


分析解讀  選、學卷分開后,整份試卷中,算法與程序的分值加大了,由原來的20分增加到26分,分值組成如下:
合卷時20分包括:3個選擇題(1個流程圖分析題、第11題和第12題,共6分)和3個填空題(第14題5分、第16題3分和第17題6分)。
分卷時26分包括:6個選擇題(第7至第12題,每題2分)和2個填空題(第15題7分和第16題7分)。
可見分卷后,對算法和程序的考查加強了。到目前為止,分卷的學考卷已經有兩份(2019年1月和2019年6月),分卷的選考卷尚且沒有(2020年1月為第一次),只有樣卷。分析樣卷,可以發現程序的題型和考法變得多樣。
1.6個選擇題預測如下:
①流程圖保留,題型為選擇題,容易題。
②新增考查表達式、運算符和函數,題型為選擇題,容易題。
③新增考查字符串處理和循環語句,題型為選擇題,中等難度。
④新增考查數組和循環語句,題型為選擇題,中等難度。也可能考查數據庫連接的相關知識。
⑤第11題或第12題中必有一題考對分算法或排序算法,較難。
⑥第11題或第12題中通常有一個數組運用題,較難。
2.2個填空題預測如下:
第15題:相當于將合卷時的第14題和第16題整合,共7分,第1小題仍然考查面向對象基礎知識;后3個小題,一般是2個代碼填空,1個代碼改錯。可能還有一個算法分析填空。一般考排序算法或對分算法的運用,中等偏上的難度。
第16題:相當于合卷時的第17題,通常有1個算法分析填空,3個代碼填空。一般考數組、自定義函數及算法的綜合運用,比較熱門的有:矩陣、動態規劃、加密解密、壓縮解壓、區間合并等問題。本題是考卷的最難題,往往花費較多時間,需要考生合理分配時間。
熟練掌握數組和VB基本語句語法,是解題的關鍵點。分卷后對數組的考查明顯加強了,難題和大題往往都是數組和語句的綜合運用,甚至排序算法和查找算法也是基于數組和語句的運用。
破考點 練考向
【考點集訓】
考點一 算法的表示——流程圖
1.(2019金華十校期末調研考試)某算法的部分流程如圖所示,輸入“40”并執行這部分流程后,輸出的sum的值是(  )
                    

A.91 B.90 C.21 D.1275
答案 A 
2.(2018寧波十校聯考,5,2分)某算法流程圖如圖所示,執行這部分流程,變量sum的值為(  )

A.1 B.3 C.4 D.0
答案 A 本題考查循環結構流程圖。變量x與sum的變化過程如下:初值x=11,sum=0;第1次進循環,sum=0+1-11 mod 2=0,x=5;第2次進循環,sum=0+1-5 mod 2=0,x=2;第3次進循環,sum=0+1-2 mod 2=1,x=1;第4次進循環,sum=1+1-1 mod 2=1,x=0;退出循環。因此sum=1。


3.(2018 浙南名校聯盟期末考試)某算法的部分流程圖如圖所示。執行這部分流程圖后,輸出s的值是(  )

A.15 B.-4 C.-5 D.-6
答案 B 
4.(2019寧波新高考選考適應性考試)某算法流程圖如圖所示,執行該算法,輸出s的值是(  )

A.1.333333 B.0.5 C.-2 D.3
答案 C 
考點二 面向對象程序設計基礎
1.在Visual Basic窗體中,當前對象的屬性窗口如圖所示,下列說法正確的是(  )

A.Command1是對象名 B.True為屬性名
C.Font為屬性值 D.該對象的寬度值為495
答案 A 
2.(2018紹興期末調測)要使程序運行時,按鈕Command1上顯示“轉換”,下列方法不可行的是  (單選,填字母:A.界面設計時,選中對象 Command1,設置 Caption 屬性為“轉換” /B.在 Form_Load 事件處理過程中添加語句 Command1.Caption = "轉換" / C.在Form_Load事件處理過程中添加語句 Command1.Text="轉換")。?
答案 C 
3.(2018浙江十校聯盟選考適應性考試,14,1分)編寫如下程序:

設計如圖所示的程序界面,至少要使用   個類(填數字)。?
答案 4


考點三 VB語言基礎
1.(2019浙南名校聯盟第一次聯考)下列VB 表達式中,只隨機產生9 到99 之間偶數的是(  )
A.Int(Rnd*90+10) B.Int(Rnd*90+9)
C.Int(Rnd*45)*2+10 D.Int(Rnd*45)*2+9
答案 C 
2.(2019浙江“七彩陽光”聯盟期初聯考)下列表達式的運算結果與其他選項不同的是(  )
A.6 Mod 3 * 3 B.Asc(“F”) -64
C.Int(Sqr(50)) -1 D.Mid(“123456”, 6, 1)
答案 D 
3.(2019第一學期五校聯考)如果一個整數是另一個整數的平方,則稱該數是“完全平方數”。下列表達式能判斷整數 m 為完全平方數的是(  )
①(Sqr(m))^2=m
②Int(Sqr(m))=Sqr(m)
③m/Int(Sqr(m))= m\Int(Sqr(m))
④Int(Sqr(m))^2=m
A.①② B.②③ C.②④ D.③④
答案 C 
考點四 VB基本語句
1.有一VB程序的功能如下:在文本框Text1中輸入一串數字,以逗號分割。程序運行后,在標簽Label1中輸出字符串中的最大數。例:在文本框Text1中輸入“12,23,9,45,98,58,”,運行結果為在標簽Label1中顯示“98”。部分程序如下:
s = Text1.Text
j=1:n=0
Do While j <= Len(s)
c = Mid(s, j, 1)
If c = "," Then
  ① ?
If x > Max Then Max = x
n = 0
 Else
 ② ?
 End If
 ③ ?
Loop
Label1.Caption = "最大值:" +Str(Max)
程序段劃線處應填(  )
A.①x =Val(Mid(s, j - n, n)) ②n=n+1 ③j=j+1
B.①x =Val(Mid(s, j - n, n)) ②j=j+1 ③n=n+1
C.①x =Val(Mid(s, j -n + 1,n)) ②n=n+1 ③j=j+1
D.①x =Val(Mid(s, j - n + 1, n)) ②j=j+1 ③n=n+1
答案 A 
2. (2018浙江紹興柯橋選考模擬,14,5分)編寫一個“二進制數轉十六進制數”的 VB 程序,實現如下功能:在文本框 Text1中輸入一個二進制數,單擊“轉換”按鈕 Command1,在文本框 Text2 中顯示對應的十六進制數。程序界面如圖所示:

(1)實現上述功能的 VB 程序如下,請在劃線處填入合適的代碼。
Private Sub Command1_Click()
Const w = "0123456789ABCDEF"
Dim i As Integer, n As Integer, c As String, s As String, s2 As String
s = Text1.Text

For i=1 To 4 - Len(s)Mod 4
s="0"+s
Next i
i = 1: n = 0
Do While i <= Len(s)
  ① ?
 n = n * 2 + Val(c)
 If ②  Then?
  s2 = s2 +Mid(w, n + 1, 1)
  n = 0
 End If
 i = i + 1
Loop
Text2.Text = s2
End Sub
(2)若刪除程序中加框部分的代碼,在文本框 Text1 中輸入“1101011010”,單擊“轉換”按鈕后,文本框 Text2 中顯示的內容是   。?
答案 (1)①c=Mid(s,i,1) ②i Mod 4=0 (2)D6

考點五 數組的定義及使用
1.(2018浙江十校聯盟選考適應性考試)有如下VB程序段:
For i = 1 To 10
b(a(i) Mod 10) = b(a(i) Mod 10) + 1
b(a(i) \ 10) = b(a(i) \ 10) + 1
Next i
num = 0
For i = 0 To 9
If b(i) >num Then num = b(i)
Next i
數組b各元素初始值為0,數組元素a(1)到a(10)的值依次為“68,17,24,30,36,40,55,58,61,66”,執行該程序段后,num的值為(  )
A.2 B.3 C.4 D.5
答案 D 


2.有如下VB程序段:
Dim a(1 To 10) As Integer
Dim s(1 To 10) As Integer
Private Sub Form_Load()
a(1) = 3: a(2) = 6: a(3) = 8: a(4) = 4: a(5) = 9
a(6) = 5: a(7) = 3: a(8) = 3: a(9) = 10: a(10) = 5
End Sub
Private Sub Command1_Click()
Dim i As Integer, t As Integer
s(1) = a(1)
For i = 2 To 10
  s(i) = s(i - 1) + a(i)
Next i
t =s(8) - s(4)
Text1.Text = Str(t)
End Sub
程序運行后,文本框Text1顯示的內容是(  )
A.24 B.12 C.7 D.20
答案 D 
3.有如下VB程序段:
Dim a(1 To 5)As Integer,i As Integer,c As Integer
a(1)=2:a(2)=1:a(3)=3:a(4)=4:a(5)=5
c=0
For i=3 To 5
  If a(i-2)+a(i-1)=a(i) Then c=c+1
Next i
Text1.Text=Str(c)
該程序段運行后,文本框Text1中顯示的內容是(  )
A.1 B.2 C.3 D.4
答案 B 
4.某VB程序段如下:
For i = 1 To 5
 b(a(i)) = b(a(i)) + 1
Next i
pa = 0
For j = 1 To 10
 For k = 1 To b(j)
  pa= pa +1 : a(pa) = j
 Next k
Next j
a(1)到a(5)的初值依次是7、5、9、4、3,程序段運行后,數組a值依次是(  )
A.7,9,5,4,3 B.3,4,5,7,9
C.4,5,7,9,3 D.9,7,5,4,3
答案 B 
考點六 過程與自定義函數
1.找出所有兩位整數中的“鏡反平方數對”。所謂“鏡反平方數對”是指數對n與m,它們滿足條件:①n與m不含有數字0,且n小于m;②n的反序數是m,n的平方數的反序數等于m的平方。例如12與21,12的平方是144,其反序數是441,而21的平方正好等于441,所以12與21是鏡反平方數對,請完善程序代碼。
Private Sub Command1_Click()
 Dim i As Integer, fm As Integer, st As String, n As Integer
 For i = 11 To 99
  If  ①  Then?
    n =i : fm = fx(n)
    If validate(i, fm) And i < fm Then
     st = i & “ ^ 2=” & i ^ 2 & “,” & fm & “^2=” & fm ^ 2
List1. AddItem st
    End If
  End If
 Next i
End Sub
Private Function fx(j As Integer) As Integer
Dim s As String
Do While j <> 0
  ② ?
 j = j \ 10
Loop
fx = Val(s)
End Function
Private Function validate(p As Integer,q As Integer) As Boolean
If fx(p ^ 2) = q ^ 2 Then validate = True
End Function
答案 ①i Mod 10 <> 0 ②s = s + Str(j Mod 10)


2.某游戲規則如下:將2*n位隊員按2人一組分成n個隊(n<10),地面上有一排格子,共2*n個,每個格子都對應一個小于10的隨機正整數。游戲開始后,所有隊員都選擇站到一個空的格子里,等他們站滿格子后,開始為每位隊員進行記分。記分規則:每組有甲、乙兩個隊員,甲隊員的分數是從自己所站的格子開始,按照格子序號遞減,將這些格子中的數字一直累加到第1個格子。乙隊員的分數是從自己所站的格子開始,按照格子序號遞增,一直將格子中的數字累加到第2*n個格子。如果同一隊的兩名隊員得到的分數相同,則該組參賽隊獲勝。
例如:如圖所示,有4個隊8位隊員,地上一排格子的數字依次為:2、1、1、7、9、2、5、6。若某隊甲隊員站在第4個格子,則其分數為2+1+1+7=11;乙隊員站在第7個格子,則其分數為:5+6=11。兩者相等,則該隊獲勝。

(1)假設有3組隊員,地上一排格子的數字依次為:6、7、3、4、3、9。若某組甲隊員站在第3個格子上,那么該組乙隊員站在第  個格子上才能獲勝。?

(2)實現上述功能的VB程序如下。請在劃線處填入合適的代碼。
Dim n As Integer
Dim gz(1 To 20) As Integer
Private Sub Command1_Click()
Dim dfa As Integer, dfb As Integer
Dim ta As Integer, tb As Integer
  ①  ?
Randomize
For i = 1 To 2 * n
  gz(i) = Int(Rnd* 9 + 1)
  List1.AddItem "gz(" & i & ")" & gz(i)
Next i
num = 1
For j = 1 To 2 * n
  ta = j
  dfa = zwdf(ta, True)
  For k = 1 To 2 * n
   tb = k
     ②  ?
   If dfa = dfb Then
    List2.AddItem num & "甲隊員("& j &")得分=" & dfa & "乙隊員("& k & ")得分="& dfb
    num = num + 1
   End If
  Next k
Next j
List2.AddItem "獲勝的站法共有:"+  ③  + "種"?
End Sub
Function zwdf(p As Integer, r As Boolean) As Integer
Dim fs As Integer
If r = True Then
   ④  ?
  fs = fs +gz(i)
 Next i
Else
 For i = p To 2 * n
  fs = fs +gz (i)
 Next i
End If
zwdf = fs
End Function
答案 (1)4 (2)①n=Val(Text1.Text) ②dfb=zwdf(tb, False) 或 dfb=zwdf(k, False) ③Str(num-1)
④For i = p To 1 Step -1 或 For i = 1 To p

【五年高考】
考點一 算法的表示——流程圖
2015—2019年真題·提升題組
1.(2019浙江6月學考,5,2分)十進制數轉換為二進制數的算法流程圖如圖所示,當輸入十進制數 63 時,該流程圖中循環體執行的次數為(  )
                    
A.4 B.5 C.6 D.7

答案 C 
2.(2019浙江4月選考,6,2分)某算法的部分流程圖如圖所示。執行這部分流程后,輸出 c,s的值分別是(  )

A.8,10 B.10,14 C.12,6 D.12,24
答案 B 
3.(2018浙江11月選考,5,2分)某算法的部分流程圖如圖所示。執行這部分流程,分別輸入35、50、60,則輸出值依次為(  )

A.10,3 B.10,4 C.7,10,4 D.10,12,3
答案 B 
4.(2018浙江6月學考,5,2分)某算法的部分流程圖如圖所示,以下說法正確的是(  )

A.該流程執行后,變量k的值是-1
B.該流程執行后,變量a的值是16
C.該流程用于計算并輸出1+8-16的值
D.該流程完整執行1次,“a<32?”共執行了3次
答案 D 
s k a
初值 1 1 8
第1次循環 1+1*8=9 0 16
第2次循環 9+0*16=9 1 32


最后k=1,a=32,s=1+1*8+0*16=9。變量k的值在0和1之間切換。循環體進入2次,循環條件判斷了3次,最后一次條件不成立,退出循環。
5.(2018浙江4月選考,7,2分)某算法部分流程圖如圖所示。執行這部分流程,依次輸入 12、-5、29、18、7,則輸出值是(  )

A.12 B.-5 C.29 D.7
答案 C 
6.(2017浙江11月選考,5,2分)某算法的部分流程圖如圖所示,執行這部分流程后,輸出a,b的值分別是(  )

A.5,8 B.4,8 C.5,11 D.4,11
答案 C 
7.(2017浙江4月選考,6,2分)某算法的部分流程圖如圖所示。執行這部分流程,依次輸入3,4,-1,則輸出s的值是(  )

A.-2 B.-1 C.0 D.1
答案 B  

8.(2016浙江10月選考,5,2分)某算法的部分流程圖如圖所示,執行這部分流程后,變量a,b的值分別是(  )

A.3,3 B.3,4 C.6,6 D.7,11
答案 D 
9.(2016浙江4月選考,5,2分)某算法的部分流程圖如圖所示,執行這部分流程后,變量x的值是(  )

A.0 B.1 C.2 D.3
答案 B 
考點二 面向對象程序設計基礎
考點三 VB語言基礎
2015—2019年真題·提升題組
1.(2019浙江1月學考,5,2分)下列 VB 表達式的值等于8的是(  )
A.Abs(-8.3) B.Int(Rnd*7+1)
C.Len(“2+6”) D.18 Mod 10
答案 D 
2.(2015浙江3月學考,3分)下列屬于Visual Basic實數常量的
是(  )
A.0.618 B.1/2 C.True D.“2014-9-1”
答案 A 
3.(2015浙江3月學考,3分)在Visual Basic中,若x是3的倍數,則下列表達式值一定為真的是(  )
A.x/3=0 B.x*3=0 C.x Mod 3=0 D.3-x=0
答案 C 
4.(2018浙江6月學考,11,5分)素數只能被1和它本身整除,不能被其他自然數整除。編寫VB程序實現如下功能:單擊“產生奇數并判斷”按鈕Command1,隨機產生一個三位正奇數顯示在文本框Text1中,并在文本框Text2中顯示其是不是素數的判斷結果。例如,當隨機產生的三位正奇數為953時,程序運行界面如圖a所示。

 圖a            圖b
(1)在設計程序界面時,應使用圖b所示“控件工具箱”中的    (填寫相應編號)添加文本框Text1。?
(2)實現上述功能的VB程序如下,請在劃線處填寫合適的代碼。
 Private Sub Command1_Click()
  Dim n As Integer, i As Integer
  Dim flag As Boolean ’用于標記是不是素數
  Randomize
  n = Int(  ①  )*2-1?
  Text1.Text = Str(n)
  flag = True ’標記為素數
  i = 3
  Do While i <= n - 1 And flag = True
   If n Mod i = 0 Then
    flag = False
   End If
   i = i + 2
  Loop
  If  ②   Then?
   Text2.Text = Str(n) + "是素數"
  Else
   Text2.Text = Str(n) + "不是素數"
  End If
 End Sub
(3)以下選項中,與加框處表達式“n Mod i = 0”等價的是  (單選,填字母)。?
A.n \ i = Int(n / i) B.n \ i = n/ i C.n Mod i = n \ i
答案 (1)② (2)①Rnd*450+51 或其他等價表達式
②flag或flag=True或 i>n-1或i=n或i>=n或其他等價表達式 (3)B
考點四 VB基本語句
2015—2019年真題·提升題組
1.(2016浙江10月選考,11,2分)對稱字符串的特征是從左到右讀和從右到左讀完全一樣。如“abba”是對稱的,“abcba”也是對稱的。判斷字符串是否對稱的VB程序段如下:
n=Len(s)
k=0:j=n
For i=1 To n/2
         
Next i
If k=0 Then
  Label1.Caption="對稱"
Else
  Label1.Caption="不對稱"
方框中的代碼由以下三部分組成:
①j=j-1
②If c1 <>c2 Then k=k + 1
③c1= Mid(s,i,1):c2=Mid(s,j,1)
                    
代碼順序正確的選項是(  )
A.①③② B.②③① C.③②① D.②①③
答案 C 
2.(2019浙江4月選考,14,5分)小王設計“模擬撤銷”程序,需要用一個“歷史記錄”, “歷史記錄”是在對字符串s進行插入或刪除時,將每步操作信息依次存儲得到的,操作信息由操作符(“+”表示插入,“-”表示刪除)、操作位置和操作字符串(只包含英文字母)構成,例如,“+23abc”表示在字符串s第23個位置插入了“abc”, “模擬撤銷”過程按照“歷史記錄”的逆序進行,將字符串s的內容恢復到初始狀態。對字符串“Book”的操作與撤銷過程,如圖a所示。

圖a
小王編寫的“模擬撤銷”VB程序如下,文本框 Text1中的內容是撤銷前字符串,文本框Text2中的內容是歷史記錄,單擊“撤銷”按鈕Command1后,在標簽Label1中顯示撤銷過程,程序運行界面如圖b所示。

圖b
(1)實現上述功能的VB程序如下,在程序中出現的對象沒有Caption屬性的是    。(選填,填字母:A.Label1/B.Command1/C.Text1和Text2)?
(2)請在劃線處填入合適的代碼。
Private Sub Command1_Click()
 Dim s As String, t As String,ch As String
 Dim c As String, num As String, ss As String
 Dim n As Integer,i As Integer
 s = Text1.Text: t = Text2.Text
 c = "": num = "": ss = s
 For i = Len(t) To 1 Step -1
    ① ?
  If ch >= "a" And ch <= "z" Or ch >= "A" And ch = "Z" Then
   c =ch + c
  ElseIf ch >= "0" And ch <= "9" Then
   num =ch + num
  Else
   n = Val(num)
   If ch = "-" Then
    s = Mid(s, 1, n - 1) + ② ?
   Else
    s = Mid(s, 1, n - 1) + Mid(s, n + Len(c), Len(s) - n - Len(c) + 1)
   End If
   ss = ss + "→" + s
   c = "": num = ""
  End If
 Next i
 Label1.Caption = ss
End Sub
(3)運行該程序,若文本框Text1中的內容是"April",文本框Text2中的內容是"-3p+3ri-6e",單擊撤銷按鈕,For循環語句執行完成后,字符串s的值是"    "。?
答案 (1)C (2)①ch=Mid(t,i,1) ②c+Mid(s,n,Len(s)-n+1) (3)Apple

考點五 數組的定義及使用
2015—2019年真題·提升題組
1.(2019浙江4月選考,11,2分)有如下VB程序段:
flag = true : i = 1
Do While i <= 6
  x =Int(Rnd * 100) + 1
  If flag Or x >50 Then
     a(i)=x
     flag = Not flag
     i = i + 1
  End If
Loop
執行該程序段后,在下列選項中,a(1)~a(6)各元素值不可能的是(  )
A.52,95,46,74,77,83 B.50,55,46,70,21,97
C.62,78,57,61,69,50 D.31,54,48,72,50,82
答案 C 
2.(2018浙江11月選考,11,2分)有如下VB程序段:
For i=1 To 6
 a(i)=Int(Rnd*10)+1
Next i
For i=1 To 5
If i Mod 2=1 And a(i) > a(i+1) Then
   t=a(i):a(i)=a(i+1):a(i+1)=t
Else
   a(i)=a(i)+1
End If
Next i
執行程序后,a數組各元素可能是(  )
                    
A.11,11,7,9,3,9 B.6,2,8,10,5,9
C.6,9,3,7,8,12 D.3,9,0,8,2,7
答案 A 
3.(2018浙江11月選考,12,2分)下列VB程序功能為:根據文本框Text1中各字符的大小關系,計算各字符升序排列的序號,并將序號保存在數組y中。如文本框內容為“2011”,程序運行后y(1)~ y(4)各元素的值分別為“4,1,2,3”。
s=Text1.Text
n=Len(s)
For i=1 To n
 y(i)=1
Next i
For i=1 To  (1) 
 For j=  (2) To n
  If  (3) Then
   y(j)=y(j)+1
  Else
   y(i)=y(i)+1
  End If
 Next j
Next i
上述程序段3個加框處的表達式分別為(  )
A.(1)n  (2)1  (3)Mid(s, j, 1)>=Mid(s, i, 1)
B.(1)n (2)1 (3)Mid(s, j, 1)>Mid(s, i, 1)
C.(1)n-1 (2)i+1 (3)Mid(s, j, 1)>=Mid(s, i, 1)
D.(1)n-1 (2)i+1 (3)Mid(s, j, 1)>Mid(s, i, 1)
答案 C                    
4.(2018 浙江4月選考,11,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.12 B.8 C.5 D.4
答案 A 
5.(2017 浙江 11 月選考,11,2 分)有如下 VB 程序段:
n=0
For i=1 To Len(Text1.Text)
 c=Mid(Text1.Text,i,1)
 If c>="0"And c<="9" Then m=1 Else m=2
 a(m)= a(m)+1
 If a(m) = 1 Then n=n+1
Next i
數組 a 中各元素的初始值都為 0,文本框 Text1 中的內容為“Happy2017”。 執行該程序段后,變量 n 的值為 (  )
A.1 B.2 C.4 D.9
答案 B 
6.(2017浙江11月選考,17,6分)由數組 a 生成數組 b 的方法描述如下:
1)將數組a中的n個元素依次分割出若干個數據塊,每個數據塊有m×m個元素,m最大值為8,最小值為2。分割時,按盡可能大的數據塊進行分割。
2)對每個分割出的數據塊用“方陣轉換法”進行轉換,每次轉換后得到的數據塊依次存儲到數組b中。
3)數組a分割后的剩余元素(個數小于4),直接依序存儲到數組b中。
例如n=140時,可依次分割出3個數據塊,元素個數分別為64(8×8)、64(8×8)、9(3×3),剩余元素為3個。
“方陣轉換法”過程如下:將數據塊中m×m個元素按行序排列成一個數字方陣,從該數字方陣中按列序得到轉換后元素的次序。
以3×3 數據塊為例,轉換過程如圖所示:

小明依據上述描述設計了如下 VB 程序。請回答下列問題:
(1)當n=120時,分割出的第3個數據塊元素個數為   。?
(2)請在劃線處填入合適的代碼。
Const n=120
Dim a(1 To n)As Integer
Dim b(1 To n)As Integer
Private Sub Command1_Click()
 Dim m As Integer,i As Integer
 Dim Start As Integer ’當前未分割數據的第1個元素下標
 Dim Left As Integer ’當前未分割數據的個數
 Dim pa As Integer ’數組a的下標
 Dim pb As Integer ’數組b的下標
 ’讀取n個轉換前的數據,依次存儲到a(1)、a(2)、……、a(n)中,代碼略
 m=8
 Start=1
 Left=n
 Do While Left>3
  If Left   m=   ①   ?
  Else
   pa=Start
   pb=Start
   For i=1 To m*m
    b(pb)=a(pa)
    pb=pb+1
    If i Mod m=0 Then
      ②   ?
    Else
     pa=pa+m
    End If
   Next i
    ③   ?
   Start=Start+m*m
  End If
 Loop
 For i=Start To n
  b(i)=a(i)
 Next i
’依次輸出轉換后的數據 b(1)、b(2)、……、b(n),代碼略
End Sub
答案 (1)4 (2)①m-1 或其他等價表達式
②pa=Start+i\m 或 pa=pa-(m-1)*m+1或其他等價語句
③Left=Left-m*m 或 Left=n-Start-m*m+1或其他等價語句
7.(2016浙江4月選考,17,6分)某數據壓縮方法描述如下:
1)原始數據中,某數不為0且相鄰無重復,壓縮數據用該數據表示;
2)原始數據中,某數為0且相鄰無重復,壓縮數據用兩個數表示,第1個為0,第2個為0;
3)原始數據中,某數據相鄰有重復,壓縮數據用3個數表示:第1個為0,第2個為重復數的個數,第3個為該數本身;
根據上述壓縮方法,對應的解壓縮方法示例如圖a所示。

圖a
小明編寫了一個解壓縮VB程序,功能如下:窗體加載時,自動讀取壓縮數據,依次存儲在數組元素a(1)、a(2)、a(3)……中,壓縮數據的個數存儲在變量n中,壓縮數據顯示在文本框Text1中。單擊“解壓縮”按鈕Command1,程序對壓縮數據依次進行解壓縮處理,解壓縮數據顯示在文本框Text2中。程序運行界面如圖b所示。

圖b
(1)如果壓縮數據為“23,0,21,66,0,0,77,0,5,0”,則解壓縮數據的個數是     。?
(2)實現上述功能的VB程序如下。請在劃線處填入合適代碼。
Dim a(1 To 100) As Integer ’存儲壓縮數據,最大處理個數為100
Dim b(1 To 1000) As Integer ’存儲解壓縮數據,最大處理個數為1000
Dim n As Integer ’存儲壓縮數據的個數
Private Sub Form_Load()
’壓縮數據由上述壓縮方法生成
’本過程用于讀取壓縮數據并存儲在數組a中,壓縮數據個數存儲在變量n中
’代碼略
End Sub
Private Sub Command1_Click()
Dim pa As Integer ’存儲壓縮數組當前處理位置
Dim pb As Integer ’存儲解壓縮數組當前處理位置
Dim firstdata As Integer, count As Integer, i As Integer
pa=1:pb=1
Do While pa <=n
 firstdata=a(pa)
 If firstdata <> 0 Then ’示例1)情況處理
   b(pb)=firstdata
   pa=pa+1:pb=pb+1
 Else
   count=a(pa+1)
   If count=0 Then  ’示例2)情況處理
    b(pb)=0
    pa=   ①   :pb=pb+1?
   Else        ’示例3)情況處理
    For i=1 To count
        ②   ?
    Next i
    pa=pa+3: pb=pb+count
   End If
 End If
Loop
Text2.Text=Str(b(1))
For i=2 To ③ ?
 Text2.Text=Text2.Text+","+Str(b(i))
Next i
End Sub
答案 (1)29 (2)①pa+2 ②b(pb+i-1)=a(pa+2)
③pb-1

考點六 過程與自定義函數
2015—2019年真題·提升題組
1.(2019浙江4月選考,17,6分)給定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個區間依次為[10,50],[30,80],數組各元素為“12,44,34,45,66,50,45,70”,則第1段“重疊塊”中的元素個數為    。?
(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  ① ?
  If IsIn(i, p) Then
   If IsIn(i,p+1) Then
    LL = LL + 1
   Else
      ②  ?
    LL = 0
   End If
   i = i + 1
  Else
   c(2 * p - 1) = L
   c(2 * p) = LL
   L = 0
   LL=0
   p = p + 1
  End If
 Loop
 If i <= n Then
  c(2*p-1)=n-i+1
 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 p>m Then
 IsIn=False
Else
  If ③ Then IsIn=True Else IsIn=False?
End If
End Function
答案 (1) 3(2)①i<=n And p<=m或其他等價表達式
②L=L+LL+1或等價語句
③a(i)>=b(2*p-1) And a(i)<=b(2*p)

2.(2018浙江4月選考,17,6分)為分析數組 a 中各元素依次變化的情況,進行如下定義:
1)變化段:數組中相鄰兩個元素構成一個變化段。變化段有上升段(a(i)>a(i-1))、下降段(a(i)2)波峰:從上升段轉到下降段形成一個波峰。波峰的起點是峰頂前所有連續上升段中的第1 個,終點是峰頂后所有連續下降段中的最后 1 個。
3)對稱波峰:上升段與下降段個數相同的波峰稱為對稱波峰。
下圖為一組數據的變化段及波峰示意圖。

現要求統計數組 a 各元素依次變化過程中“對稱波峰”的個數。小李依據上述描述設計如下VB 程序。請回答下列問題:
(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-1
  flag=-1
 End If
Next i
If IsSymPeak(flag, steps) Then count=count+1
Text1.Text=Str(count)
End Sub
Function IsSymPeak(flag As Integer, steps As Integer) As Boolean
If   ③    Then?
 IsSymPeak=True
Else
 IsSymPeak=False
End If
End Function
答案 (1)3 (2)①2 ②steps=1 ③flag=-1 And steps=0

                    
3.(2017浙江4月選考,17,6分)小王編寫了一個依據成績計算名次的VB程序,成績為0到100之間的整數。算法的基本思想:先統計每個分數的個數,然后按照分數從高到低依次計算每個有效分數(該分數的個數不為0)對應的名次,分數相同時名次并列。最高分為第1名,該分數的名次與個數之和為下一個有效分數的名次,以此類推。程序用數組A存放每個分數對應的個數,數組B存放每個分數對應的名次。例如,下表中最高分100有2個,并列第1名,則分數96的名次為分數100的名次加上分數100的個數,即第3名。
分數 100 99 98 97 96 95 94 … 0
個數(A數組) 2 0 0 0 1 0 3 … 0
名次(B數組) 1 3 4 …


程序運行時,學生數據顯示在列表框List1中,單擊“計算”按鈕Command1,計算結果顯示在列表框List2中,程序運行界面如圖所示。

實現上述功能的VB程序如下,請回答下列問題:
(1)如上表所示,若分數93的個數為2,則該分數對應的名次為    。?
(2)請在劃線處填入合適的代碼。
Dim sName(1 To 50) As String   ’存放學生姓名
Dim sScore(1 To 50) As Integer ’存放學生分數
Dim recCount As Integer ’存放學生人數
Private Sub Form_Load()
’本過程從數據庫中讀取學生數據,存儲在相應的變量中,并在List1中顯示
’代碼略
End Sub
’整數轉換成長度固定的字符串
Function ads(x As Integer, n As Integer) As String
 Dim sx As String, nx As Integer, i As Integer
 sx=Str(x):nx=Len(sx)
 For i=1 To n - nx
  sx=" "+sx
 Next i
    ①   ?
End Function
Private Sub Command1_Click()
Dim A(0 To 100) As Integer ’存放每個分數的個數
Dim B(0 To 100) As Integer ’存放每個分數的名次
Dim mc As Integer, score As Integer, i As Integer
For i=0 To 100
 A(i)=0
Next i
For i=1 To recCount ’計算每個分數的個數
    ②   ?
Next i
mc=1
For i=100 To 0 Step -1 ’計算每個分數的名次
 If A(i) <> 0 Then
B(i)=mc
   ③   ?
 End If
Next i
List2.Clear
List2.AddItem " 姓名 分數 名次 "
List2.AddItem "---------------- "
For i=1 To recCount
 score=sScore(i)
 mc=B(sScore(i))
 List2.AddItem sName(i)+ads(score, 5)+"第"+ads(mc, 3)+"名"
Next i
End Sub
答案 (1)7 (2)①ads=sx ②A(sScore(i))=A(sScore(i))+1 ③mc=A(i)+B(i) 或 mc=mc+A(i)
解析 (1)根據排名方法:最高分為第1名,該分數的名次與個數之和為下一個有效分數的名次,以此類推。93分之前的有效分數是94分,排第4名,并且有3個94分,因此4+3=7即為93分的名次。
(2)由于分數和名次的數據位數不一樣,為了保證輸出的時候能排列整齊,因此自定義一個函數ads來處理。在自定義函數結束前,必須要給函數名賦值,確保有函數的返回值。變量sx是處理完畢的字符串,因此將sx賦值給函數名,所以①處為ads=sx。變量recCount存儲學生的總人數,數組sScore存儲每位學生的分數,因此sScore(1)、sScore(2)、……、sScore(recCount)分別是第1位、第2位、……、第recCount位學生的分數。數組A存放每個分數的人數,如A(90)存的是90分的人數。用For語句將所有學生的分數統計一遍,計算方法是:A(sScore(i))=A(sScore(i))+1,如統計到第i位學生,若分數是90,則sScore(i)=90,則相當于A(90)=A(90)+1,即90分的人數加1。數組B存放每個分數的名次。從③處前一行代碼:B(i)=mc可得出,mc中存放當前有效分數的名次值,因此③處應該計算下一個有效分數的名次值。當前分數的名次B(i)與個數A(i)之和即為下一個有效分數的名次,因此下一個有效分數的名次為mc=A(i)+B(i)。而mc在賦值之前,存的是當前分數的名次B(i),因此③處也可以填mc=A(i)+mc。
 教師專用題組
                    
1.(2016浙江溫州十校聯考,11,2分)VB表達式9\8/2+12 Mod 3*3的值是(  )
A.0.5 B.7 C.3.5 D.5
答案 D 
2.下列Visual Basic表達式中,與表達式Not x>1功能相同的是(  )
A.x<1 B.x>1 C.x>=1 D.x<=1
答案 D 
3.下面四個程序段中,運行后變量a的值最小的是(  )
A.a=35
n=4
For i=1 To n
 a=a*i
 a=a\i
Next i     B.a=35
n=4
For i=1 To n
 a=a\i
 a=a*i
Next i
C.a=35
n=4
For i=n To 1 step-1
 a=a*i
 a=a\i
Next i D.a=35
n=4
For i=n To 1 Step-1
 a=a\i
 a=a*i
Next i
答案 D 
4.(2016浙江名校新高考研究聯盟第一次選考聯考,14,5分)編寫VB程序,實現如下功能:在文本框Text1中輸入發放紅包的總金額s,在文本框Text2中輸入發放紅包的個數n,單擊“分配”按鈕(Command1),為n個紅包隨機分配金額,并在列表框List1中顯示分配后的這些金額,界面如圖1所示。

圖1圖2
(1)在設計應用程序界面時,應使用圖2所示“控件工具箱”中的    (填寫相應編號)添加列表框List1。?
(2)為實現上述功能,請在劃線處填入合適的代碼。
Private Sub Command1_Click()
 Dim s As Single,x As Single,n As Integer,i As Integer
 Randomize
 List1.Clear
 s=Val(Text1.Text)
 n=  ①  ?
 For i=1 To   ②  ?
  x=Int((Rnd()*s/(n-i)+0.005)*100)/100
  List1.AddItem Str(x)
  s=  ③  ?
 Next i
 x=Int((s+0.005)*100)/100
 List1.AddItem Str(x)
End Sub
答案 (1)4 (2)①Val(Text2.Text) ②n-1 ③s-x

5.貝貝有n個桃子,吃完后每三個桃核可以換一個桃子,編寫一個程序計算貝貝總共能夠吃到幾個桃子。
(1)若貝貝總共有7個桃子,則他最后可以吃到   個桃子。?
(2)修改程序中的錯誤。程序代碼如下:
Private Sub Command1_Click()
Dim n As Integer,ans As Integer
n=Val(Text1.Text)
ans=n
Do While n>3  ’①
 ans=ans+n\3
 n=n\3 ’②
Loop
Label2.Caption="總共能吃到的桃子數為:"+Str(ans)+"個"
End Sub
答案 (1)10 (2)①n>=3 ②n\3+n Mod 3

6.小明編寫統計字符串中出現最多的字母和數字的程序。程序運行如下:在文本框Text1中輸入一個僅包含字母和數字的字符串。單擊按鈕Command1后,在標簽Label1上顯示出現最多的數字字符,在標簽Label2上顯示出現最多的字母字符(字母不區分大小寫,例如字母G和g統計在一起)。程序運行界面如圖所示。

實現上述功能的VB程序如下,請在劃線處填入合適的代碼。
Private Sub Command1_Click()
Dim a (1 To 10) As Integer’存儲0~9每個數字出現的次數
Dim b(1 To 26) As Integer’存儲a~z每個字母出現的次數
Dim zf As String,x As String,p As Integer
Dim maxa As Integer,maxb As Integer
  ①  ?
For i=1 To Len(zf)
 x=Mid(zf,i,1)
 If pd(x)=1 Then
  p=Asc(x)-Asc("0")+1
  a(p)=a(p)+1
    ②  ?
  p=Asc(x)-Asc("A")+1
  b(p)=b(p)+1
 Else
  p=Asc(x)-Asc("a")+1
  b(p)=b(p)+1
 End If
Next i
k=a(1):maxa=1
For i=2 To 10
 If a(i)>k Then k=a(i):maxa=i
Next i
k=b(1):maxb=1
For i=2 To 26
 If  ③  Then k=b(i):maxb=i?
Next i
Label1.Caption="出現最多的數字是"+Chr(maxa+Asc("0")-1)
Label2.Caption="出現最多的字母是"+Chr(maxb+Asc("A")-1)
End Sub
Function pd(ch As String) As Integer’函數用于判斷每個字符的類型
 If ch>="0" And ch<="9" Then pd=2
 If ch>="A" And ch<="Z" Then pd=2
 If ch>="a" And ch<="z" Then pd=3
End Function
答案 ①zf=Text1.Text ②ElseIf pd(x)=2 Then
③b(i)>k

7.趣味數學題。小明使用VB編寫程序解一道有趣的數學題:將1到9這九個數字分成三個三位數,不能有重復,三個數字之間比例滿足1∶2∶3,求所有三位數組合。
程序界面如圖所示,當單擊“求解”按鈕Command1時,在列表框List1中顯示所有滿足條件的組合。

程序代碼如下,請在劃線處填上合適的代碼。
Dim a (0 To 9) As Integer
Private Sub Command1_Click()
 Dim i,n,m As Integer
 For i=123 To 333
  For n=1 To 9
   a(n)=0
  Next n
  s=0
  call fenjie(i)’使用call調用自定義過程,下同
  call fenjie(2*i)
  call fenjie(3*i)
  For m=1 To 9
s=   ①   ?
  Next m
  If s=9 Then List1.AddItem i&""&2*i&""&3*i
 Next i
End Sub
Sub fenjie(xAs Integer) ’自定義過程,將3位數分解并修改對應下標元素的值
 a(x Mod 10)=1
     ②    ?
 a(x\100)=1
End Sub
答案 ①s+a(m) ②a(x\10 Mod 10)=1或等價答案

8.(2016浙江4月選考,16,3分)某地1900—1999年的平均降水量數據保存在數據庫中。現要求找出相鄰兩年年平均降水量變化(即本年度與上年度“年平均降水量”差值的絕對值)最大的年份區間。如果有多個符合要求的年份區間,只輸入距今最近的。小吳為此編寫了VB程序,程序運行時,單擊按鈕Command1后,在文本框Text1中輸出運行結果。實現上述功能的VB代碼如下,但加框處代碼有錯,請改正。
Dim w(1 To 100)As Single’ 依次存儲1900—1999年的年平均降水量數據
Const n=100
Private Sub Form_Load()
????本過程從數據庫中按1900—1999年依次讀取年平均降水量數據,并存儲在數組w中
????代碼略
End Sub
Private Sub Command1_Click()
Dim i As Integer,imax As Integer
imax= 1  ????①
For i=3 To n
 If abs(w(i)-w(i-1))>=Abs(w(i-1)-w(i-2))Then imax=i????②
Next i
Text1.Text="年平均降水量變化最大的年份區間是"+Str(imax+1989)+"-"+Str(imax+1899)
End Sub
答案 ①2 ②Abs(w(imax)-w(imax-1)) 

9.(2015浙江10月選考,17,5分)某數據加密方法描述如下:
(1)以字節為單位進行加密處理;
(2)將1個字節的8位二進制數分割成前4位與后4位兩個二進制數;
(3)分別將上述兩個4位二進制數轉換為十進制數;
(4)將每個十進制數轉換為1個加密字符,對應的“密碼表”如下:
值(十進制) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
加密字符 I l i k e C H N P o s t c a r d


小明按照上述方法,設計了一個字符串(僅包含ASCII字符)加密的VB程序,功能如下:單擊“加密”按鈕Command1,程序依次將文本框Text1中每個字符的ASCII碼值作為1個字節轉換為兩個加密字符,連接這些加密字符,最后在文本框Text2中輸出加密結果。下表顯示了字符串中一個字符的加密過程:

程序運行效果如圖所示。

實現上述功能的VB程序如下:
(1)請在劃線處填入合適的代碼。
Private Sub Command1_Click()
 Dim n As Integer,s As String,i As Integer,ss As String
 Dim a As Integer ????存儲加密前字符的ASCII碼
 Dim b1 As Integer,b2 As Integer  ????分別存儲分割、轉換后的兩個十進制數
 s=Text1.Text
     ①    ?
 For i=1 To n
  a=Asc(Mid(s,i,1))
  b1=a\16
  b2=a Mod 16
  ss=ss+Code2Char(b1)+Code2Char(b2)
  Text2.Text=ss
 Next i
End Sub
????十進制值轉換為加密字符的函數
Function Code2Char(c As Integer)As String
 Dim s As String
 s="IlikeCHNpostcard"
 Code2Char=    ②       ?
End Function
(2)若將“密碼表”中值為“0”對應的加密字符“I”改成“i”,加密后的密文可能無法解密,原因是           。?
答案 (1)①n=Len(s)或n=Len(Text1.Text) ②Mid(s,c+1,1) (2)加密字符i對應兩個值0,2

【三年模擬】
A組 2018—2020年模擬·考點題組
考點一 算法的表示——流程圖
1.某流程圖如圖所示。執行該算法,下面說法錯誤的是(  )

                    
A.s的值最終為-5
B.語句“k=k+1”共執行了4 次
C.語句“s≤0”共判斷了5 次
D.該算法轉成VB 代碼時能用Do 循環語句實現
答案 A 


2.(2018浙江五校聯考第一次考試,6,2分)某算法的部分流程圖如圖所示,執行這部分流程,變量s的值為(  )

A.10 B.24 C.6 D.23
答案 B 
3.(2018紹興選考科目診斷性考試,5,2分)某算法的部分流程圖如圖所示,執行這部分流程后,變量x的值是(  )

A.5 B.4 C.6 D.10
答案 B 
4.(2018寧波十校聯考,5,2分)某算法流程圖如圖所示,執行這部分流程,變量sum的值為(  )

A.1 B.3 C.4 D.0
答案 A 
5.(2019浙南名校聯盟第一次聯考)某算法的部分流程圖如圖所示,執行這部分流程后,下列分析正確的是(  )

A.當x輸入2,y輸入1時,輸出結果是16
B.當x輸入2,y輸入2時,輸出結果是4
C.當x輸入2,y輸入1時,“b=b*x”共被執行5次
D.當x輸入2,y輸入2時,“a=a\x”共被執行4次
答案 A 
6.(2019金麗衢十二校第一次聯考)某算法的部分流程圖如圖所示,執行這部分流程后,s的值為(  )

A.27 B.10 C.37 D.18
答案 A 
考點二 面向對象程序設計基礎
1.某Visual Basic程序的一個事件過程如下:
Private Sub Form_Load()
 Command1.Caption="計算"
End Sub
在程序運行時,能觸發該事件的是(  )
A.窗體裝載 B.單擊窗體
C.單擊命令按鈕Command1 D.雙擊窗體
答案 A 
2.小李在設計VB程序時所使用復選框對象的屬性窗口如圖所示,他想編制該復選框單擊事件的處理過程,則該事件處理過程名是(  )

A.CheckBox_Click() B.加粗_Click()
C.Check1_Click() D.復選框_Click()
答案 C 
3.VB語句List1.AddItem d(i)的作用是把數組d的數據添加到列表框對象List1中。該語句中的“AddItem”是(  )
A.屬性名 B.屬性值 C.方法 D.事件
答案 C 
4.要使程序運行時,按鈕Command1上的文字顯示為“計算”,可在   事件過程中添加語句Command1.Caption="計算"。(單選,填字母:A.Command1_Click/B.Form_Load/C.Command1_DblClick)。?
答案 B 
5.一個VB程序的運行界面如圖所示。下列說法不正確的是(  )

A.文本框Text1的Caption屬性值為“H”
B.標簽Label1的Caption屬性值為“輸入字符”
C.命令按鈕Command1的Caption屬性值為“查詢”
D.窗體的Caption屬性值為“查詢字符ASCII碼”
答案 A 

考點三 VB語言基礎
1.某Visual Basic程序的一個事件過程如下:
Private Sub Command1_Click()
 Dim r As Single
 Dim pi As Double
 r=100
 pi=3.14
 Label1.Caption="圓面積為:"+pi*r*r
End Sub
運行程序,單擊命令按鈕Command1后彈出如圖所示的出錯信息提示,引起該錯誤的語句是(  )

A.Dim r As Single
B.Dim pi As Double
C.pi=3.14
D.Label1.Caption="圓面積為:"+pi*r*r
答案 D 
2.下列VB 表達式的值等于2018 的是(  )
A.Sqr(2000)+18
B.Mid(“2000”,1,2)+ “18”
C.Abs(-2014)+Len(“view”)
D.Str(2000)+Str(18)
答案 C 
3.求半徑為r 的圓的面積,保留兩位小數且四舍五入的表達式是(  )
A.Int( 3.14* r * r *10 + 0.5) / 10
B.Int( 3.14* r * r * 100 + 0.5) / 100
C.Int( 3.14* r * r *1000+ 0.5) / 1000
D.Int( 3.14* r * 2 * 100 + 0.5) / 100
答案 B 
4.(2020屆金華十校期末調研考試)在VB中,若x是能被7整除的正整數,則下列表達式的值一定為真的是(  )
A.x Mod 7=0 B.x\7=0 C.Int(x/7)=0 D.7 Mod x=0
答案 A 
5.(2018舟山第二學期期末檢測)已知字符型變量ch存放了一個大寫字母,下列表達式能正確求得該字母在26個英文字母中序號的是(  )
A.Asc(ch)-Asc(“A”)+1 B.Asc(ch)-Asc(“A”)-1
C.Asc(ch-“A”)+1 D.Asc(ch-“A”)-1
答案 A 
6.(2018舟山第二學期期末檢測)Visual Basic表達式3+27\2 Mod 3*2,正確的值是(  )
A.0 B.2 C.3 D.4
答案 D 
7.變量a中存儲了一個字符,能夠正確判斷該字符為數字字符“0”~“9”的VB表達式是(  )
A.Asc(a)>=0 Or Asc(a)<=9
B.“0”<=a<=“9”
C.a<=“0” Or a>=“9”
D.a>=“0” And a<=“9”
答案 D 
8.(2020屆名校協作體信息技術試題)隨機產生集合{-1,1}中任意一個數的VB表達式是(  )
A.Int(Rnd*2)-1 B.Int(Rnd*3)-1
C.Int(Rnd*3)\2-1 D.Int(Rnd*2)*2-1
答案 D 

考點四 VB基本語句
1.求 1+(1+2)+…+(1+2+…+100)的值的 VB 程序段如下:
Private Sub Command1_Click()
Dim n As Integer, sum, sum1 As Long
sum=0:sum1=0
     
Next n
Print "1+(1+2)+…+(1+2+…+100)= "; sum1
End Sub
方框中的代碼由以下三行組成:
①For n=1 To 100
②sum1=sum1 + sum
③sum=sum + n
代碼順序正確的選項是(  )
A.①③② B.②③① C.③②① D.②①③
答案 A 
2.斐波那契數列是指從第3項開始,每一項的值為前兩項之和。如:1,1,2,3,5,8,13,…,下面程序用于求斐波那契數列的第n項的值:
Dim f1 As long,f2 As long,f As long
 n=Val(Text1.Text)
 f1=1
 f2=1
 For k=3 To n
      
 Next k
Label1.Caption="斐波那契數列第"+Str(n)+"項的值為"+Str(f)
方框中的代碼由以下三部分組成:
①f2=f   ②f1=f2   ③f=f1+f2
代碼順序正確的選項是(  )
A.①②③ B.③②① C.②③① D.②①③
答案 B 
3.根據以下程序,在Text1 文本框中輸入3,最后在List1 中輸出的是(  )
Private Sub Command1_Click()
Dim i As Integer
Dim t As Integer
Dim s As String
i=1:t=1:n=Text1.Text
List1.Clear
Do While t <= n
 s=s +"*"
 If i=t Then
List1.AddItem s
t=t + 1
i=0
 End If
 i=i + 1
Loop
End Sub
                    
A.
 *
* *
* * * B.
 *
* * *
* * * * * *
C.
 *
*
* D.
 * * *
* *
*
答案 B 
4.下列程序執行后文本框 Text1 顯示的內容是(  )
s="ERROR:Divisor must not be zero!"
flag=False:m=0
For i=1 To Len(s)
ch=Mid(s, i, 1)
If ch >= "a" And ch <= "z" Then
If Not flag Then
     m=m+1:flag=True
End If
  Else
flag=False
                    
  End If
Next i
Text1.Text=Str(m)
A.4 B.5 C.6 D.19
答案 B 
5.有如下 VB 程序段:
n=Text1.Text:s=""
For i=1 To Len(n)
c=Mid(n, i, 1)
If c >= "a" And c <= "z" Then
 p=1
ElseIf c >= "A" And c <= "Z" Then
 p=2
Else
 p=3
End If
a(p)=a(p) + 1
If a(p)=1 Then s=s + c
Next i
                    
數組a中各元素的初始值都為 0,文本框 Text1 的內容為“GoodLuck2018”。執行程序后,變量 s 的值為(  )
A.Go2 B.GL2 C.GoLu D.GoLu2
答案 A 
6.(2020屆金華十校期末調研考試)統計連續小寫字母最長的個數,編寫VB代碼如下:
s=Text1.Text
 (1) ?
ans=0
For i=1 To Len(s)
 t=Mid(s,i,1)
 If t>="a" And t<="z" Then
  c=c+1
   (2) ?
 Else
   (3) ?
 End If
Next i
Text2.Text=Str(ans)
填空處的代碼可由以下部分組成:
①c=0 ②c=1 ③If c>ans Then ans=c ④If c正確的代碼順序是(  )
A.②③① B.①④⑤ C.②④② D.①③①
答案 D 
7.(2019嘉興第二學期期末)小虞編寫了一個程序,求數列、、、、、……前10項的和,代碼如下:
s=1/2+2/3:t=1:b=2
For i=3 To 10
        
Next i
Label1.Caption="前10項的和是:"+Str(s)
方框中的代碼由以下四部分組成:
①b=r ②t=b ③r=t+b ④s=s+r/(r+b)
代碼順序正確的選項是(  )
A.④③①② B.④③②①
C.③④①② D.③④②①
答案 D 
8.有如下VB程序段:
s=Text1.Text
s1=""
For i=1 To Len(s)
 c=Mid(s,i,1)
 If c>="A" And c<="Z" Then
  c=Chr(Asc(c)+32)
 ElseIf c>="a" And c<="z" Then
  c=Chr(Asc(c)-32)
 End If
 s1=c+s1
Next i
Text2.Text=s1
該程序段運行后,若在文本框Text1中輸入“Ab12CD”,則文本框Text2中顯示的內容是(  )
A.aBcd B.dcBa C.aB12cd D.dc21Ba
答案 D 
9.(2020屆名校協作體信息技術試題)在文本框Text1中輸入一串字符串,單擊“運行”按鈕后,程序在列表框List1中輸出該字符串的所有子串,程序運行界面如圖所示,VB代碼如下。

  s=Text1.Text
  For i=1 To Len(s)
    For j=  ①  ?
      List1.AddItem ②  ?
    Next j
  Next i
為實現上述功能,程序段兩個劃線處的語句分別為(  )
A.①i To Len(s)       ②Mid(s,i,j-i+1)
B.①1 To Len(s)-i+1 ②Mid(s,j,i)
C.①i To Len(s)-i+1 ②Mid(s,i,j-i+1)
D.①1 To Len(s) ②Mid(s,j,i)
答案 A 
10.(2019金麗衢十二校第一次聯考)有如下VB程序段:
Private Sub Command1_Click()
Dim f As Integer,i As Integer
Dim s AsDouble’①
f=1:i=1:s=0
Do While i<=11’②
 s=s+f*1/i
 f=-1*f
 i=i+2
Loop
Text1.Text=Str(s)
End Sub
下列說法正確的是(  )
A.該程序段沒有輸入語句,也沒有輸出語句
B.輸出結果為表達式1-1/3+1/5-1/7+1/9-1/11的值
C.若將加框處①改為Integer,輸出結果約為0.74
D.若將加框處②改為“i<=12”,計算結果會出錯
答案 B 
11.生成0~9組成的10位隨機密碼,無重復數字出現的VB程序段如下:
s1="0123456789"
n=Len(s1)
For i=1 To 10
       
  n=n-1
Next i
Text1.Text=s
方框中的代碼由以下三部分組成:
①s=s+Mid(s1,x,1)
②x=Int(Rnd*n)+1
③s1=Mid(s1,1,x-1)+Mid(s1,x+1)
代碼順序正確的選項是(  )
                    
A.①②③ B.③②① C.②①③ D.②③①
答案 C 
12.(2018稽陽聯誼學校聯考,14,5分)編寫一個刪除數字字符串s中的最大和次大數字字符的程序。具體功能如下:在文本框Text1中輸入一個數字字符串,單擊“刪數”按鈕Command1,將刪除后的結果顯示在文本框Text2中。程序運行界面如圖所示。

(1)要使程序運行時,按鈕Command1上顯示的標題為“刪數”,可在Form_Load事件處理過程中添加語句        (單選,填字母:A.Caption.Command1="刪數" / B.Command1.Caption="刪數" / C.Caption="刪數")。?
(2)實現上述功能的VB程序如下,請在劃線處填入合適的代碼。
Private Sub Command1_Click()
 Dim s As String, ch As String
 Dim i As Integer, n As Integer
 Dim max1 As Integer, max2 As Integer
 s=Text1.Text:n=Len(Text1.Text)
 If Mid(s, 1, 1) > Mid(s, 2, 1) Then
  max1=1:max2=2
 Else
  max1=2:max2=1
 End If
 For i=3 To n
 ch=Mid(s, i, 1)
  If ch>Mid(s, max1, 1) Then
     ①  ?
   max1=i
  ElseIf ch >= Mid(s, max2, 1) Then
   max2=i
  End If
 Next i
 For i=1 To n
  If ② Then Text2.Text=Text2.Text & Mid(s, i, 1)?
 Next i
End Sub
(3)若在文本框Text1中輸入的內容為“82176736”,單擊按鈕Command1,文本框Text2中顯示的內容是    。?
答案 (1)B (2)①max2=max1 ②i <> max1 And i <> max2或其他等價的答案 (3)217636


13.(2019衢州教學質量檢測)工資問題:某古老的工作和工資計算方式比較奇特,其工作要求如下:必須從1月1日當天開始工作,且連續工作n(n<=365)天才一次性結算得到工資。某年(假設當年為平年)的工資計算細則是:第1天獲得1枚金幣,接下來的2天(第2天和第3天)每天獲得2枚金幣,再接下來的3天(第4、5、6天)每天獲得3枚金幣……,依次類推,即當連續n天每天獲得n枚金幣后,會在之后的連續n+1天里,每天獲得n+1枚金幣。小王用VB編寫了工資計算程序,當輸入連續工作的最后一天的日期后,單擊“計算”按鈕Command1,程序自動計算工資總額,其運行界面如圖所示。

實現上述功能的VB程序如下,請回答下列問題:
(1)下列選項中,屬于鼠標“單擊”事件的是  。(單選,填字母:A.DblClick/B.Load/C.Click)?
(2)請在劃線處填入合適的代碼。
(3)加框處的代碼有錯誤,請改正。
Private Sub Command1_Click()
Dim i As Integer,j As Integer,k As Integer
Dim m As Integer,d As Integer,n As Integer
Dim md As String,sum As Integer
md="312831303130313130313031"
n=0
m=Val(Text1.Text)
d=Val(Text2.Text)
For i=1 To m-1
 n= ① ?
Next i
n=n+d
i=0:j=0
sum=0:k=1
Do While i sum=sum+j
 j=j+1
 If ② Then?
  j=0
  k=k+1
 End If
 i=i+1
Loop
Text3.Text=Str(sum)
End Sub
答案 (1)C (2)①n+Val(Mid(md,2*i-1,2))②j=k或k=j (3)sum+k

考點五 數組的定義及使用
1.某程序部分代碼如下:
Dim i As Integer, s As String
Dim a(1 To 10) As Integer,b(1 To 10) As Integer
a(1)=82:a(2)=96:a(3)=68:a(4)=93:a(5)=87
a(6)=95:a(7)=84:a(8)=91:a(9)=80:a(10)=98
 For i=1 To 10
  b(a(i)\10)=b(a(i)\10) + 1
 Next i
 For i=1 To 10
  If b(i) > 0 Then
   s=s &Str(b(i)) &" "
  End If
 Next i
Text1.Text=s
運行該程序后,在文本框 Text1 中顯示的內容為(  )
A.5 4 1 B.1 1 3 5 C.1 4 5 D.5 3 1 1
答案 C 
2.(2019五校聯考)某VB段程序如下:
Dim a (1 To 5) As Integer
Randomize
s=0
Do While s<5
 t=Int(Rnd*5+1)
 a(t)=a(t)+1
 If a(t)=1 Then s=s+a(t)
Loop
已知數組a(1)到a(5)的初值均為0,該段程序運行后,下列說法正確的是(  )
A.循環至多循環5次
B.數組a(1)到a(5)的值有可能為3,2,1,5,9
C.程序運行過程中可能會出現“下標越界”的錯誤提示
D.加框處語句改為“s<=5”,程序仍能正常運行
答案 B 
                    
3.(2020屆浙江十校聯盟聯考)有如下VB程序段:
For i=1 To 100
 For j=i To 100
  If j Mod i=0 Then a(j)=a(j)+1
 Next j
Next i
Text1.Text=Str(a(30))
數組a各元素的初值為0,執行上述程序段后,文本框Text1中輸出的內容為(  )
A.30 B.9 C.8 D.7
答案 C 
4.(2019金麗衢十二校第一次聯考)有如下程序段:
Private Sub Command1_Click()
Dim i As Integer,j As Integer,k As Integer
For i=1 To n
 k=0
 For j=1 To n
  If a(j)>a(i) Then k=k+1
 Next j
      ?
Next i
For i=1 To n
List2.AddItem Str(a(i))+""+Str(mc(i))
Next i
End Sub
若要實現對數組a按降序排名次(最高分為第1名,當a中出現相同數字,排名相同),劃線處應填寫的語句為(  )
A.mc(i)=k+1 B.mc(i)=mc(i)+1
C.mc(j)=k+1 D.mc(j)=mc(j)+1
答案 A 
5.(2019諸暨第二學期期末)有如下VB程序段:
Dim a (1 To 2) As Integer
s=Text1.Text
For i=2 To Len(s)
 If Mid(s,i,1)>Mid(s,i-1,1) Then
  m=1
 Else
  m=2
 End If
 a(m)=a(m)+1
Next i
Text2.Text=Str(a(1))+Str(a(2))
在文本框Text1中輸入“python”(不包括引號),則執行程序后Text2中顯示的值為(  )
A.11 B.23 C.32 D.45
答案 B 
6.(2019衢州教學質量檢測)有VB程序段如下:
s="2019appreciate":sum=0
For i=1 To Len(s)
 ch=Mid(s,i,1)
 If ch>="a" And ch<="z" Then
  m=Asc(ch)-Asc("a")+1
  a(m)=a(m)+1
 End If
Next i
For i=1 To 10
 If a(i)>0 Then sum=sum+1
Next i
數組a各元素的初始值都為0,執行該程序段后,變量sum的值為(  )
A.10 B.7 C.4 D.3
答案 C 
7.(2018溫州十五校聯合體聯考)有VB程序段如下:
s="2019.06VisualBasic6.0":n=0
For i=1 To Len(s)
 ch=Mid(s,i,1)
 If ch>="0" And ch<="9" Then
  m=Asc(ch)-Asc("0")+1
  a(m)=a(m)+1
 End If
Next i
For i=1 To 10
 If a(i)>1 Then n=n+i
Next i
數組a各元素的初始值都為0,執行該程序段后,變量n的值為(  )
A.2 B.4 C.8 D.10
答案 C 

8.(2019浙江“七彩陽光”聯盟考試)有如下VB程序段:
For i=1 To 5
 a(i)=Int(Rnd*10)
Next i
For i=2 To 5
 If a(i)  a(i)=a(i)+1
 ElseIf a(i) Mod 2=0 And i Mod 2=0 Then
  a(i)=a(i-1)-1
 End If
Next i
執行程序后,a數組各元素不可能是(  )
A.6,6,4,3,3 B.0,-1,9,8,4
C.4,3,5,8,7 D.0,1,3,2,0
答案 C 
9.小明利用Visual Basic編寫了“查找第二小數”的程序,界面如圖所示。程序隨機產生50個范圍在1~ 1000之間的隨機整數,單擊“Command1”按鈕,能夠在標簽Label1中顯示第二小的數字。

Private Sub Command1_Click()
Dim n As Integer,i As Integer
Dim a (1 To 50) As Integer
Randomize
For i=1 To 50
  ① ?
 List1.AddItem Str(a(i))
Next i
If a(1) firstmin=a(1)
 secondmin=a(2)
Else
 firstmin=a(2)
 secondmin=a(1)
End If
For i=3 To 50
 If a(i)  If ②  Then?
   secondmin=firstmin
   firstmin=a(i)
  Else
     ③  ?
  End If
 End If
Next i
Label1.Caption="第二小的數是"&Str(secondmin)
End Sub
(1)為了在列表框List1中加入隨機產生的數字,小明在程序中寫了語句“List1.AddItem Str(a(i))”,其中AddItem是List1對象的  。(填字母:A.屬性/B.事件/C.方法)?
(2)為實現上述功能,請在劃線處填入合適的代碼。
答案 (1)C (2)①a(i)=Int(Rnd*1000)+1 ②a(i)
10.小明設計了一種紙牌游戲,每張紙牌上都有一個 100 以內的數字,每個數字對應的紙牌只有一張。 初始時所有的紙牌從上到下按數字大小順序疊成一堆,如果從中抽走一張,小明就按抽走的紙牌位置分成兩堆,對于每堆紙牌,小明采用記憶最頂端牌的數字和這堆牌張數的方法來記錄。 如剩余的牌為 1,2,3,5,6,11,牌分成 3 堆,記錄為(1,3),(5,2),(11,1)。 現在有些牌采用如下規則要放回牌堆,有 4 種情況:
①上靠,例如放回的牌數字為 7,可以把牌放在第 2 堆的最下面,則原來登記的記錄變成(1,3), (5,3), (11,1),牌還是3 堆。
②下靠,例如放回的牌數字為 10,可以把牌放在第 3 堆的最上面,則原來登記的記錄變成(1,3), (5,2), (10,2),牌還是 3 堆。
③上下不靠,例如放回的牌數字為 9,則單獨放一堆,登記的記錄變成(1,3),(5,2),(9,1),(11,1),牌變成 4 堆。
④上下靠,例如放回的牌數字為 4,則合并第 1 堆和第 2 堆,登記的記錄變成(1,6),(11,1),牌變成 2 堆。
小王依據上述描述設計了如下 VB 程序。 請回答下列問題:
(1)現在有 3 堆牌,分別記錄為(1,5),(7,3),(11,20),要把牌 10 放回牌堆,則登記的記錄變成     。?
(2)請在劃線處填入合適的代碼。
Const n=5000
Dim a(0 To n) As Integer ’a(i)保存第 i 條記錄的最頂端的牌
Dim b(0 To n) As Integer ’b(i)保存第 i 堆牌的張數
Dim c As Integer, k As Integer, sp As Integer ’k為原始記錄數
’讀取原始 k 條記錄的數據,依次存入 a(1),b(1),a(2),b(2)…a(k),b(k),代碼略
a(0)=0:b(0)=0:sp=k + 1 :a(sp)=10000 :b(sp)=0
Private Sub Command1_Click()
Dim i As Integer
c=Val(Text1.Text)  ’c為放回的牌號
i=1
Do While a(i) < c ’查找牌 c 放的位置
i=i + 1
Loop
i=i - 1
’下面為放牌過程
If a(i) + b(i)=c Then
  If   ①   Then ’第 4 種情況,上下靠?
    b(i)=b(i) + 1 + b(i + 1)
    For j=i + 1 To sp - 1
      a(j)=a(j + 1):b(j)=b(j + 1)
    Next j
    sp=sp - 1
  Else      ’第 1 種情況,上靠
    b(i)=b(i) + 1
  End If
ElseIf c + 1=a(i + 1) Then’第 2 種情況,下靠
  a(i + 1)=c:b(i + 1)=b(i + 1) + 1
Else    ’第 3 種情況,上下不靠
  For j=   ②   ?
    a(j)=a(j - 1) :b(j)=b(j - 1)
  Next j
  a(i + 1)=c:b(i + 1)=1:sp=sp + 1
End If
’下面為輸出登記的記錄,不包括虛設的兩條記錄
For i=1 To    ③   ?
  List3.AddItem "第" & Str(i) & "記錄(" & Str(a(i)) & "," & Str(b(i)) & ")"
Next i
End Sub
答案 (1)(1,5),(7,24)
(2)① c+1=a(i+1)(注:或其他等效的式子)
②sp+1 To i+2 Step -1 或 sp+1 To i+1 Step -1
③sp-1

11.(2019寧波新高考選考適應性考試)幸運數。一組由1開始的奇數數列為:
1,3,5,7,9,11,13,15,17,19,21,23,25,……
此數列的第二項為3,將此數列的第3n個數刪除,留下的數為:
1,3,7,9,13,15,19,21,25,……
新數列的第三項為7,將新數列的第7n個數刪除,留下的數為:
1,3,7,9,13,15,21,25,……
若一直重復上述步驟,最后剩下的數就是幸運數。
下列程序的功能是找出1000以內的幸運數,但加框處代碼有錯,請改正。
Private Sub Command1_Click()
Dim a(500) As Integer,b(500) As Integer
Dim i As Integer,m As Integer,k As Integer
Dim top As Integer,bott As Integer
’產生由1開始的奇數數列,依次存儲在數組a中,代碼略
top=2:bott=500
Do While top k=top  ’(1)
 For i=1 To bott
  If i Mod a(top)<>0 Then
   b(k)=a(i)
   k=k+1
  End If
 Next i
 bott=bott-1  ’(2)
 top=top+1
 For i=1 To bott
  a(i)=b(i)
 Next i
Loop
For i=1 To bott
 List1.AddItem Str(a(i))
Next i
End Sub
答案 (1)k=1 (2)bott=k-1
12.(2018臺州期末質量評估)筷子顏色配對問題。現有不同顏色的筷子若干(筷子的顏色用數字編號1~10表示),顏色相同的筷子才能組成一雙,其中有幾根筷子是落單的,現要求找出落單筷子的顏色以及能夠配對的筷子數量。編寫程序解決該問題,程序運行時,在文本框Text1中依次輸入筷子的顏色編號(數據都用逗號分隔并以逗號結尾),單擊“查找”按鈕,在列表框List1中輸出落單筷子的顏色編號,在標簽Label1中顯示能夠配對的筷子數量,運行界面如圖所示。

實現上述功能的VB程序如下:
Private Sub Cmd1_Click()
Dim a (1 To 10) As Integer
’數組a存放不同顏色筷子的數量,各元素默認初值為0
Dim s As String,ch As String
Dim n As Integer,i As Integer,h As Integer
 ① :n=0?
For i=1 To Len(s)
 If Mid(s,i,1)="," Then
  h=Val(ch)
   ② ?
  ch=""
 Else
  ch=ch+Mid(s,i,1)
 End If
Next i
For i=1 To 10
 If ③ Then List1.AddItem "落單筷子的顏色為"+Str(i)?
 n=n+a(i)
Next i
Label1.Caption="能夠配對的筷子有"+Str(n)+"雙"
End Sub
請回答下列問題:
(1)由程序代碼可知,命令按鈕“查找”的對象名是   。?
(2)加框處程序代碼有錯,請改正。
(3)請在劃線處填入合適的代碼。
(4)運行該程序,若文本框Text1中輸入的內容是“2,5,2,3,4,3,6,3,”,單擊“查找”按鈕,標簽Label1中顯示的內容是          。?
答案 (1)Cmd1 (2)n+a(i)\2 (3)①s=Text1.Text
②a(h)=a(h)+1 ③a(i) Mod 2=1
(4)能夠配對的筷子有2雙


考點六 過程與自定義函數
1.(2020浙江名校新高考研究聯盟(Z20聯盟)第一次聯考)若在文本框Text1、Text2、Text3中分別輸入2,5,6,下列程序段運行后,標簽Label2中顯示的內容是(  )
Private Sub Command1_Click()
Dim a As Integer,b As Integer,c As Integer
a=Val(Text1.Text):b=Val(Text2.Text):c=Val(Text3.Text)
Label2.Caption=Str(fx(a,b,c))
End Sub
Function fx(x As Integer,y As Integer,z As Integer) As Integer
If xIf x>y Then fx=y Else fx=x
End Function
A.2 B.5 C.6 D.0
答案 A 
2.某程序段如下:
Private Sub Command1_Click()
 Dim s As Integer, m As Integer, i As Integer
 m=5:s=0
 For i=1 To m
  s=s + add(i)
 Next i
 Text1.Text=Str(s)
End Sub
Function add(n As Integer) As Integer
 If n=1 Or n=2 Then
  add=1
 Else
  add=2*(add(n - 1)+ add(n - 2))
End Function
運行該段程序后,標簽 Text1 中顯示的值是(  )
                    
A.16 B.44 C.6 D.32
答案 B 
3.(2018溫州新力量聯盟期末)有如下VB程序段:
Private Sub Command1_Click()
Const s1="efg"
s2="&auif,+eg$Ymfhe":s3=""
For i=1 To Len(s2)
 If being(Mid(s2,i,1),s1) Then
 s3=s3+Str(i)+","
End If
Next i
Text1.Text=s3
End Sub
Function being(x As String,y As String)As Boolean
being=False
For i=1 To Len(y)
 If x=Mid(y,i,1) Then
 being=True:Exit Function
End If
Next i
End Function
執行后文本Text1中顯示的內容是(  )
A.4,5,6,9,10 B.5,8,9,13,15,
C.2,1,3,3,1, D.4,5,6,13,15,
答案 B 
4.十進制整數換成二進制整數采用“除2倒取余”法。十進制小數轉換成二進制小數采用“乘2順取整”法,具體做法是:用2乘十進制數的小數部分,得到一個積,將積的整數部分取出,再用2乘余下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。小劉根據以上方法編寫了VB程序,運行界面如圖所示。程序運行時,在文本框Text1中輸入一個帶小數的正十進制數(小于32 767),點擊“轉換”按鈕Command1,在文本框Text2中輸出轉化后的帶小數的二進制數,精確到3位小數。實現上述功能的VB程序如下,請回答下列問題:

(1)按照本程序的功能,在 Text1 中輸入數據 9.78,點擊“轉換”按鈕 Command1,在 Text2 中輸出   。?
(2)請在劃線處填入合適的代碼。
Private Sub Command1_Click()
 Dim i As Integer, pos As Integer
 Dim s As String, c As String, result As String
 Dim s1 As Single, s2 As Single
 result="":i=1
 s=Text1.Text
 c=Mid(s, i, 1)
 Do While c <> "."
  i=i + 1
  c=Mid(s, i, 1)
 Loop
 pos=i
   ①  ?
 s2=Val("0." + Mid(s, pos + 1))
 result=convert(s1) & "." & convert(s2)
 Text2.Text=result
End Sub
Function convert(x As Single) As String
 Dim temp As Integer, k As Integer
 If x >= 1 Then ’整數轉化為二進制
 temp=x Mod 2
 result=temp & result
 x=x \2
 Do While x <> 0
  temp=x Mod 2
  result=temp & result
  x=x \2
 Loop
 Else ’小數轉化為二進制,保留 3 位小數
 k=1
 Do While  ②  ?
    temp=Int(x*2)
    result=result & temp
       ③   ?
    k=k + 1
   Loop
 End If
 convert=result
End Function
答案 (1)1001.110 (2)①s1=Val(Mid(s,1,pos-1))或者 s1=Val(Mid(s,1,i-1) ②x<>0 And k<4 ③x=x*2-temp

5.(2018舟山期末檢測)羅馬數字是阿拉伯數字傳入之前使用的一種數碼。羅馬數字采用七個羅馬字母作數字,即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。記數的方法如下:
①相同的數字連寫,所表示的數等于這些數字相加得到的數,如Ⅲ=3;
②小的數字在大的數字的右邊,所表示的數等于這些數字相加得到的數,如Ⅷ=8、Ⅻ=12;
③小的數字(限于Ⅰ、X和C)在大的數字的左邊,所表示的數等于大數減小數得到的數,如Ⅳ=4、Ⅸ=9;
王老師設計了一個將羅馬數字轉換成阿拉伯數字的程序,實現該功能的程序代碼如下:
Private Sub Command1_Click()
Dim a(1 To 10) As String
Dim b(0 To 10) As Integer
Dim x As String,c As Integer,j As Integer
x=Text1.Text
j=Len(x)
b(0)=0
c=0
For i=1 To j
 a(i)=Mid(x,j-i+1,1)
 b(i)=zh(a(i))
 If ① Then?
  c=c-b(i)
 Else
  c=c+b(i)
 End If
Next i
Label2.Caption="結果:"+Str(c)
End Sub
Function zh(x As String) As Integer
s="IVXLCDM"
zh=1
For i=1 To 7
 If s=Mid(x,i,1)Then
  Exit For
 ElseIf ② Then?
  zh=zh*5
 Else
  zh=zh*2
 End If
Next i
End Function

(1)程序界面如圖所示,程序中共包含   個對象。?
(2)加框處代碼有錯,應改為   。?
(3)為完善程序,在劃線處填入合適的代碼。
(4)羅馬數字MCMLXXX轉換成阿拉伯數字為   。?
答案 (1)5 (2)x=Mid(s,i,1) (3)①b(i)
B組 2018—2020年模擬·綜合題組
1.(2018溫州選考適應性測試)某算法的部分流程圖如圖所示。輸入s值為2018,執行這部分流程圖后,s和i的值分別是(  )
                    

A.1,3 B.1,4 C.2,3 D.2,4
答案 D 
2.(2018浙江名校協作體試題)某算法流程圖如圖所示:

執行該流程圖后,輸出i,k的值分別是(  )
A.102,9 B.102,8 C.100,9 D.100,8
答案 A 
3.(2019五校聯考試題)某算法部分流程圖如圖所示。執行這部分流程,輸入a,b的值分別為60,27,則輸出值為(  )

A.1 B.3 C.6 D.9
答案 B 
4.用VB模擬設計某軟件的登錄界面,如圖所示,當鼠標單擊“<請輸入賬號>”所在的文本框Text1時,文字內容就消失。則此事件處理的過程名應該是(  )

A.登錄窗口_Click B.Text1_KeyPress
C.Command1_Click D.Text1_Click
答案 D 
5.(2018期末調研測試卷)下列表達式的運算結果與其他選項不同的是(  )
A.Len("123")+2^2
B.Abs(Int(-6.8))
C.Asc(Mid("789",1,1))
D.Val("9")-Sqr(4)
答案 C 

6.有如下VB程序段:
Dim a(1 To 10) As Integer
Dim s(1 To 10) As Integer
Private Sub Form_Load()
 a(1)=3:a(2)=6:a(3)=8:a(4)=4:a(5)=9
 a(6)=5:a(7)=3:a(8)=3:a(9)=8:a(10)=6
End Sub
Private Sub Command1_Click()
 Dim max As Integer, i As Integer, j As Integer, k As Integer
 max=0
 For i=1 To 10
  k=0
  For j=10 To i Step -1
    If a(j)=a(i) Then k=j:Exit For
  Next j
  If k > 0 And k - i > max Then max=k - i
 Next i
 Text1.Text=Str(max)
End Sub
程序運行后,文本框Text1 顯示的內容是(  )
A.5 B.6 C.7 D.8
答案 D 
7.有如下VB 程序段:
Dim i As Integer, j As Integer, t As Integer
Dim p(1 To 20) As Integer
For i=1 To 20
  p(i)=0
Next i
p(1)=-1
For i=2 To 20
  If p(i)=0 Then
   For j=2 To 20 \ i
    p(i* j)=-1
   Next j
  End If
Next i
t=20
For i=1 To 20
  t=t + p(i)
Next i
Text1.Text=Str(t)
程序運行后,文本框Text1 顯示的內容是(  )
A.20 B.12 C.10 D.8
答案 D 
8.(2019浙江十二校聯考)有如下VB程序段:
Dim i As Integer,sum As Integer
Dim a (1 To 6) As Integer,b(1 To 6) As Integer
Sum=0
a(6)=18:a(5)=7:b(6)=14:b(5)=16
For i=4 To 1 Step -1
 a(i)=a(i+2)-a(i+1)
 b(i)=b(i+2)-a(i)
 If b(i) Mod 3=0 Then sum=sum+b(i)
Next i
Text1.Text=Str(sum)
該程序段運行后,文本框Text1中顯示的內容是(  )
A.39 B.30 C.-9 D.12
答案 B 
9.(2018溫州普通高中選考適應性測試)有如下VB程序段:
Dim a (1 To 6) As Integer
Sum=0
For i=1 To 6
 For j=i+1 To 6
  If j Mod i=0 Then a(j)=1-a(j)
 Next j
Next i
For i=1 To 6
 Sum=Sum+a(i)
Next i
Text1.Text=Str(Sum)
該程序段運行后,文本框Text1中顯示的內容是(  )
A.3 B.4 C.5 D.6
答案 B 
10.(2018稽陽聯誼學校聯考)有如下程序段:
Const n=6
Dim a(1 To n) As Integer
Dim i As Integer,j As Integer,t As Integer
Do While True
 For i=1 To n-1
   If a(i)>a(i+1) Then Exit For
 Next i
 If i < n Then
   For i=1 To n
    j=Int(Rnd*6) + 1
    t=a(j):a(j)=a(i):a(i)=t
   Next i
 Else
   Exit Do
 End If
Loop
數組中a(1)到a(6)的值依次為“56,34,48,87,65,96”,上述程序段執行后a(1)到a(6)的值依次為(  )
A.96 87 65 56 48 34
B.34 48 56 65 87 96
C.選項A和B都有可能
D.選項A和B都不可能
答案 B 
11.(2018金麗衢十二校第三次聯考)在Text1文本框內輸入字符串,單擊去重按鈕,將字符串后面相同的字符刪除,并在Text2中輸出經過刪除的字符串。程序界面如圖所示。請在下面劃線處填入合適的代碼。

Private Sub Command1_Click()
Dim s As String,s1 As String,c As String
s=Text1.Text
For i=1 To Len(s)
 c=Mid(s,i,1)
 s1= (1) ?
 For j= (2) ?
  If c<>Mid(s,j,1) Then
   s1=s1+Mid(s,j,1)
  End If
 Next j
  (3) ?
Next i
Text2.Text=s
End Sub
A.(1)Mid(s,1,1) (2)i+1 To Len(s) (3)s1=s
B.(1)Mid(s,1,1) (2)i To Len(s) (3)s1=s
C.(1)Mid(s,1,i) (2)i To Len(s) (3)s=s1
D.(1)Mid(s,1,i) (2)i+1 To Len(s) (3)s=s1
答案 D 
12.已知數組元素值:a(1)=2,a(2)=8,a(3)=3,a(4)=4,a(5)=5,a(6)=6,a(7)=1,a(8)=7,a(9)=9。
m=1:k=1
For i=2 To 9
  If a(i)>a(i-1) Then
   k=k+1
   If k>m Then m=k
  Else
   k=1
  End If
Next i
Text1.Text=Str(m)
該程序段運行后,文本框Text1中顯示的內容是(  )
A.4 B.6 C.8 D.9
答案 A 
13.(2019衢州教學質量檢測)有VB程序段如下:
Randomize
For i=1 To 6
 a(i)=Int(Rnd*20)+1
 If a(i)Mod 2=i Mod 2 Then
  a(i)=a(i)-1
 Else
  a(i)=a(i)+2
 End If
Next i
執行該程序段后,a(1)~a(6)各元素可能的是(  )
A.13,2,7,12,5,18 B.22,7,0,15,4,19
C.20,9,18,23,4,7 D.6,0,4,21,18,17
答案 B 
14.(2019浙江普通高中學考選考模擬)統計不同單詞個數,在Text1中輸入一行單詞,點擊“統計”按鈕后在Text2中輸出不同單詞的個數。單詞字母有大小寫,同一單詞的大小字母視為相同,句子以符號結尾,程序運行界面如圖所示。

(1)觀察以下代碼,該代碼中Command1_Click()是   。(單選:A.對象名/B.事件名/C.事件處理過程名)?
(2)實現上述功能的VB程序如下,請在劃線處填入合適的代碼。
Private Sub Command1_Click()
Dim a (1 To 100)As String,s As String,ch As String,word As String
Dim i As Integer,j As Integer,k As Integer,numb As Integer
s=Text1.Text:k=0:word=""
For i=1 To Len(s)
ch=Mid(s,i,1)
 If ch>="a"And ch<="z"Or ch>="A"And ch<="Z"Then
  If ch>="A"And ch<="Z"Then ① ?
  word=word+ch
 Else
  flag=False
  For j=1 To k
   If a(j)=word Then flag=True
  Next j
  If Not flag And word<>""Then
    ② ?
   a(k)=word
   numb=numb+1
  End If
   ③ ?
 End If
Next i
Text2.Text=Str(numb)
End Sub
答案 (1)C (2)①ch=Chr(Asc(ch)+32)或ch=Chr(Asc(ch)+Asc("a")-Asc("A")) ②k=k+1 ③word=""

15.(2018浙江“七彩陽光”聯盟期初聯考)用戶注冊某APP時,密碼有如下要求:至少為8個字符,并且必須含有數字和字母。小林編寫了一個VB程序,對用戶設定的密碼進行合法性驗證,如圖所示。在文本框Text1中輸入密碼字符串s,單擊“驗證”按鈕,在標簽Label1中顯示驗證結果“符合要求”或“不符合要求”。

(1)實現上述功能的VB程序如下,請在劃線處填入合適的代碼。
Private Sub CmdJudge_Click()
Dim a1 As Integer, a2 As Integer, flag As Boolean
Dim s As String, c As String, i As Integer, n As Integer
a1=0:a2=0:flag=False
s=Text1.Text:  ①  ?
i=1
Do While i<= n And Not flag
  c=Mid(s, i, 1)
If c>="A"And c<="Z" Or c>="a" And c<="z" Then
    a1=1
  ElseIf c >= "0" And c <= "9" Then
    a2=1
  End If
If ②  Then flag=True?
i=i + 1
Loop
If flag And n >= 8 Then
  Label1.Caption="符合要求"
Else
  Label1.Caption="不符合要求"
End Sub
(2)代碼“Private Sub CmdJudge_Click()”中的“CmdJudge”是    (單選,填字母:A.過程名 / B.屬性名 / C.事件名 / D.對象名)。?
(3)運行該程序,在文本框 Text1 中輸入“Wd6b$ksss”,單擊“統計”按鈕后,語句 c=Mid(s, i,1)共執行了  次。?
答案 (1)①n=Len(s) ②a1+a2=2或a1+a2 >=2或a1=1 And a2=1 (2)D (3)3

16.設某漢字由7×7的0、1點陣圖案組成。依照以下規則生成壓縮碼:連續一組數值,從漢字點陣圖案的第一行第一個符號開始計算,按書寫順序由左到右,從上到下。壓縮碼第一個數表示起始的數字(例如0),第二個數表示連續有幾個0,第三個數表示接下來連續有幾個1,第四個數表示接下來連續有幾個0,第五個數表示接下來連續有幾個1,以此類推……
例如,以下漢字點陣圖案:
0001000
0001000
0001111
0001000
0001000
0001000
1111111
對應的壓縮碼是031616431616137,表示開始數字是0,有3個,接下來1個1,6個0,1個1……
(1)修改程序中的錯誤。
Private Sub Command1 _Click()
Dim code As String, c As Integer, res As String,k As Integer
code=Text1.Text
k=0
res=""
c=Val(Mid (code,1,1))
For i=2 To Len(code)
 For j=1 ToMid(code, j,1)’①
   res=res +Str(c)
   k= k+1
   If k=7 Then
    List1.AddItem res
    k=0
    res=""
   End If
 Next j
 c=1 ’②
Next i
End Sub
(2)現給出如下點陣圖:

則壓縮碼為     。?
答案 (1)①Mid(code, i, 1) ②1-c (2)0383591123482



17.編寫VB程序,模擬考場安排,將編號從1開始的n(n為平方數)個學生按m×m方陣以S型進行排列。程序功能如下:在文本框Text1中輸入考場人數,點擊“排列”按鈕Command1,在列表框List1中輸出排列結果。以4×4方陣為例,考生編號為1~16,排列規則如圖a所示,運行界面如圖b所示。

     圖a         圖b
實現上述功能的VB程序如下,但加框處代碼有錯,請改正。
Private Sub Command1_Click()
Dim a (1 To 100) As Integer’用來存儲重新排列后的編號
Dim n As Integer,i As Integer,j As Integer,k As Integer,pa As Integer
Dim s As String
n=Val(Text1.Text)
i=1
m=n ’(1)
For k=1 To m
 If k Mod 2=1 Then
  pa=k
  For j=1 To m
    a(pa)=i
    pa=pa+m
    i=i+1
  Next j
 Else
  pa=(m-1)*m+k
  For j=1 To m
    a(pa)=i
    pa=pa+m  ’(2)
    i=i+1
  Next j
 End If
Next k
i=1
For k=1 To m  ’按行對考生編號進行輸出
 s=""
 For j=1 To m
  s=s+Str(a(i))
  i=i+1
 Next j
 List1.AddItem s
Next k
End Sub
答案 (1)m=Sqr(n) (2)pa=pa-m


展開更多......

收起↑

資源列表

    <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. 主站蜘蛛池模板: 浦城县| 周宁县| 岱山县| 永胜县| 永修县| 福贡县| 抚宁县| 中阳县| 萝北县| 高雄县| 房山区| 观塘区| 石渠县| 临清市| 秦皇岛市| 连山| 双牌县| 射阳县| 河曲县| 麦盖提县| 宁远县| 石棉县| 赞皇县| 宝山区| 开封县| 胶南市| 崇仁县| 上杭县| 克山县| 东乌珠穆沁旗| 沅江市| 康定县| 巴中市| 仁化县| 睢宁县| 融水| 海林市| 浦北县| 武清区| 闸北区| 曲阜市|