Visual Basic程序設(shè)計(jì)教程第4實(shí)驗(yàn)答案范文_第1頁(yè)
Visual Basic程序設(shè)計(jì)教程第4實(shí)驗(yàn)答案范文_第2頁(yè)
Visual Basic程序設(shè)計(jì)教程第4實(shí)驗(yàn)答案范文_第3頁(yè)
Visual Basic程序設(shè)計(jì)教程第4實(shí)驗(yàn)答案范文_第4頁(yè)
Visual Basic程序設(shè)計(jì)教程第4實(shí)驗(yàn)答案范文_第5頁(yè)
已閱讀5頁(yè),還剩93頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

※聲明:實(shí)驗(yàn)所屬課本原件為《VisualBasic程序設(shè)計(jì)教程(第4版)(□主編龔沛曾□編者楊志強(qiáng)陸慰民謝步瀛)》;實(shí)驗(yàn)答案代碼采用紅色字體突出;僅提供課本前七個(gè)實(shí)驗(yàn)的代碼,之后的實(shí)驗(yàn)上課考試均不涉及故不作;教學(xué)平臺(tái)上機(jī)實(shí)驗(yàn)、課本篇后實(shí)驗(yàn),兩者題目操作略有差異,作業(yè)以前者要求為準(zhǔn),故以下答案代碼為前者代碼,如對(duì)后者代碼有所需求請(qǐng)私信;本文為作者原創(chuàng),復(fù)制轉(zhuǎn)載請(qǐng)注明出處;如果對(duì)代碼有所疑問(wèn),或者略感繁瑣想直接要已完成實(shí)驗(yàn),請(qǐng)私信;瀏覽、復(fù)制、下載后請(qǐng)給作者一個(gè)合理的評(píng)價(jià),感激不盡。實(shí)驗(yàn)1-1編制簡(jiǎn)單的歡迎界面程序。要求:在屏幕上顯示“歡迎學(xué)習(xí)VisualBasic”;在文本框Text1中輸入姓名;單擊命令按鈕“你輸入的姓名是”,在Label3標(biāo)簽顯示在文本框中輸入的姓名。程序運(yùn)行效果如圖2.1.1所示。程序以“學(xué)號(hào)-1-1.frm”和“學(xué)號(hào)-1-1.vbp”文件名保存。以后每個(gè)實(shí)驗(yàn)項(xiàng)目的命名規(guī)則都是如此,即“學(xué)號(hào)-實(shí)驗(yàn)號(hào)-實(shí)驗(yàn)題目”。(如某同學(xué)的學(xué)號(hào)為A,所完成的是實(shí)驗(yàn)2的第3題,那么程序文件名為“A-2-3.frm”和“A-2-3.vbp”)圖2.1.1實(shí)驗(yàn)1.1運(yùn)行界面提示:(1)實(shí)驗(yàn)所用到的控件及屬性設(shè)置見(jiàn)表2.1.1。表2.1.1屬性設(shè)置控件名屬性Label1Caption="歡迎學(xué)習(xí)VisualBasic";Font屬性:字號(hào)為二號(hào),字體為隸書(shū),Aligment=2(居中)Label2Caption="請(qǐng)輸入你的姓名";Font屬性:字體為楷體,有下劃線Label3Caption="",BorderStyle=1Text1Text=""Command1Caption="你輸入的姓名是"(2)“歡迎學(xué)習(xí)VisualBasic”要在兩行顯示,只要將Label1控件的寬度縮小一些。PrivateSubCommand1_Click()Label3.Caption=Text1.TextEndSub實(shí)驗(yàn)1-2模仿教學(xué)篇例1.1,將事件過(guò)程中的自上而下移動(dòng)改為自右向左移動(dòng),同時(shí)考慮文字超出窗體邊界的情況。各個(gè)控件及屬性窗口的設(shè)置見(jiàn)表2.1.2,背景圖形文件可以選擇自己喜歡的,按鈕上的圖標(biāo)可通過(guò)Windows搜索功能查找。以“學(xué)號(hào)-1-2”為項(xiàng)目名保存。表2.1.2屬性設(shè)置控件名屬性Form1Caption="實(shí)驗(yàn)1.2";Picture:選擇自己喜歡的圖片Label1Caption="我開(kāi)始學(xué)習(xí)程序設(shè)計(jì)";FontSize=36;BackStyle=0Command1Caption="";Style=1;Picture="clock02.ico";ToolTipText="自動(dòng)"Command2Caption="";Style=1;Picture="key04.ico";ToolTipText="手動(dòng)"Timer1Interval=0注:因?yàn)橛∷㈠e(cuò)誤,例題1.1中兩個(gè)命令按鈕的圖形與事件過(guò)程代碼不一致,需要調(diào)整。提示:自定義事件過(guò)程MyMove代碼應(yīng)調(diào)整為,可實(shí)現(xiàn)文字移動(dòng)方向的改變SubMyMove()Label1.MoveLabel1.Left-50,Label1.TopIfLabel1.Left<0ThenLabel1.Left=Form1.WidthEndSubSubMyMove()Label1.MoveLabel1.Left-50,Label1.TopIfLabel1.Left<0ThenLabel1.Left=Form1.WidthEndSubPrivateSubCommand1_Click()Timer1.Interval=200EndSubPrivateSubCommand2_Click()Timer1.Interval=0CallMyMoveEndSubPrivateSubForm_Load()Timer1.Interval=0EndSubPrivateSubTimer1_Timer()CallMyMoveEndSub實(shí)驗(yàn)1-3編一個(gè)程序,在文本框中統(tǒng)計(jì)在該窗口上鼠標(biāo)單擊的次數(shù),效果如圖2.1.2所示。以“學(xué)號(hào)-1-3”為項(xiàng)目名保存。圖2.1.2實(shí)驗(yàn)1.3運(yùn)行界面提示:(1)對(duì)窗體編寫兩個(gè)事件:Form_Load事件中對(duì)文本框置初值為空;Form_Click事件對(duì)鼠標(biāo)單擊文本框計(jì)數(shù)。(2)對(duì)鼠標(biāo)單擊文本框計(jì)數(shù)計(jì)算為:Text1.Text=Val(Text1.Text)+1PrivateSubForm_click()Text1.Text=Val(Text1.Text)+1EndSubPrivateSubForm_Load()Text1.Text=""EndSub實(shí)驗(yàn)1-4按照教學(xué)篇例2.2對(duì)窗體三個(gè)事件過(guò)程(Load、Click、DblClick)編程,在3個(gè)事件中裝入不同的圖片(自己選擇);在屬性窗口練習(xí)鼠標(biāo)指針改變:MousePointer(值為99,用戶自定義)、MouseIcon為Key04.ico圖標(biāo)文件,練習(xí)窗體圖標(biāo)(Icon)、邊框線類型(BorderStyle)、最大化按鈕和最小化按鈕的改變,運(yùn)行觀察其效果。以“學(xué)號(hào)-1-4”為項(xiàng)目名保存。提示:例題中Form_Resize事件可以不考慮,Picture屬性設(shè)置中注意圖片文件有后綴名,運(yùn)行測(cè)試前需要先保存項(xiàng)目名,保證圖片文件和程序文件在同一個(gè)文件夾下,否則會(huì)出現(xiàn)圖片找不到的錯(cuò)誤提示。PrivateSubForm_Click()Caption="單擊窗體"Picture=LoadPicture(App.Path+"\p2.jpg")Print"歡迎使用VB"EndSubPrivateSubForm_DblClick()ClsCaption="雙擊窗體"Picture=LoadPicture(App.Path+"\p3.jpg")Print"結(jié)束使用VB"EndSubPrivateSubForm_Load()Caption="裝入窗體"Picture=LoadPicture(App.Path+"\p1.jpg")Print"裝入圖片"EndSub實(shí)驗(yàn)1-5命令按鈕、字號(hào)、內(nèi)容和格式的復(fù)制練習(xí),效果如下圖所示。有關(guān)控件及屬性參見(jiàn)下表。以“學(xué)號(hào)-1-5”為項(xiàng)目名保存。圖2.1.3實(shí)驗(yàn)1.5運(yùn)行界面表2.1.3屬性設(shè)置控件名屬性Form1Caption="實(shí)驗(yàn)1.5"Label1Caption="輸入文本復(fù)制文本"Text1Text="VB功能強(qiáng)大,但要下功夫?qū)W習(xí)才能學(xué)好";MultiLine=True;ScrollBar=2Text2Text="";MultiLine=TrueCommand1Caption="隸書(shū)25磅"Command2Caption="復(fù)制=>"要求:(1)Command1:使得Text1的字體和字號(hào)根據(jù)命令按鈕顯示的要求改變(2)Command2:要求將Text1選中的內(nèi)容及其格式復(fù)制到Text2。選中的內(nèi)容通過(guò)Text1的SelText屬性獲得提示:為使Text2文本框保持Text1中的字符格式,通過(guò)Text2.FontSize=Text1.FontSize和Text2.FontName=Text1.FontName實(shí)現(xiàn)PrivateSubCommand1_Click()Text1.FontName="隸書(shū)"Text1.FontSize=25EndSubPrivateSubCommand2_Click()Text2=Text1.SelTextText2.FontName=Text1.FontNameText2.FontSize=Text1.FontSizeEndSub實(shí)驗(yàn)1-6圖片縮小、還原的設(shè)置。窗體上放置一個(gè)Image圖像控件和兩個(gè)命令按鈕。Image圖像控件裝入自己喜歡的圖片,設(shè)置Stretch屬性為True,使得圖片隨著圖像控件的大小而變,如圖2.1.4所示。以“學(xué)號(hào)-1-6”為項(xiàng)目名保存。圖2.1.4實(shí)驗(yàn)1.6運(yùn)行界面要求:(1)單擊“縮小一半”按鈕,圖片縱、橫均縮小一半。(2)單擊“還原”按鈕,圖片與初始裝入時(shí)同大。提示:為了實(shí)現(xiàn)還原效果,要做以下3件事。(1)必須在事件過(guò)程外,即程序代碼最上方聲明窗體級(jí)變量:Dimh%,w%‘用戶輸入的變量聲明語(yǔ)句(2)在Form1_Load事件中保存圖像控件的初始值:w=Image1.Widthh=Image1.Height(3)在Command2_Click事件中還原為初始值:Image1.Width=wImage1.Height=h縮小一半Command1_Click事件請(qǐng)讀者自行完成。思考:若要設(shè)置圖片放大效果,如何修改代碼?Dimh%,w%PrivateSubCommand1_Click()Image1.Width=Image1.Width*0.5Image1.Height=Image1.Height*0.5EndSubPrivateSubCommand2_Click()Image1.Width=wImage1.Height=hEndSubPrivateSubForm_Load()w=Image1.Widthh=Image1.HeightEndSub實(shí)驗(yàn)2-1隨機(jī)生成3個(gè)正整數(shù),其中一個(gè)1位數(shù),1個(gè)2位數(shù),1個(gè)3位數(shù),計(jì)算它們的平均值,保留兩位小數(shù),運(yùn)行界面如圖2.2.1所示。圖2.2.1實(shí)驗(yàn)2.1運(yùn)行界面提示:(1)隨機(jī)數(shù)生成某范圍內(nèi)的正整數(shù)公式為Int(Rnd*范圍+基數(shù))其中范圍=數(shù)的上限-下限+1,基數(shù)=數(shù)的下限。例如,要生成2位數(shù),語(yǔ)句為Int(Rnd*(99-10+1)+10)=Int(Rnd*90+10)(2)保留兩位小數(shù),利用Format函數(shù),形式為Format(要顯示的數(shù)值,"0.00")。PrivateSubCommand1_Click()Text1.Text=Int(Rnd*9+1)Text2.Text=Int(Rnd*90+10)Text3.Text=Int(Rnd*900+100)EndSubPrivateSubCommand2_Click()Text4.Text=Format((Val(Text1.Text)+Val(Text2.Text)+Val(Text3.Text))/3,"0.00")EndSubPrivateSubCommand3_Click()Text1.Text=""Text2.Text=""Text3.Text=""Text4.Text=""EndSub實(shí)驗(yàn)2-2我國(guó)有13億人口,假定按人口年增長(zhǎng)0.8%計(jì)算,多少年后我國(guó)人口超過(guò)26億。提示:(1)已知年增長(zhǎng)率r=0.8%,求人數(shù)超過(guò)26億的年數(shù)n公式為:其中:Log(x)為對(duì)數(shù)函數(shù),Log(2)緣由Log(13/26),0.8%需寫成0.008(2)該題目的界面設(shè)計(jì)由讀者自行設(shè)計(jì)。PrivateSubCommand1_Click()n=Int(Log(2)/Log(1+0.008)+1)Text1=n&"年后人口超過(guò)26億"EndSub實(shí)驗(yàn)2-3輸入一個(gè)合法的3位正整數(shù),測(cè)試其數(shù)值合法性后,逆序輸出并顯示。例如,輸入“734”,輸出是“437”,如圖2.2.2所示。提示:(1)利用Text1_LostFocus事件,輸入數(shù)據(jù)合法性檢查調(diào)用IsNumeric函數(shù),參閱教學(xué)篇例2.5;若有錯(cuò)利用MsgBox顯示出錯(cuò)信息,如圖2.2.3所示;清除文本框內(nèi)輸入的非法數(shù)據(jù),通過(guò)SetFocus定位于文本框處,重新輸入。(2)利用“MOD”和“\”運(yùn)算符將一個(gè)3位數(shù)分離出3個(gè)1位數(shù),然后利用乘法和加法運(yùn)算將3個(gè)1位數(shù)連接成一個(gè)逆序的3位數(shù)。圖2.2.2實(shí)驗(yàn)2.3運(yùn)行界面圖2.2.3出錯(cuò)信息PrivateSubCommand1_Click()Dimx%,x1%,x2%,x3%x=Val(Text1)x1=xMod10x2=(xMod100)\10x3=x\100Label2=x1*100+x2*10+x3EndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenIfNotIsNumeric(Text1.Text)ThenText1.Text=""EndIfEndIfEndSubPrivateSubText1_LostFocus()IfNotIsNumeric(Text1.Text)ThenMsgBox"輸入非數(shù)值數(shù)據(jù),請(qǐng)重新輸入",,"數(shù)據(jù)檢驗(yàn)"Text1.Text=""Text1.SetFocusEndIfEndSub實(shí)驗(yàn)2-4輸入一個(gè)字符串,分別調(diào)用UCase、Len、Mid、Left、Right函數(shù),顯示如圖2.2.4所示的效果。圖2.2.4實(shí)驗(yàn)2.4運(yùn)行界面提示:事件過(guò)程可以在Form_Click中編碼,輸出控件可以使用標(biāo)簽控件。PrivateSubForm_click()Label1=UCase(Text1.Text)Label2=Len(Text1.Text)Label3=Left(Text1,11)Label4=Mid(Text1,12,6)Label5=Right(Text1,5)EndSub實(shí)驗(yàn)2-5效仿實(shí)驗(yàn)2.4,驗(yàn)證轉(zhuǎn)換函數(shù)的使用,Text1文本框輸入字符串,Text2文本框顯示調(diào)用所選函數(shù)的結(jié)果,4個(gè)命令按鈕為轉(zhuǎn)換函數(shù),Label2顯示對(duì)應(yīng)的函數(shù)名,運(yùn)行效果如圖2.2.5所示。圖2.2.5實(shí)驗(yàn)2.5運(yùn)行界面PrivateSubCommand1_Click()Label2="Val函數(shù)的結(jié)果"Text2=Val(Text1.Text)EndSubPrivateSubCommand2_Click()Label2="Str函數(shù)的結(jié)果"Text2=Str(Text1.Text)EndSubPrivateSubCommand3_Click()Label2="Chr函數(shù)的結(jié)果"Text2=Chr(Text1.Text)EndSubPrivateSubCommand4_Click()Label2="Asc函數(shù)的結(jié)果"Text2=Asc(Text1.Text)EndSub實(shí)驗(yàn)2-6Print方法練習(xí),顯示字符圖形。參考教學(xué)篇例4.4輸出簡(jiǎn)單圖形,如圖2.2.6所示。要求窗體不可改變大小,當(dāng)單擊“清屏”按鈕后,清除窗體所顯示的圖形。提示:利用循環(huán)語(yǔ)句和String函數(shù)。讀者也可以發(fā)揮自己的想像力,設(shè)計(jì)更美觀的圖形。進(jìn)一步要求:若要顯示如圖2.2.7所示的圖形,程序要如何修改?圖2.2.6實(shí)驗(yàn)2.6運(yùn)行界面圖2.2.7進(jìn)一步要求運(yùn)行界面PrivateSubCommand1_Click()PrintFori=1To5PrintTab(15-i*2);String(2*i-1,"★");String(10-(2*i-1),"☆");String(2*i-1,"★")NextiEndSubPrivateSubCommand2_Click()ClsEndSub實(shí)驗(yàn)2-7用InputBox輸入一個(gè)正實(shí)數(shù),用Print方法在一行上顯示出它的平方和平方根、立方和立方根,每個(gè)數(shù)保留三位小數(shù),其間有間隔。PrivateSubcommand1_Click()x=Val(InputBox("輸入一個(gè)正實(shí)數(shù)","計(jì)算",0))pf=Format(x*x,"0.000")pfg=Format(Sqr(x),"0.000")lf=Format(x*x*x,"0.000")lfg=Format(x^(1/3),"0.000")Print"平方為:";pf;Space(3);"平方根為:";pfg;Space(3);"立方為:";lf;Space(3);"立方根為:";lfgEndSub實(shí)驗(yàn)3-1在購(gòu)買某物品時(shí),若所標(biāo)明的價(jià)錢x在下述范圍內(nèi),所付錢y按對(duì)應(yīng)折扣支付:提示:此例用多分支結(jié)構(gòu)實(shí)現(xiàn),注意計(jì)算公式和條件表達(dá)式的正確書(shū)寫。PrivateSubForm_Click()Dimx!,y!x=Val(InputBox("輸入x的值"))Ifx<1000Theny=xElseIfx<2000Theny=0.9*xElseIfx<3000Theny=0.8*xElsey=0.7*xEndIfPrintyEndSub實(shí)驗(yàn)3-2編一個(gè)程序輸入上網(wǎng)的時(shí)間并計(jì)算上網(wǎng)費(fèi)用,計(jì)算方法如下:同時(shí)為了鼓勵(lì)多上網(wǎng),每月收費(fèi)最多不超過(guò)150元。提示:

首先利用多分支If語(yǔ)句根據(jù)3個(gè)時(shí)間段算出費(fèi)用,然后再用單分支If語(yǔ)句對(duì)超過(guò)150元的費(fèi)用設(shè)置為150元。PrivateSubForm_Click()Dimx!,y!x=Val(InputBox("輸入上網(wǎng)時(shí)間"))Ifx<10Theny=30ElseIfx<50Theny=30+2.5*(x-10)Elsey=30+2.5*40+2*(x-50)EndIfIfy>150Theny=150EndIfPrintyEndSub實(shí)驗(yàn)3-3輸入x,y,z三個(gè)數(shù),按從大到小的次序顯示,如圖2.3.1所示。

圖2.3.1實(shí)驗(yàn)3.3運(yùn)行界面提示:

①利用InputBox函數(shù)輸入3個(gè)數(shù),存放到數(shù)值型變量中,然后對(duì)其進(jìn)行比較;若放在字符串變量中,有時(shí)會(huì)得到不正確的結(jié)果(因?yàn)樽址菑淖蟮接业囊?guī)則比較,例如會(huì)出現(xiàn)“34”>“2345”>“”的情況)。

②對(duì)三個(gè)數(shù)進(jìn)行排序,只能通過(guò)兩兩比較,一般可用三條單分支if語(yǔ)句來(lái)實(shí)現(xiàn)。方法如下:

先將x與y比較,使得x>y;然后將x與z比較,使得x>z,此時(shí)x最大;最后將y與z比較,使得y>z。

③要顯示多個(gè)數(shù)據(jù),可以用“;”逐一顯示,也可利用“&”字符串連接符將多個(gè)變量連接顯示。例如要輸出x、y、z:

Print”排序后”;x;””;y;””;z‘用分號(hào)將多個(gè)變量顯示

也可

Print”排序后”&x&””&y&””&z‘用”&”字符串連接符

思考:若要按從小到大的次序顯示,程序?qū)⑷绾涡薷??PrivateSubCommand1_Click()Dimx!,y!,z!x=InputBox("inputx")y=InputBox("inputy")z=InputBox("inputz")Print"xyz"Print"排序前";x;"";y;"";zIfx<yThent=x:x=y:y=tIfx<zThent=x:x=z:z=tIfy<zThent=y:y=z:z=tPrint"排序后";x;"";y;"";zEndSub實(shí)驗(yàn)3-4編一模擬袖珍計(jì)算器的完整程序,界面如圖2.3.2所示。要求:輸入兩個(gè)操作數(shù)和一個(gè)操作符,根據(jù)操作符決定所做的運(yùn)算。

圖2.3.2實(shí)驗(yàn)3.4運(yùn)行界面提示:對(duì)于存放操作符的文本框Text3,利用SelectCase語(yǔ)句實(shí)現(xiàn)相應(yīng)的運(yùn)算。PrivateSubCommand2_Click()Text1.Text=""Text2.Text=""Text3.Text=""Text4.Text=""EndSubPrivateSubText3_LostFocus()SelectCaseTrim(Text3)Case"+"Text4=Val(Text1)+Val(Text2)Case"-"Text4=Val(Text1)-Val(Text2)Case"*"Text4=Val(Text1)*Val(Text2)Case"/"IfVal(Text2)=0ThenMsgBox"分母為零,重新輸入"Text2=""Text2.SetFocusElseText4=Val(Text1)/Val(Text2)EndIfEndSelectEndSub實(shí)驗(yàn)3-5利用計(jì)算機(jī)解決古代數(shù)學(xué)問(wèn)題”雞兔同籠問(wèn)題”。即已知在同一個(gè)籠子里有總數(shù)為M只雞和兔,雞和兔的總腳數(shù)為N只,求雞和兔各有多少只?

提示:

雞、兔的只數(shù)通過(guò)已知輸入的M,N列出方程可解,設(shè)雞為x只,兔為y只,則計(jì)算公式為:但不要求出荒唐的解(如3.5只雞、4.5只兔,或者求得的只數(shù)為負(fù)數(shù))。因此,在Text2_LostFocus事件中要考慮下面兩個(gè)條件:

①輸入的總腳數(shù)N必須是偶數(shù),否則提示數(shù)據(jù)錯(cuò)誤的原因,要求重新輸入數(shù)據(jù)。(使用求余方法判斷,即NMod2<>0)圖2.3.3實(shí)驗(yàn)3.5運(yùn)行界面②若求出的只數(shù)為負(fù)數(shù),提示數(shù)據(jù)錯(cuò)誤的原因,如圖2.3.3所示,重新輸入數(shù)據(jù)。(使用總只數(shù)和總腳數(shù)的關(guān)系,即N>4*MOrN<2*M)PrivateSubText2_LostFocus()DimM%,N%,y%M=Val(Text1)N=Val(Text2)IfNMod2<>0ThenMsgBox("腳數(shù)必須是偶數(shù)")Text2=""Text2.SetFocusElsey=N/2-MIfN>4*MOrN<2*MThenMsgBox("出現(xiàn)荒唐解,請(qǐng)重新輸入")Text2=""Text2.SetFocusElsey=N/2-MLabel2=M-yLabel3=yEndIfEndIfEndSub實(shí)驗(yàn)3-6輸入一元二次方程的ax2+bx+c=0的系數(shù)a,b,c,計(jì)算并輸出一元二次方程的兩個(gè)根x1,x2。界面如圖2.3.4所示。

圖2.3.4實(shí)驗(yàn)3.6運(yùn)行界面提示:

要考慮實(shí)根,要求判斷b^2-4*a*c>=0。PrivateSubCommand1_Click()Dima!,b!,c!,x1!,x2!,de!a=Text1b=Text2c=Text3de=b*b-4*a*ct=2*aIfde=0ThenText4=Format(-b/t,"0.00")Text5=Format(-b/t,"0.00")ElseIfde>0ThenText4=Format((-b+Sqr(de))/t,"0.00")Text5=Format((-b-Sqr(de))/t,"0.00")ElseText4=Format(-b/t,"0.00")&"+"&Format(Sqr(Abs(de))/t,"0.00")&"i"Text5=Format(-b/t,"0.00")&"-"&Format(Sqr(Abs(de))/t,"0.00")&"i"EndIfEndSubPrivateSubCommand2_Click()Text1=""Text2=""Text3=""Text4=""Text5=""EndSub實(shí)驗(yàn)3-7檢查表達(dá)式輸入中圓括號(hào)配對(duì)問(wèn)題。要求對(duì)文本框輸入的算術(shù)表達(dá)式,檢驗(yàn)其圓括號(hào)配對(duì)情況,并給出相應(yīng)信息,如圖2.3.5所示。當(dāng)單擊“重置”按鈕,清除文本框輸入的內(nèi)容、窗體顯示的信息和計(jì)算,并對(duì)窗體級(jí)變量賦初值零,便于再次輸入和統(tǒng)計(jì)。

提示:

①在過(guò)程外最上方聲明一個(gè)窗體級(jí)變量n,存放統(tǒng)計(jì)括號(hào)配對(duì)的情況;

②在Text1_KeyPress(KeyAsciiAsinteger)事件過(guò)程中進(jìn)行如下處理:

IfChr(KeyAscii)不是等號(hào)Then

若是左括號(hào)”(”則n=n+1;

若是右括號(hào)”)”則n=n-1;

Else

結(jié)束表達(dá)式輸入,對(duì)n的3種情況:=n、>0、<0用Print方法顯示相應(yīng)的信息

EndIf

用一個(gè)嵌套的雙分支和內(nèi)嵌兩個(gè)多分支結(jié)構(gòu)來(lái)實(shí)現(xiàn)。Dimn!PrivateSubCommand1_Click()Text1.Text=""n=0ClsEndSubPrivateSubText1_KeyPress(KeyAsciiAsInteger)IfChr(KeyAscii)<>"="ThenIfChr(KeyAscii)="("Thenn=n+1EndIfIfChr(KeyAscii)=")"Thenn=n-1EndIfElseIfn=0ThenPrint"括號(hào)配對(duì)成功";ElseIfn>0ThenPrint"左括號(hào)多于右括號(hào)"&n&"個(gè),按“重置”按鈕,重新輸入"EndIfIfn<0ThenPrint"右括號(hào)多于左括號(hào)"&-n&"個(gè),按“重置”按鈕,重新輸入"EndIfEndIfEndIfEndSub實(shí)驗(yàn)3-8輸入一個(gè)數(shù)字(1~7),分別通過(guò)Select語(yǔ)句和Choose函數(shù)兩種方法用英文顯示對(duì)應(yīng)的星期一~星期日,效果如圖所示:

PrivateSubCommand1_Click()SelectCaseTrim(Text1)Case1Label2="Monday"Case2Label2="Tuesday"Case3Label2="Wednesday"Case4Label2="Thursday"Case5Label2="Friday"Case6Label2="Saturday"Case7Label2="Sunday"CaseIs>7,Is<1MsgBox"數(shù)字為1~7,重新輸入"Text1=""Text1.SetFocusEndSelectEndSubPrivateSubCommand2_Click()IfText1>7OrText1<1ThenMsgBox"數(shù)字為1~7,重新輸入"Text1=""Text1.SetFocusElseLabel3=Choose(Text1,"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")EndIfEndSub實(shí)驗(yàn)3-9設(shè)計(jì)如圖2.3.6所示的計(jì)算程序。當(dāng)輸入?yún)?shù),選擇“函數(shù)”和“字形”后單擊“計(jì)算”按鈕,在Label3以選擇的字形顯示計(jì)算的結(jié)果。提示:

關(guān)于“字形”復(fù)選框的選用采用逐個(gè)判斷選擇,進(jìn)行屬性值的對(duì)應(yīng)設(shè)置。字形的屬性見(jiàn)表2.3.1,設(shè)置屬性值為True時(shí)其屬性起作用。字形屬性意義FontBold粗體FontItalic斜體FontStrikethru刪除線FontUnderline下劃線

圖2.3.6實(shí)驗(yàn)3.9運(yùn)行界面PrivateSubCommand1_Click()IfOption1.ValueThenLabel3.Caption="Sin("&Text1.Text&")="&Sin(Val(Text1.Text))ElseIfOption2.ValueThenLabel3.Caption="Exp("&Text1.Text&")="&Exp(Val(Text1.Text))ElseLabel3.Caption="Sqr("&Text1.Text&")="&Sqr(Val(Text1.Text))EndIfIfCheck1.ValueThenLabel3.FontBold=TrueElseLabel3.FontBold=FalseEndIfIfCheck2.ValueThenLabel3.FontItalic=TrueElseLabel3.FontItalic=FalseEndIfIfCheck3.ValueThenLabel3.FontUnderline=TrueElseLabel3.FontUnderline=FalseEndIfEndSub實(shí)驗(yàn)3-10利用單選按鈕,選擇目的地和車速類型,顯示從上海出發(fā)到目的地座票的票價(jià),如圖2.3.7所示。從上海到南京、北京乘火車有3種車速類型:高鐵(二等)、動(dòng)車、快車,座位票的票價(jià)見(jiàn)表2.3.2。當(dāng)選擇了目的地、車速類型單選按鈕后,在Label1控件顯示選擇的相關(guān)信息和車票價(jià)格。表2.3.2票價(jià)目的地高鐵動(dòng)車快車南京1409347北京555410179

圖2.3.7實(shí)驗(yàn)3.10運(yùn)行界面提示:

Command1_Click事件采用一個(gè)雙分支(目的地)結(jié)構(gòu)分別嵌套一個(gè)多分支(車速類型)來(lái)實(shí)現(xiàn);顯示的內(nèi)容通過(guò)各單選按鈕的Caption屬性來(lái)獲得。PrivateSubCommand1_Click()IfOption1.Value=TrueThenIfOption3.Value=TrueThenLabel1.Caption="從上海到南京高鐵價(jià)格140元"ElseIfOption4.Value=TrueThenLabel1.Caption="從上海到南京動(dòng)車價(jià)格93元"ElseLabel1.Caption="從上海到南京快車價(jià)格47元"EndIfElseIfOption3.Value=TrueThenLabel1.Caption="從上海到北京高鐵價(jià)格555元"ElseIfOption4.Value=TrueThenLabel1.Caption="從上海到北京動(dòng)車價(jià)格410元"ElseLabel1.Caption="從上海到北京快車價(jià)格179元"EndIfEndIfEndSub實(shí)驗(yàn)3-11編寫一個(gè)“個(gè)人簡(jiǎn)歷表”程序。該程序運(yùn)行后,用戶在文本框中輸入姓名和年齡,選擇性別、職業(yè)、學(xué)歷和個(gè)人興趣等個(gè)人信息。單擊“遞交”按鈕運(yùn)行后,在右側(cè)Label1控件顯示具體個(gè)人信息;單擊“重置”按鈕則清除輸入的信息和所做的選擇。運(yùn)行界面如圖2.3.8所示。

圖2.3.8個(gè)人簡(jiǎn)歷表提示:

利用xb,xl,zy,ah字符串變量分別保存性別、學(xué)歷、職業(yè)和愛(ài)好的選擇信息。Dimxm,xb,xl,zy,ahAsStringPrivateSubcommand1_Click()IfText1.Text=""ThenText1.SetFocusMsgBox"姓名未填",,"提示"Elsexm=Text1.TextEndIfIfNotIsNumeric(Text2.Text)OrVal(Text2.Text)<18OrVal(Text2.Text)>=60ThenText2.Text=""Text2.SetFocusMsgBox"年齡輸入錯(cuò)誤",,"提示"Elsenl=Val(Text2.Text)EndIfIfOption1.ValueThenxb=Label4.CaptionElseIfOption2.ValueThenxb=Label5.CaptionElseMsgBox"性別未選",,"提示"EndIfIfOption3.ValueThenxl=Label6.CaptionElseIfOption4.ValueThenxl=Label7.CaptionElseIfOption5.ValueThenxl=Label8.CaptionElseMsgBox"學(xué)歷未選",,"提示"EndIfIfOption6.ValueThenzy=Label9.CaptionElseIfOption7.ValueThenzy=Label10.CaptionElseIfOption8.ValueThenzy=Label11.CaptionElseMsgBox"職業(yè)未選",,"提示"EndIfIfCheck1.ValueThenah=Label12.CaptionElseah=""EndIfIfCheck2.ValueThenah=Label13.Caption+""+ahElseah=ah+""EndIfIfCheck3.ValueThenah=Label14.Caption+""+ahElseah=ah+""EndIfIfCheck4.ValueThenah=Label15.Caption+""+ahElseah=ah+""EndIfLabel3.Caption="簡(jiǎn)歷"&vbCrLf&"姓名:"&xm&vbCrLf&"年齡:"&nl&vbCrLf&"性別:"&xb&vbCrLf&"學(xué)歷:"&xl&vbCrLf&"職業(yè):"&zy&vbCrLf&"愛(ài)好:"&ahEndSubPrivateSubCommand2_Click()Text1.Text=""Text2.Text=""Label3.Caption=""Option1.Value=FalseOption2.Value=FalseOption3.Value=FalseOption4.Value=FalseOption5.Value=FalseOption6.Value=FalseOption7.Value=FalseOption8.Value=FalseCheck1.Value=FalseCheck2.Value=FalseCheck3.Value=FalseCheck4.Value=FalseEndSub實(shí)驗(yàn)4-1用單循環(huán)和Print方法顯示有規(guī)律的圖形,可通過(guò)Form_Click事件實(shí)現(xiàn),如圖2.4.1所示。

提示:

(1)對(duì)于特殊字符"★"、"☆"通過(guò)漢字標(biāo)準(zhǔn)輸入的軟鍵盤菜單中的"特殊符號(hào)"命令來(lái)實(shí)現(xiàn)。

(2)用String(n,"★")函數(shù)產(chǎn)生重復(fù)字符串,如:String(5,"★")將產(chǎn)生"★★★★★"。

(3)通過(guò)循環(huán)結(jié)構(gòu)確定顯示的起始位Tab(20-2*i),顯示有規(guī)律的子串,"★"的列寬約為2。圖2.4.1實(shí)驗(yàn)4.1運(yùn)行界面PrivateSubForm_Click()Fori=1To9PrintTab(20-2*i);String(2*i-1,"★")NextiEndSub實(shí)驗(yàn)4-2用單循環(huán)實(shí)現(xiàn)如圖2.4.2所示的界面。圖2.4.2實(shí)驗(yàn)4.2運(yùn)行界面提示:利用Chr函數(shù)將字母編碼值轉(zhuǎn)換成字母。PrivateSubForm_Click()Fori=1To10Step1PrintTab(i);String((20-2*i),Chr(64+i))NextiEndSub實(shí)驗(yàn)4-3求s=1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+4+…+n)。

要求:

①用For單循環(huán)求前30項(xiàng)和。

②用Until求多項(xiàng)式和,直到和大于5000為止。

運(yùn)行效果如圖2.4.3所示。圖2.4.3實(shí)驗(yàn)4.3運(yùn)行界面PrivateSubCommand1_Click()DimsAsDouble,xAsDouble,iAsInteger,jAsIntegers=0Fori=1To30x=0Forj=1Toix=x+1s=s+xNextjNextiLabel1.Caption="前30項(xiàng)的和="&sEndSubPrivateSubcommand2_Click()DimiAsLong,sAsDouble,xAsDoublei=1s=1x=1Doi=i+1x=x+is=s+xLoopUntil(s>5000)Label2.Caption="前"&i&"項(xiàng)的和="&sEndSub實(shí)驗(yàn)4-4篩選在Text1文本框輸入的字母字符,并反序在Text2中存放,界面如圖2.4.4所示。圖2.4.4實(shí)驗(yàn)4.4運(yùn)行界面提示:

①要考慮字母的大寫和小寫。

②首先利用Len函數(shù)求Text1.Text字符串長(zhǎng)度,然后利用For循環(huán)結(jié)構(gòu)和Mid函數(shù)逐一取字符進(jìn)行判斷是否為字母,若是字母,則利用語(yǔ)句“Text2.Text=字母&Text2.Text”將字母連接到Text文本框前面,實(shí)現(xiàn)反序。

思考:若連接表達(dá)式為“Text2.Text&=字母”,效果如何?PrivateSubCommand1_Click()Text2.Text=""Fori=1ToLen(Text1.Text)Text2.Text=Mid(Text1.Text,i,1)&Text2.TextNextiEndSubPrivateSubCommand2_Click()Text1.Text=""Text2.Text=""EndSubPrivateSubCommand3_Click()EndEndSub實(shí)驗(yàn)4-5計(jì)算當(dāng)?shù)趇項(xiàng)的值<10-4時(shí)結(jié)束提示:

①本題的關(guān)鍵是找規(guī)律寫通項(xiàng)。本題規(guī)律為:第i項(xiàng)的分母是前一項(xiàng)的分母加i,即分母通項(xiàng)為:Ti=Ti-1+i。

②因?yàn)槭孪炔恢h(huán)次數(shù),應(yīng)使用DoWhile循環(huán)結(jié)構(gòu);當(dāng)然也可利用For循環(huán)結(jié)構(gòu),設(shè)置循環(huán)的終值為一個(gè)較大的值,當(dāng)滿足精度后退出循環(huán)。運(yùn)行結(jié)果如圖2.4.5所示。

圖2.4.5實(shí)驗(yàn)4.5運(yùn)行界面Dims!,t!,i&PrivateSubcommand1_click()t=1s=0i=0DoWhilet<=t=t+is=s+1/ti=i+1LoopPrint"DoWhile結(jié)構(gòu)";s,i;"項(xiàng)"EndSubPrivateSubcommand2_Click()t=1s=0Fori=1To10000s=s+1/tIft>ThenExitFort=t+iNextiPrint"For結(jié)構(gòu)";s,i;"項(xiàng)"EndSub實(shí)驗(yàn)4-6編一程序,顯示出所有的水仙花數(shù)。所謂水仙花數(shù),是指一個(gè)3位數(shù),其各位數(shù)字立方和等于該數(shù)字本身。例如,153是水仙花數(shù),因?yàn)?/p>

提示:

解該題的方法有兩種:

①利用三重循環(huán),將三個(gè)數(shù)連接成一個(gè)3位數(shù)進(jìn)行判斷。

例如,將i,j,k,3個(gè)一位數(shù)連成一個(gè)3位數(shù)的表達(dá)式為:i*100+j*10+k;‘i,j,k分別為三重循環(huán)的循環(huán)控制變量

通常,對(duì)于若干個(gè)一位數(shù)要連接成一個(gè)多位數(shù)(例如,將1~9連接成一個(gè)9位數(shù)),程序段如下:

s=0

Fori=1To9

s=s*10+i

nexti

②利用單循環(huán)將一個(gè)3位數(shù)逐位分離后進(jìn)行判斷。

例如x是一個(gè)3位數(shù),分離為3個(gè)一位數(shù)i,j,k,方法如下:

x=357

i=x\100‘獲得百位數(shù)結(jié)果3

j=(xMod100)\10‘獲得十位數(shù)結(jié)果5

k=xMod10‘獲得個(gè)位數(shù)結(jié)果7

通常,對(duì)于若干位數(shù)值(例如,s是一個(gè)9位數(shù)),利用循環(huán)從右邊開(kāi)始逐位分離,程序段如下:

s=

DoWhiles>0

s1=sMod10

s=s\10

Prints1;'從右邊開(kāi)始顯示分離出每一位

LoopPrivateSubCommand1_Click()DimsAsIntegers=0Fori=1To9Forj=0To9Fork=0To9s=i*100+j*10+kIfs=i^3+j^3+k^3ThenPrints&"=";i;"^3";"+";j;"^3";"+";k;"^3"EndIfNextkNextjNextiEndSubPrivateSubCommand2_Click()DimiAsIntegerFori=100To999If(i\100)^3+(i\10Mod10)^3+(iMod10)^3=iThenPrinti&"=";i\100;"^3";"+";i\10Mod10;"^3";"+";iMod10;"^3"EndIfNextiEndSub實(shí)驗(yàn)4-7計(jì)算π的近似值,π的計(jì)算公式為:注意:

①分別顯示當(dāng)n=50、1000時(shí)的結(jié)果

②同時(shí)要防止大數(shù)相乘時(shí)結(jié)果溢出的問(wèn)題,將變量類型和常數(shù)2改為雙精度型(即2#)PrivateSubForm_Click()Dimn&,x#,i&n=InputBox("輸入n值")x=2Fori=1Tonx=x*(2*i)/(2*i-1)*(2*i)/(2*i+1)NextiPrint"當(dāng)n="&n&"時(shí),π=";xEndSub實(shí)驗(yàn)4-8求Sn=a+aa+aaa+aaa+…aa…aaa(n個(gè)a),其中a是一個(gè)由隨機(jī)數(shù)產(chǎn)生的1~9(包括1,9)中的一個(gè)正整數(shù),n是一個(gè)由滾動(dòng)條產(chǎn)生的5~10(包括5,10)中的一個(gè)數(shù)。

例如:當(dāng)a=2,n=5時(shí),Sn=2+22+222+2222+22222。提示:

①為了得到不斷重復(fù)a的n位數(shù)Temp,可用如下程序段實(shí)現(xiàn):

Temp=0

Fori=1Ton

Temp=Temp*10+a

Nexti

②產(chǎn)生的表達(dá)式以橫向和縱向兩種形式顯示,如圖2.4.6和圖2.4.7所示。圖2.4.6實(shí)驗(yàn)4.8運(yùn)行界面圖2.4.7實(shí)驗(yàn)4.8運(yùn)行界面Dima%,n%,i!PrivateSubHScroll1_Change()a=HScroll1.ValueLabel1.Caption="a="&aEndSubPrivateSubHScroll2_Change()n=HScroll2.ValueLabel2.Caption="n="&nEndSubPrivateSubForm_click()Dimx$,y$,Temp#,sum#x="sum="y=""sum=0Temp=0Fori=1TonTemp=Temp*10+asum=sum+Tempx=x&CStr(Temp)&"+"Ifi=1Theny=y&Right(Space(20)&CStr(Temp),19)&vbCrLfElsey=y&Right(Space(20)&CStr(Temp),20)&vbCrLfEndIfNextiLabel3.Caption=Left(x,Len(x)-1)&"="&CStr(sum)Label4.Caption=Left(y,Len(y)-1)&String(20,"-")&vbCrLf&Right(Space(20)&CStr(sum),20)EndSub實(shí)驗(yàn)4-9任意改變文本的字號(hào)。要求利用滾動(dòng)條和標(biāo)簽控件實(shí)現(xiàn)對(duì)標(biāo)簽字體大小的任意改變,如圖2.4.8所示。

提示:

①將滾動(dòng)條的Min、Max分別設(shè)置為字號(hào)的最小值和最大值;

②當(dāng)拖動(dòng)滑塊時(shí),字體取原來(lái)值,字號(hào)跟著變化。

圖2.4.8實(shí)驗(yàn)4.9運(yùn)行界面PrivateSubHScroll1_Change()n=HScroll1.ValueLabel1.FontSize=nLabel1.Caption=n&"號(hào)字"EndSub實(shí)驗(yàn)4-10將Image圖像裝入圖片,利用水平和垂直滾動(dòng)條改變圖像控件的大小來(lái)實(shí)現(xiàn)對(duì)圖片進(jìn)行任意大小的縮放,如圖2.4.9所示。

提示:

①將Image圖像Stretch屬性設(shè)置為True,使得圖片隨著圖像控件大小的改變而變化;

②將滾動(dòng)條的最大值和最小值與圖像控件放大和縮小的大小相關(guān)聯(lián)。

圖2.4.9實(shí)驗(yàn)4.10運(yùn)行界面PrivateSubHScroll1_Change()Image1.Width=HScroll1.ValueEndSubPrivateSubVScroll1_Change()Image1.Height=VScroll1.ValueEndSub實(shí)驗(yàn)4-11利用TextBox、ProgressBar、Timer控件設(shè)計(jì)一個(gè)帶有進(jìn)度條的倒計(jì)時(shí)程序,如圖2.4.10所示。要求倒計(jì)時(shí)時(shí)間以分為單位輸入,以秒為單位顯示,進(jìn)度條指示的是倒數(shù)讀秒剩余時(shí)間,即填充塊的數(shù)目是隨時(shí)間減少的。

當(dāng)在文本框輸入分鐘數(shù)按回車鍵時(shí),開(kāi)始進(jìn)入倒計(jì)時(shí),進(jìn)度條也隨之減少。

圖2.4.10實(shí)驗(yàn)4.11運(yùn)行界面PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenProgressBar1.Max=Val(Text1.Text)*60ProgressBar1.Value=ProgressBar1.MaxTimer1.Enabled=TrueEndIfEndSubPrivateSubTimer1_Timer()ProgressBar1.Value=ProgressBar1.Value-1Text1.Text=Format(Int(ProgressBar1.Value/60),"00")&":"&ProgressBar1.ValueMod60IfProgressBar1.Value=0ThenTimer1.Enabled=FalseEndSub實(shí)驗(yàn)4-12參閱教材例4.20,用迭代法求

求立方根的迭代公式為:

迭代到為止,為方程的近似解。顯示a=3、27的值,并通過(guò)求a^(1/3)的表達(dá)式加以驗(yàn)證。提示:

假定x0的初值為a,根據(jù)迭代公式得x1,若迭代結(jié)束;否則用x1代替x0繼續(xù)迭代。迭代的流程圖如圖2.4.11所示。

圖2.4.11:迭代法求根流程圖PrivateSubForm_Click()Dimi%X1=27Fori=1To10000X2=2/3*X1+27/(3*X1^2)IfAbs(X2-X1)<10^(-5)ThenExitForElse:X1=X2EndIfNextiPrintX2;"為求得的根"EndSub實(shí)驗(yàn)4-13一個(gè)富翁試圖與陌生人做一筆換錢生意,換錢規(guī)則為:陌生人每天給富翁10萬(wàn)元錢,直到滿一個(gè)月(30天);而富翁第一天給陌生人1分錢,第二天2分,第三天4分,……,富翁每天給陌生人的錢是前一天的兩倍,直到滿一個(gè)月。分別顯示富翁給陌生人的錢和陌生人給富翁的錢為多少?提示:

設(shè)富翁第一天給出的錢為0.01,第2天給出的錢為前一天的兩倍,即,如此重復(fù)到30天,累計(jì)求得富翁給出的錢遠(yuǎn)遠(yuǎn)超出陌生人給出的10萬(wàn)*30=300萬(wàn)。PrivateSubcommand1_click()Dimx#,i%x=0.01Fori=1To29x=2*xNextiText1.Text=x&"元"Text2.Text=*30&"元"EndSub實(shí)驗(yàn)4-14用計(jì)算機(jī)安排考試日程。期末某專業(yè)在周一~周六的6天時(shí)間內(nèi)要考x,y,z三門課程,考試順序?yàn)橄瓤紉,然后考y,最后考z,規(guī)定一天只能考一門,且z課程只能安排在周五或周六考。編寫程序安排考試日程(即x,y,z三門課程各在那一天考),要求列出滿足條件的所有方案。PrivateSubForm_Click()Forx=1To6Fory=2To6Forz=5To6Ifx<yAndy<zThenPrint"x=";x;"";"y=";y;"";"z=";zEndIfNextzNextyNextxEndSub實(shí)驗(yàn)5-1隨機(jī)產(chǎn)生30~100(包括30,100)的10個(gè)正整數(shù),求最大值、最小值、平均值,并顯示整個(gè)數(shù)組的值和結(jié)果,如圖E.1所示。圖E.1:實(shí)驗(yàn)E.1運(yùn)行界面PrivateSubForm_click()Dima(1To10)AsIntegerFori=1To10a(i)=Int(Rnd*71+30)NextiMax=a(1)Min=a(1)Avg=a(1)Fori=2To10Ifa(i)>MaxThenMax=a(i)Ifa(i)<MinThenMin=a(i)Avg=Avg+a(i)NextiAvg=Avg/10Fori=1To10Printa(i);NextiPrintPrint"Max=";Max,"Min=";Min,"Avg=";AvgEndSub實(shí)驗(yàn)5-2已知6個(gè)學(xué)生的成績(jī),通過(guò)對(duì)數(shù)組賦初值的方法,利用String函數(shù),以每5分為一個(gè)“”顯示,并顯示學(xué)生的成績(jī),如圖E.2所示。圖E.2:實(shí)驗(yàn)E.2運(yùn)行界面PrivateSubForm_click()Dimaa=Array(56,78,98,88,76,78)Fori=0To5PrintString(a(i)\5,"◆");a(i)PrintNextiEndSub實(shí)驗(yàn)5-3隨機(jī)產(chǎn)生20個(gè)學(xué)生的成績(jī),統(tǒng)計(jì)各分?jǐn)?shù)段人數(shù)。即0~59、60~69、70~79、80~89、90~100,并顯示結(jié)果。產(chǎn)生的數(shù)據(jù)在Picture1顯示,統(tǒng)計(jì)結(jié)果在Picture2顯示,如圖E.3所示。圖E.3:實(shí)驗(yàn)E.3運(yùn)行界面提示:

①本程序有兩個(gè)事件過(guò)程,都要用到存放20個(gè)學(xué)生的數(shù)組,因此在通用聲明段聲明一個(gè)數(shù)組,例,Dimmark%(19);在Command2事件過(guò)程中聲明一個(gè)數(shù)組s(9),分別存放分?jǐn)?shù)段的人數(shù)。

②統(tǒng)計(jì)時(shí)的關(guān)鍵在于確定每個(gè)人的分?jǐn)?shù)mark(i)與數(shù)組s下標(biāo)之間的關(guān)系,即:

Fori=0to19

k=mark(i)10

SelectCasek

Case0To5'0~59分不及格的人數(shù)

s(5)=s(5)+1

Case9To10'90~100分的人數(shù)

s(9)=s(9)+1

Case6To8'存放其他三個(gè)分?jǐn)?shù)段的數(shù)組元素的下標(biāo)有規(guī)律,根據(jù)k獲得

s(k)=s(k)+1

EndSelect

NextiDimmark%(19)PrivateSubCommand1_click()Picture1.ClsFori=0To19mark(i)=Int(Rnd*101)NextiFori=0To19Picture1.Printmark(i);"";If(i+1)Mod4=0ThenPicture1.PrintEndIfNextiEndSubPrivateSubCommand2_Click()Picture2.ClsDims%(9)Fori=0To19k=mark(i)\10SelectCasekCase0To5s(5)=s(5)+1Case9To10s(9)=s(9)+1Case6To8s(k)=s(k)+1EndSelectNextiFori=0To9Ifs(i)<>0ThenPicture2.Print"s(";i;")的人數(shù)有";Format(s(i),"0");"個(gè)"EndIfNextiEndSub實(shí)驗(yàn)5-4隨機(jī)產(chǎn)生10個(gè)2位數(shù),按從大到小遞減的順序排列,并顯示排序結(jié)果。PrivateSubForm_Click()Dima(1To10)AsIntegerFori=1To10a(i)=Int(Rnd*90+10)NextiFori=1To9Forj=9ToiStep-1Ifa(j)<a(j+1)Thent=a(j)a(j)=a(j+1)a(j+1)=tEndIfNextjNextiFori=1To10Printa(i);IfiMod10=0ThenPrintNextiEndSub實(shí)驗(yàn)5-5參照教材例5.3,在通用聲明段聲明兩個(gè)數(shù)組,利用隨機(jī)函數(shù)形成如下兩個(gè)數(shù)組:

要求:

①以下三角形式顯示A數(shù)組、上三角形式顯示B數(shù)組。

②求A數(shù)組主對(duì)角線元素之和和B數(shù)組副對(duì)角線元素之和。

圖E.4:實(shí)驗(yàn)E.5運(yùn)行界面Dima(4,4)AsInteger,b(4,4)AsIntegerPrivateSubCommand1_Click()Picture1.ClsFori=1To4Forj=1To4a(i,j)=Int(Rnd*41+30)NextjNextiFori=1To4Forj=1ToiPicture1.Printa(i,j);NextjPicture1.PrintNextiEndSubPrivateSubCommand2_Click()Picture2.ClsFori=1To4Forj=1To4b(i,j)=Int(Rnd*41+100)NextjNextiFori=1To4Picture2.PrintTab(5*i-4);Forj=iTo4Picture2.Printb(i,j);NextjPicture2.PrintNextiEndSubPrivateSubCommand3_Click()Picture3.Clssum1=0Fori=1To4Forj=1To4Ifi=jThensum1=sum1+a(i,j)NextjNextisum2=0Fori=1To4Forj=1To4Ifi+j=5Thensum2=sum2+b(i,j)NextjNextiPicture3.Print"A數(shù)組主對(duì)角線元素和為:";sum1Picture3.Print"B數(shù)組主對(duì)角線元素和為:";sum2EndSub實(shí)驗(yàn)5-6輸入整數(shù)n,顯示出具有n行的楊輝三角形。圖E.5顯示n=8的效果。提示:

①定義一個(gè)二維數(shù)組(若用定長(zhǎng)數(shù)組實(shí)現(xiàn),則數(shù)組大一些;若用動(dòng)態(tài)數(shù)組,則數(shù)組大小用ReDim命令重新定義)。

②對(duì)下三角各元素進(jìn)行設(shè)置:第一列及對(duì)角線上均為1,其余每一個(gè)元素正好等于它上面一行的同一列和前一列的兩個(gè)元素之和。即a(i,j)=a(i-1,j-1)+a(i-1,j)。

③利用TAB函數(shù)確定每列的寬度,使得列對(duì)齊。

圖E.5:實(shí)驗(yàn)E.6楊輝三角形運(yùn)行界面PrivateSubForm_Click()Dima()AsIntegern=Val(Text1.Text)ReDima(1Ton,1Ton)Fori=1TonForj=1TonIfj=1Ori=jThena(i,j)=1EndIfNextjNextiFori=3TonForj=2Ton-1a(i,j)=a(i-1,j-1)+a(i-1,j)NextjNextiFori=1TonForj=1ToiPicture1.PrintTab(j*5);a(i,j);NextjPicture1.PrintNextiEndSub實(shí)驗(yàn)5-7設(shè)計(jì)一個(gè)選課的運(yùn)行界面如圖E.6所示。它包含2個(gè)列表框,左邊為已開(kāi)設(shè)的課程名稱,通過(guò)Form1_Load時(shí)間加入,并按拼音字母排序;當(dāng)單擊某課程名稱后,將該課程加入到右邊列表框,并在左邊列表框中刪除該課程。當(dāng)右邊課程已滿5門時(shí),不允許再加入,出現(xiàn)如圖E.7所示的界面。圖E.6:實(shí)驗(yàn)E.7運(yùn)行界面圖E.7:超過(guò)5門課程的顯示PrivateSubForm_Load()List1.ClearList1.AddItem"C/C++程序設(shè)計(jì)"List1.AddItem"VB程序設(shè)計(jì)"List1.AddItem"數(shù)據(jù)庫(kù)技術(shù)應(yīng)用"List1.AddItem"硬件技術(shù)基礎(chǔ)"List1.AddItem"Web程序設(shè)計(jì)"List1.AddItem"多媒體技術(shù)與應(yīng)用"List1.AddItem"網(wǎng)絡(luò)技術(shù)與應(yīng)用"List1.AddItem"軟件技術(shù)基礎(chǔ)"List1.AddItem"大學(xué)計(jì)算機(jī)基礎(chǔ)"EndSubPrivateSubList1_Click()IfList2.ListCount<5ThenList2.AddItemList1.TextList1.RemoveItemList1.ListIndexElseMsgBox"超過(guò)5門課程,不能再選"EndIfEndSub實(shí)驗(yàn)5-8窗體上建立一個(gè)簡(jiǎn)單組合框,在組合框的文本框輸入數(shù)字字符,按回車鍵后加入到組合框的列表框內(nèi),如圖E.8所示;單擊“交換”按鈕,將列表框中最小值項(xiàng)目和第0個(gè)項(xiàng)目交換;最大值與最后項(xiàng)目交換,如圖E.9所示。圖E.8:輸入數(shù)字?jǐn)?shù)據(jù)圖E.9:交換后結(jié)果提示:

①只能輸入數(shù)字,Combo1_KeyPress事件通過(guò)如下代碼實(shí)現(xiàn):

SelectCaseKeyAscii

Case48to57,13'0~9數(shù)字和回車鍵為合法數(shù)據(jù)

CaseElse'否則為非法數(shù)據(jù),去除非法字符

KeyAscii=0

EndSelect

②求最大值和最小值必須聲明4個(gè)變量:如Min、iMin、Max、iMax分別存放最小值、最小值下標(biāo)、最大值和最大值下標(biāo),并將列表框中低0個(gè)項(xiàng)目作為上述4個(gè)變量的初值。

③按照求最大值和最小值的方法,在組合框中找最小值和最大值,并獲得最小值和最大值下標(biāo);注意比較時(shí)要用Val函數(shù),否則作為字符串比較。

④將組合框的第0項(xiàng)與最小值交換、最大值與最后項(xiàng)交換。例,最大值與最后項(xiàng)交換的代碼如下:

t=Combo1.List(Combo1.ListCount-1)

Combo1.List(Combo1.ListCount-1)=Combo1.List(iMax)

Combo1.List(iMax)=tPrivateSubCombo1_KeyPress(KeyAsciiAsInteger)SelectCaseKeyAsciiCase48To57,13CaseElseKeyAscii=0EndSelectIfKeyAscii=13ThenCombo1.AddItemCombo1.TextCombo1.Text=""EndIfEndSubPrivateSubCommand1_Click()Max=Val(Combo1.List(0))iMax=0Min=Val(Combo1.List(0))iMin=0Fori=1ToCombo1.ListCount-1IfVal(Combo1.List(i))>MaxThenMax=Val(Combo1.List(i))iMax=iElseIfVal(Combo1.List(i))<MinThenMin=Val(Combo1.List(i))iMin=iEndIfNextit=Combo1.List(Combo1.ListCount-1)Combo1.List(Combo1.ListCount-1)=Combo1.List(iMax)Combo1.List(iMax)=tt=Combo1.List(0)Combo1.List(0)=Combo1.List(iMin)Combo1.List(iMin)=tEndSub實(shí)驗(yàn)5-9提供在窗體上顯示的以漢字開(kāi)頭的字體名稱,并顯示該名稱所對(duì)應(yīng)得字體樣式,程序運(yùn)行效果如圖E.10所示。圖E.10:實(shí)驗(yàn)E.9運(yùn)行界面提示:

①界面設(shè)計(jì):窗體有兩個(gè)Label和兩個(gè)列表ListBox分別用來(lái)顯示字體名稱和字體樣式。

②屏幕對(duì)象Screen有一系列的屬性,參見(jiàn)教材例5.10,其中Fonts是存放所有字體名的字符數(shù)組,F(xiàn)ontCount是所有字體的個(gè)數(shù)。

③要顯示漢字字體名稱,參見(jiàn)教材例6.3的方法,漢字的機(jī)內(nèi)碼最高位為1,若利用Asc函數(shù)求其碼值為小于0(數(shù)據(jù)以補(bǔ)碼表示),因此可用如下算法:

Fori=0ToScreen.FontCount–1

判斷若Asc(left(Screen.Fonts(i),1))<0為漢字字體則

在List1中顯示字體名稱

在List2設(shè)置該控件的字體,并顯示特定的漢字

NextiPrivateSubForm_Load()Fori=0ToScreen.FontCount-1IfAsc(Left(Screen.Fonts(i),1))<0ThenList1.AddItemScreen.Fonts(i)Picture1.FontName=Screen.Fonts(i)Picture1.Print"中國(guó)安徽大學(xué)"EndIfNextiEndSub實(shí)驗(yàn)5-10自定義類型數(shù)組的應(yīng)用。要求:

①自定義一個(gè)職工數(shù)據(jù)類型,包含職工號(hào)、姓名、工資三項(xiàng)內(nèi)容。在通用聲明段聲明一個(gè)職工類型的數(shù)組,可存放5個(gè)職工。

②窗體中設(shè)計(jì)3個(gè)標(biāo)簽、3個(gè)文本框、2個(gè)命令按鈕和1個(gè)圖形框,文本框分別輸入職工號(hào)、姓名、工資;當(dāng)單擊"新增"按鈕時(shí),將文本框輸入的內(nèi)容添加到數(shù)組的當(dāng)前元素中;當(dāng)單擊"排序"按鈕時(shí),將輸入的內(nèi)容按工資遞減的順序排序,并在圖形框顯示。程序運(yùn)行界面如圖E.11所示。圖E.11:實(shí)驗(yàn)E.10運(yùn)行界面提示:

①自定義一個(gè)職工類型只能在標(biāo)準(zhǔn)模塊內(nèi)定義,若在窗體通用聲明段定義,必須為Private。

②為了保存當(dāng)前輸入職工元素的個(gè)數(shù),該變量應(yīng)在通用聲明段聲明,若在事件過(guò)程中聲明,每次運(yùn)行將被初始化為0。

③相關(guān)程序代碼可參考教材例5.13。PrivateTypeclerknumberAsString*3nameAsString*5salaryAsIntegerEndTypeDima(0To4)Asclerk,n%PrivateSubCommand1_Click()Ifn>=5ThenMsgBox("輸入人數(shù)超過(guò)數(shù)組聲明的個(gè)數(shù)")ElseWitha(n).number=T=Text2.salary=Text3Picture1.Printa(n).number,a(n).name,a(n).salaryPrintEndWithn=n+1Text1=""Text2=""Text3=""EndIfEndSubPrivateSubCommand2_Click()Di

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論