第一篇:上機(jī)習(xí)題3教案(范文模版)
實(shí)驗(yàn)三 MATLAB7.0基本編程
實(shí)驗(yàn)?zāi)康模?/p>
① 掌握腳本和函數(shù);
② 掌握matlab中的變量和M文件的流控制語(yǔ)句; ③ 掌握函數(shù)的設(shè)計(jì)和實(shí)現(xiàn)。
實(shí)驗(yàn)要求:給出程序和實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)內(nèi)容: 一、一個(gè)三位整數(shù)各位數(shù)字的立方和等于該數(shù)本身則稱該數(shù)為水仙花數(shù)。輸出全部水仙花數(shù)。
二、從鍵盤輸入若干個(gè)數(shù),當(dāng)輸入10時(shí)結(jié)束輸入,求這些數(shù)的平均值和它們之和。
三、求[1000,2000]之間第一個(gè)能被17整除的整數(shù)。
四、若一個(gè)數(shù)等于它的各個(gè)真因子之和,則稱該數(shù)為完數(shù),如6=1+2+3,所以6是完數(shù)。求[1,10000]之間的全部完數(shù)。
五、Fibonacci數(shù)列定義如下:
f1=1 f2=1 fn?fn?1?fn?2,(n?2)
求Fibonacci數(shù)列的第20項(xiàng)。
六、設(shè)計(jì)一個(gè)猜數(shù)游戲。首先由計(jì)算機(jī)產(chǎn)生[1,100]之間的隨機(jī)整數(shù),然后由用戶猜測(cè)所產(chǎn)生的隨機(jī)數(shù)。根據(jù)用戶猜測(cè)的情況給出不同提示,如猜測(cè)的數(shù)大于產(chǎn)生的數(shù),則顯示“High”,小于則顯示“Low”,等于則顯示“You won”,同時(shí)退出游戲。用戶最多可以猜7次。實(shí)驗(yàn)結(jié)果:
一、一個(gè)三位整數(shù)各位數(shù)字的立方和等于該數(shù)本身則稱該數(shù)為水仙花數(shù)。輸出全部水仙花數(shù)。
程序如下: for m=100:999 m1=fix(m/100);%求m的百位數(shù)字 m2=rem(fix(m/10),10);%求m的十位數(shù)字 m3=rem(m,10);%求m的個(gè)位數(shù)字 if m==m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m)end end 153 370 371 407
二、從鍵盤輸入若干個(gè)數(shù),當(dāng)輸入0時(shí)結(jié)束輸入,求這些數(shù)的平均值和它們之和。程序如下: sum=0;cnt=0;val=input('Enter a number(end in 0):');while(val~=0)sum=sum+val;cnt=cnt+1;val=input('Enter a number(end in 0):');end if(cnt > 0)sum mean=sum/cnt end Enter a number(end in 0):45 Enter a number(end in 0):65 Enter a number(end in 0):342 Enter a number(end in 0):45 Enter a number(end in 0):67 Enter a number(end in 0):12 Enter a number(end in 0):0 sum = 576
mean =
三、求[100,200]之間第一個(gè)能被21整除的整數(shù)。程序如下: for n=100:200 if rem(n,21)~=0 continue end break end n n = 105
四、若一個(gè)數(shù)等于它的各個(gè)真因子之和,則稱該數(shù)為完數(shù),如6=1+2+3,所以6是完數(shù)。求[1,500]之間的全部完數(shù)。for m=1:500 s=0;for k=1:m/2 if rem(m,k)==0 s=s+k;end end if m==s disp(m);end end 6 28 496
五、Fibonacci數(shù)列定義如下:
f1=1 f2=1 fn?fn?1?fn?2,(n?2)
求Fibonacci數(shù)列的第20項(xiàng)。編寫程序?yàn)椋?for i=3:20;
f(1)=1;
f(2)=1;
f(i)=f(i-1)+f(i-2);end >> f f =
Columns 1 through 7 8
3 5 4
Columns 8 through 14
144
233
377
Columns 15 through 20
610
987
1597
2584
4181
6765
六、設(shè)計(jì)一個(gè)猜數(shù)游戲。首先由計(jì)算機(jī)產(chǎn)生[1,100]之間的隨機(jī)整數(shù),然后由用戶猜測(cè)所產(chǎn)生的隨機(jī)數(shù)。根據(jù)用戶猜測(cè)的情況給出不同提示,如猜測(cè)的數(shù)大于產(chǎn)生的數(shù),則顯示“High”,小于則顯示“Low”,等于則顯示“You won”,同時(shí)退出游戲。用戶最多可以猜7次。
命令如下:
a=fix(rand(1)*100+1);k=1;for k=1:7 n=input('輸入一個(gè)1-100的整數(shù):n=');if n>a disp('High');elseif n 補(bǔ)充: 例3-1 分別建立命令文件和函數(shù)文件,將華氏溫度f(wàn)轉(zhuǎn)換為攝氏溫度c。程序1: 首先建立命令文件并以文件名f2c.m存盤。M文件建立如下: clear;%清除工作空間中的變量 f=input('Input Fahrenheit temperature:');c=5*(f-32)/9 然后在MATLAB的命令窗口中輸入f2c,將會(huì)執(zhí)行該命令文件,執(zhí)行情況為: Input Fahrenheit temperature:73 c = 22.7778 程序2: 首先建立函數(shù)文件f2c.m。function c=f2c(f)c=5*(f-32)/9 然后在MATLAB的命令窗口調(diào)用該函數(shù)文件。>> clear;y=input('Input Fahrenheit temperature:');x=f2c(y)Input Fahrenheit temperature:70 c = 21.1111 x = 21.1111 例3-2 輸入x,y的值,并將它們的值互換后輸出。程序如下: x=input('Input x please.'); y=input('Input y please.');z=x;x=y;y=z;disp(x);disp(y);Input x please.34 Input y please.54 54 34 例3-3 求一元二次方程ax2 +bx+c=0的根。程序如下: a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);a=?1 b=?7 c=?9 x1=-1.6972,x2=-5.3028 例3-4 計(jì)算分段函數(shù)的值。 程序如下: x=input('請(qǐng)輸入x的值:');if x<=0 y=(x+sqrt(pi))/exp(2);else y=log(x+sqrt(1+x*x))/2;end y 請(qǐng)輸入x的值:5 y = 1.1562 例3-5 輸入一個(gè)字符,若為大寫字母,則輸出其對(duì)應(yīng)的小寫字母;若為小寫字母,則輸出其對(duì)應(yīng)的大寫字母;若為數(shù)字字符則輸出其對(duì)應(yīng)的數(shù)值,若為其他字符則原樣輸出。 c=input('請(qǐng)輸入一個(gè)字符','s');if c>='A' & c<='Z' disp(char(abs(c)+abs('a')-abs('A')));elseif c>='a'& c<='z' disp(char(abs(c)-abs('a')+abs('A')));elseif c>='0'& c<='9' disp(abs(c)-abs('0'));else disp(c);end 請(qǐng)輸入一個(gè)字符O O 例3-6 某商場(chǎng)對(duì)顧客所購(gòu)買的商品實(shí)行打折銷售,標(biāo)準(zhǔn)如下(商品價(jià)格用price來(lái)表示): price<200 沒(méi)有折扣 200≤price<500 3%折扣 500≤price<1000 5%折扣 1000≤price<2500 8%折扣 2500≤price<5000 10%折扣 5000≤price 14%折扣 輸入所售商品的價(jià)格,求其實(shí)際銷售價(jià)格 建立m文件且以eg.m命名: price=input('請(qǐng)輸入商品價(jià)格');switch fix(price/100)case {0,1} %價(jià)格小于200 rate=0;case {2,3,4} %價(jià)格大于等于200但小于500 rate=3/100;case num2cell(5:9)% rate=5/100;case num2cell(10:24)% rate=8/100;case num2cell(25:49)% rate=10/100;otherwise % rate=14/100;end price=price*(1-rate)% eg 請(qǐng)輸入商品價(jià)格390 price = 378.3000 >> eg 請(qǐng)輸入商品價(jià)格23090 price = 價(jià)格大于等于500但小于1000 價(jià)格大于等于1000但小于2500 價(jià)格大于等于2500但小于5000 價(jià)格大于等于5000 輸出商品實(shí)際銷售價(jià)格 9 1.9857e+004 例3-7 矩陣乘法運(yùn)算要求兩矩陣的維數(shù)相容,否則會(huì)出錯(cuò)。先求兩矩陣的乘積,若出錯(cuò),則自動(dòng)轉(zhuǎn)去求兩矩陣的點(diǎn)乘。程序如下: A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];try C=A*B;catch C=A.*B;end C lasterr %顯示出錯(cuò)原因 C = 40 55 72 ans = Error using ==> mtimes Inner matrix dimensions must agree.n已知 y??12i?1,當(dāng)n=100時(shí),求y的值。i?1 程序如下: y=0;n=100;for i=1:n y=y+1/(2*i-1);10 end y y = 3.2843 例3-10 寫出下列程序的執(zhí)行結(jié)果。s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];for k=a s=s+k;end disp(s');39 48 57 66 例3-14 編寫函數(shù)文件求半徑為r的圓的面積和周長(zhǎng)。 編寫m文件并命名為fcircle.m如下: function [s,p]=fcircle(r)%FCIRCLE calculate the area and perimeter of a circle of radii r %r 圓半徑 %s 圓面積 %p 圓周長(zhǎng) s=pi*r*r;p=2*pi*r;circle(2)ans = 12.5664 例3-15 利用函數(shù)文件,實(shí)現(xiàn)直角坐標(biāo)(x,y)與極坐標(biāo)(ρ,θ)之間的轉(zhuǎn)換。 函數(shù)文件tran.m: function [rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);在命令窗體輸入命令: x=input('Please input x=:');y=input('Please input y=:');[rho,the]=tran(x,y);rho the Please input x=:5 Please input y=:7 rho = 8.6023 the = 0.9505 例3-16 利用函數(shù)的遞歸調(diào)用,求n!。n!本身就是以遞歸的形式定義的: 顯然,求n!需要求(n-1)!,這時(shí)可采用遞歸調(diào)用。遞歸調(diào)用函數(shù)文件factor.m如下: function f=factor(n)if n<=1 f=1;else f=factor(n-1)*n;%遞歸調(diào)用求(n-1)!end 在命令窗體輸入: factor(9)ans = 362880 >> factor(67)ans = 3.6471e+094 例3-17 nargin用法示例。 函數(shù)文件charray.m: function fout=charray(a,b,c)if nargin==1 fout=a;elseif nargin==2 fout=a+b;elseif nargin==3 fout=(a*b*c)/2;end 在命令窗體中輸入: x=[1:3];>> y=[1;2;3];>> charray(x)ans = 3 >> charray(x,y')ans = 6 >> charray(x,y,3)ans = 21 例3-18 全局變量應(yīng)用示例。 先建立函數(shù)文件wadd.m,該函數(shù)將輸入的參數(shù)加權(quán)相加。function f=wadd(x,y)global ALPHA BETA f=ALPHA*x+BETA*y;在命令窗口中輸入: global ALPHA BETA ALPHA=1;BETA=2;s=wadd(1,2)s = 5 14 實(shí)驗(yàn)二 基本矩陣操作 實(shí)驗(yàn)?zāi)康模?/p> ① 掌握matlab變量和數(shù)據(jù)操作; ② 掌握matlab矩陣的創(chuàng)立、拆分及特殊矩陣; ③ 掌握matlab運(yùn)算,掌握matlab在矩陣分析中的應(yīng)用,掌握稀疏矩陣的存儲(chǔ)方式和創(chuàng)建方法; ④ 了解字符串處理函數(shù)。 實(shí)驗(yàn)要求:給出程序和實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)內(nèi)容: 1、利用列向量?1,2,3,10?建立一個(gè)范得蒙矩陣A,并利用位于矩陣A的奇數(shù) T行偶數(shù)列的元素建立一個(gè)新的矩陣B,須保持這些元素的相對(duì)位置不變。 2、矩陣的基本運(yùn)算與點(diǎn)運(yùn)算的區(qū)別。 3、給出矩陣的兩種存儲(chǔ)方式的聯(lián)系和區(qū)別,這兩種存儲(chǔ)方式在實(shí)際應(yīng)用中主要應(yīng)用于具有什么特點(diǎn)的矩陣? 4.將字符串'very good'轉(zhuǎn)換為等值的整數(shù)。 5.按水平和豎直方向分別合并下述兩個(gè)矩陣: 6.分別刪除第5題兩個(gè)結(jié)果的第2行。 7.分別將第5題兩個(gè)結(jié)果的第2行最后3列的數(shù)值改為[11 12 13]。8. 分別查看第5題兩個(gè)結(jié)果的各方向長(zhǎng)度。9. 分別判斷pi是否為字符串和浮點(diǎn)數(shù)。 10.分別將第5題兩個(gè)結(jié)果均轉(zhuǎn)換為2?9的矩陣。11.計(jì)算第5題矩陣A的轉(zhuǎn)置。 12.分別計(jì)算第5題矩陣A和B的A+B、A.* B和AB。13.判斷第5題矩陣A和B中哪些元素值不小于4。 14.分別用函數(shù)strcat()和矩陣合并符合并如下字符串:' The picture is '和' very good '。 15.創(chuàng)建字符串?dāng)?shù)組,其中元素分別為‘Picture ’和'Pitch '。16.在第14題結(jié)果中查找字符串'e'。17.在第15題結(jié)果中匹配字符串'Pi'。 18.將十進(jìn)制的50轉(zhuǎn)換為二進(jìn)制的字符串;將十六進(jìn)制的字符串‘50’轉(zhuǎn)換為三 進(jìn)制的整數(shù)。 實(shí)驗(yàn)結(jié)果: 1.x=1:10 x = A=Vander(x)B=A(1:2:9,2:2:10)2.矩陣的基本運(yùn)算中A*B,A列長(zhǎng)度必須和矩陣B的行長(zhǎng)度一致。而點(diǎn)乘運(yùn)算如A.*B則兩矩陣必須具有相同長(zhǎng)度,除非其中之一是標(biāo)量。 3.矩陣的兩種存儲(chǔ)方式分別是滿矩陣存儲(chǔ)和稀疏矩陣存儲(chǔ)。兩種存儲(chǔ)方式可以互相轉(zhuǎn)化,滿矩陣存儲(chǔ)方式是MATLAB默認(rèn)的存儲(chǔ)方式。稀疏矩陣只有少數(shù)的元素非零,如果稀疏矩陣采用滿矩陣存儲(chǔ)方式會(huì)浪費(fèi)很多存儲(chǔ)空間。4.x=double('very good')x = 118 114 121 5.A=[1 0 0;1 1 0;0 0 1];B=[2 3 4;5 6 7;8 9 10];C=[A B] D=[A;B] 6.C(2,:)=[] D(2,:)=[] 7.C(2,4:1:6)=[11,12,13] C = 0 0 0 0 0 D(2,1:1:3)=[11,12,13] D = 0 0 0 0 8.c=size? d= Size(D)9.ischar(pi)ans = 0 Isfloat(pi)ans = 10.e=replace(C,2,9)f=replace(D,2,9)11.A=[1 0 0;1 1 0;0 0 1] a=transpose(A)A = 0 0 0 0 0 a= 0 0 0 0 0 12.A=[1 0 0;1 1 0;0 0 1] B=[2 3 4;5 6 7;8 9 10] h=A+B I=A.*B J=AB A = 0 0 0 0 0 B = h = I = 0 0 0 0 0 J = 13.a=A>=4 a = 0 0 0 0 0 0 0 0 0 >> b=B>=4 b = 0 0 14.a='The picture is ';>> b=' very good';>> c=strcat(a,b)c = The picture is very good 或c=[a b] 15.c=char('Picture','Pitch')c = Picture Pitch 16.str='The picture is very good.';index=strfind(str,'e')17.x=strmatch('pi',strvcat('pi''picture''pitch'))x = 18.(1)dec2bin([50]) ans = 110010(2) Num=Str2num(['50']);dec2base(Num,3) 注: (一)為必做題,(二)和 (三)任選一題。 語(yǔ)法分析上機(jī)實(shí)習(xí)題 (一)對(duì)于如下的文法,試編寫調(diào)試一個(gè)語(yǔ)法分析程序: E → E+T | T T → T*F | F F → P^F| P P→(E)| i 要求和提示: (1)可選擇一種你感興趣的語(yǔ)法分析方法(LL(1)、算符優(yōu)先、遞歸下降、SLR(1)等)作為編制語(yǔ)法分析程序的依據(jù)。 (2)對(duì)于所選定的分析方法,如有需要,應(yīng)選擇一種合適的數(shù)據(jù)結(jié)構(gòu),以構(gòu)造 所給文法的機(jī)內(nèi)表示。 (3)能進(jìn)行分析過(guò)程模擬。如輸入一個(gè)句子,能輸出與句子對(duì)應(yīng)的語(yǔ)法樹,能 對(duì)語(yǔ)法樹生成過(guò)程進(jìn)行模擬;能夠輸出分析過(guò)程每一步符號(hào)棧的變化情況。 (二)First集和Follow集生成算法模擬 【問(wèn)題描述】 設(shè)計(jì)一個(gè)由給定文法生成First集和Follow集并進(jìn)行簡(jiǎn)化的算法動(dòng)態(tài)模擬。(算法參見(jiàn)教材) 【基本要求】 動(dòng)態(tài)模擬算法的基本功能是: (1)輸入一個(gè)文法G; (2)輸出由文法G構(gòu)造FIRST集的算法; (3)輸出First集; (4)輸出由文法G構(gòu)造FOLLOW集的算法; (5)輸出FOLLOW集。 E的first集 T的first集 F的first集+1*()i 1 11 1 1 1 【測(cè)試數(shù)據(jù)】 輸入文法: E->TE’ E’->+TE’|ε T->FT’ T’->*FT’|ε F->(E)|i (三)FirstVT 集和LastVT集生成算法模擬 【問(wèn)題描述】 設(shè)計(jì)一個(gè)由給定文法生成FirstVT集和LastVT集的算法動(dòng)態(tài)模擬。(算法參見(jiàn)教材P90——92FirstVT和LastVT的構(gòu)造算法) 【基本要求】 動(dòng)態(tài)模擬算法的基本功能是:(1)輸入一個(gè)文法G; (2)輸出由文法G構(gòu)造FIRSTVT集的算法;(3)輸出FirstVT集; E的firstVTT的firstVTF的firstVT (4)輸出由文法G構(gòu)造LastVT集的算法;(5)輸出LastVT集。 +1 * () i 1 1 11 1【測(cè)試數(shù)據(jù)】 輸入文法: E->TE’ E’->+TE’|ε T->FT’ T’->*FT’|ε F->(E)|i 實(shí)習(xí)報(bào)告內(nèi)容: 實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)要求、實(shí)驗(yàn)內(nèi)容、采用的數(shù)據(jù)結(jié)構(gòu)、算法描述、運(yùn)行結(jié)果、調(diào)試情況、設(shè)計(jì)技巧及體會(huì)、源程序清單。 實(shí)驗(yàn)報(bào)告封面: 題目: 《編譯原理》實(shí)驗(yàn)報(bào)告 學(xué)生姓名:_____________________________ 班級(jí):_____________________________ 學(xué)號(hào):_____________________________ 指導(dǎo)教師:_____________________________ 成績(jī):_____________________________ 西安郵電大學(xué)計(jì)算機(jī)學(xué)院 年月日 實(shí)驗(yàn)三順序結(jié)構(gòu)程序設(shè)計(jì)實(shí)驗(yàn) 一、實(shí)驗(yàn)?zāi)康?/p> 1.掌握順序結(jié)構(gòu)程序的基本設(shè)計(jì)方法; 2.掌握數(shù)據(jù)傳送指令和算術(shù)運(yùn)算指令的用法; 3.掌握邏輯操作指令和移位操作指令的用法; 4.掌握狀態(tài)標(biāo)志位操作指令的用法; 5.掌握簡(jiǎn)單的I/O功能調(diào)用。 二、實(shí)驗(yàn)要求 1.熟練掌握DEBUG中的各命令的使用方法; 2.學(xué)會(huì)利用系統(tǒng)功能調(diào)用,來(lái)實(shí)現(xiàn)鍵盤輸入字符、顯示字符的方法; 3.學(xué)會(huì)十進(jìn)制數(shù)字與其對(duì)應(yīng)的ASCII碼相互轉(zhuǎn)換的方法; 4.學(xué)會(huì)十六進(jìn)制數(shù)字與其對(duì)應(yīng)的ASCII碼相互轉(zhuǎn)換的方法; 5.學(xué)會(huì)利用查表的方法實(shí)現(xiàn)代碼的轉(zhuǎn)換。 三、實(shí)驗(yàn)內(nèi)容 1.編寫十六進(jìn)制數(shù)的乘法程序。要求從鍵盤上輸入兩個(gè)一位十六進(jìn)制數(shù)據(jù),乘積存入SUM單元。 2.編寫程序,求表達(dá)式5X+Y的值,要求:X、Y值從鍵盤輸入,X、Y均為一位十六進(jìn)制數(shù)據(jù),將計(jì)算結(jié)果存入SUM單元。 四、解題思路 利用INT 21H的1號(hào)功能可以從鍵盤上輸入數(shù)據(jù), 通過(guò)通用寄存器保存中間結(jié)果,完成各項(xiàng)計(jì)算功能。將結(jié)果的ASCII碼保存在內(nèi)存單元和DL寄存器中,然后利用INT 21H的2號(hào)功能將其輸出到屏幕上。輸出到屏幕上一次只能顯示4位二進(jìn)制數(shù),所以一個(gè)字節(jié)需要分兩次才能顯示出來(lái)。 五、編程實(shí)現(xiàn) 5.1 內(nèi)容1 DSEG SEGMENT HTAB DB '0123456789ABCDEF' SUM DW 0,0 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV MOV MOV AX,DSEG ;初始化DS寄存器 DS,AX AH,01H ;從鍵盤上輸入一個(gè)數(shù)X(默認(rèn)放入AL) INT SUB MOV MOV MOV INT MOV INT SUB MUL MOV MOV MOV MOV MOV INT MOV SHR MOV LEA XLAT MOV MOV INT AND MOV XLAT MOV MOV INT MOV INT CSEG ENDS END 21H AL,30H BL,AL DL,'*' AH,02H 21H AH,01H 21H AL,30H BL SUM,AX CH,AL DH,AL DL,'=' AH,02H 21H CL,4 DH,CL AL,DH BX,HTAB DL,AL AH,02H 21H CH,0FH AL,CH DL,AL AH,02H 21H AH,4CH 21H START ;輸入的數(shù)據(jù)ASIIC碼翻譯成十六進(jìn)制;X放入到BL中 ;規(guī)定要顯示的符號(hào)必須在DL中;顯示’*’ ;從鍵盤輸入第二個(gè)數(shù)Y(默認(rèn)放入AL);輸入的數(shù)據(jù)ASIIC碼翻譯成十六進(jìn)制;AL*BL 保存數(shù)據(jù)到SUM中;利用CH和DH存放;規(guī)定要顯示的符號(hào)必須在DL中 顯示‘=’ ;DH中保存了之前AL中的高四位;查表規(guī)定數(shù)據(jù)必須在AL中;利用查表方法顯示;顯示AL中的高四位 ;CH中保存了之前AL中的低四位;查表規(guī)定數(shù)據(jù)必須在AL中;查表方法顯示 ;; 運(yùn)行結(jié)果如下如圖3-1 圖3-1 5.2 內(nèi)容2 DSEG HTAB SUM DSEG SEGMENT DB DW ENDS '0123456789ABCDEF' 0,0 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV MOV MOV INT SUB MOV MUL MOV MOV MOV INT MOV LEA XLAT MOV MOV INT MOV MOV INT MOV INT SUB AX,DSEG DS,AX AH,01H 21H AL,30H BL,5 BL CX,AX DL,'*' ;BL中保存數(shù)據(jù)5;X*5默認(rèn)保存到AX中;X*5保存在CX中 ;屏幕上顯示'*'前規(guī)定需要保存到DL中;顯示’*’ ;利用查表法輸出5,之前必須放入到AL中;查表獲取地址;查表轉(zhuǎn)換 ;屏幕顯示數(shù)據(jù)5之前規(guī)定需要放到DL中;顯示5 ;屏幕顯示’+’之前規(guī)定需要放到DL中;屏幕顯示’+’;從鍵盤上輸入數(shù)據(jù)Y ;從鍵盤上輸入X,默認(rèn)保存到AL中 AH,02H 21H AL,05H BX,HTAB DL,AL AH,02H 21H DL,'+' AH,02H 21H AH,01H 21H AL,30H MOV MOV ADC MOV MOV MOV INT MOV MOV MOV SHR MOV LEA XLAT MOV MOV INT AND MOV XLAT MOV MOV INT MOV INT CSEG ENDS BL,AL BH,00H CX,BX SUM,CX DL,'=' AH,02H 21H BH,CL CH,CL CL,4 BH,CL ;右移4位,即為原來(lái)結(jié)果的高4位;放到AL中,便于查表轉(zhuǎn)換后顯示出來(lái);查表 ;顯示結(jié)果的高4位 AL,BH BX,HTAB DL,AL ;Y保存到BL寄存器中;實(shí)現(xiàn)5X+Y;保存結(jié)果 ;屏幕顯示‘=’之前規(guī)定需放入到DL寄存器中;顯示’=’ ;保存CL,因?yàn)橄旅嬷噶頢HR需用到CL寄存器;保存CL,因?yàn)橄旅嬷噶頢HR需用到CL寄存器 AH,02H 21H CH,0FH AL,CH ;原來(lái)結(jié)果低4位處理;查表轉(zhuǎn)換;顯示結(jié)果低4位 DL,AL AH,02H 21H AH,4CH 21H END START 運(yùn)行結(jié)果如圖3-2 圖3-2 六、實(shí)驗(yàn)總結(jié) 6.1 心得體會(huì) 6.2 遇到的問(wèn)題 實(shí)驗(yàn)過(guò)程中遇到的問(wèn)題很多,我就挑典型的幾個(gè)錯(cuò)誤分享一下。1.實(shí)驗(yàn)內(nèi)容1中,INT 21H會(huì)改變AL中的值,所以AL中的數(shù)據(jù)要在該語(yǔ)句之前保存; 2.實(shí)驗(yàn)內(nèi)容2中,我剛剛開始輸入Y時(shí)忘記寫SUB AL,30H,后來(lái)運(yùn)行結(jié)果屏幕顯示的結(jié)果總是比實(shí)際結(jié)果大3,這個(gè)錯(cuò)誤找了很久,給我印象深刻。 VB上機(jī)考試 1、利用隨機(jī)函數(shù)產(chǎn)生25個(gè)100到999之間的整數(shù),構(gòu)成5?5的矩陣,輸出該矩陣。Dim a(1 To 5, 1 To 5)Private Sub Form_Click()Randomize For i = 1 To 5 For j = 1 To 5 a(i, j)= Int(Rnd *(99910 + 1)+ 10)Print a;s = s + a Next i Print Avg = s / 25 Print Avg End Sub 3、在窗體上按下鼠標(biāo)的右鍵,記錄其坐標(biāo)。 Private Sub Form_Load()Label1.BorderStyle = 1 Label1.Alignment = 2 End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 2 Then Label1.Caption = X & “,” & Y End If End Sub 4、利用隨機(jī)函數(shù)產(chǎn)生25個(gè)10到99之間的整數(shù),按從小到大的順序顯示。Dim a(1 To 25)Private Sub Form_Click()Cls For i = 1 To 25 a(i)= Int(Rnd *(991 For j = 1 To 251 + 1)+ 1)a(x)= a(x)+ 1 Next j For i = 1 To 6 Print i & “出現(xiàn)了” & a(i);“次” Next i End Sub 6、在文本框中輸入一些英語(yǔ)單詞,統(tǒng)計(jì)空格的個(gè)數(shù)。 Dim n%, x As String, s% Private Sub Form_Click()n = Len(Text1.Text)x = Text1.Text For i = 1 To n If Mid(x, i, 1)= “ ” Then s = s + 1 Next i Print “共出現(xiàn)了” & s & “個(gè)空格” End Sub 7、編程計(jì)算下列公式的值,其中n(<10)為從鍵盤輸入的正整數(shù)。S=1!+3!+5!+……+(2*n-1)!Private Sub Form_Click()n = Val(InputBox(“請(qǐng)輸入一個(gè)不大于10的整數(shù)”))s = 0 For i = 1 To 2 * n2 * i1 a = a + 1 Print Str(a);Next j Print Next i End Sub 10、用For …Next語(yǔ)句編程,雙擊窗體后,在屏幕上顯示如圖: Private Sub Form_DblClick()For i = 1 To 3 Print Tab(113 * i);For j = 1 To 5 Print x;Next j Print Next i End Sub 12、從文本框輸入一個(gè)正整數(shù),判斷該數(shù)是否為素?cái)?shù)。Dim a As Long Private Sub Form_Click()a = Val(Text1.Text)If a = 2 Then Tag = True ElseIf a Mod 2 = 0 Then Tag = False Else Tag = True For i = 3 To Sqr(a)Step 2 If a Mod i = 0 Then Tag = False: Exit For Next i End If If Tag = True Then Print a;“是素?cái)?shù)” Else Print a;“不是素?cái)?shù)” End If End Sub 13、利用隨機(jī)函數(shù)產(chǎn)生并顯示10個(gè)3位數(shù)的正整數(shù),找出其中的最大數(shù)。Option Explicit Dim i%, max%, loc% Dim a(1 To 10)As Integer Private Sub Form_Click()Randomize Form1.Cls For i = 1 To 10 a(i)= Int(Rnd *(9991000 + 1)+ 1000)Print a(i)Next i min = 9999 For i = 1 To 10 If a(i)< min Then min = a(i): loc = i Next i Print “最小的數(shù)是”;min Print “在數(shù)組中是第”;loc;“個(gè)數(shù)” End Sub 15、當(dāng)按下鼠標(biāo)左鍵時(shí),窗體的背景色變?yōu)榧t色;松開鼠標(biāo)左鍵時(shí),窗體的背景色變?yōu)榫G色。Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 Then Form1.BackColor = vbRed End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 Then Form1.BackColor = vbGreen End Sub 16、編制一個(gè)時(shí)鐘程序,如下圖 :Option Explicit Private Sub Form_Load()Label1.BackColor = vbWhite Label1.BorderStyle = 1 Label1.Alignment = 2 Timer1.Enabled = True Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer()Label1.Caption = Time End Sub 17、從鍵盤輸入10個(gè)數(shù),按輸入的順序和按輸入順序相反的順序輸出。Option Explicit Dim i% Dim a(1 To 10)As Single Private Sub Form_Click()For i = 1 To 10 a(i)= Val(InputBox(“請(qǐng)輸入第” & i & “個(gè)數(shù)”))Print a(i);Next i Print For i = 10 To 1 Step-1 Print a(i);Next i End Sub 18、計(jì)算圓面積的程序。程序運(yùn)行時(shí),單擊窗體,然后在下圖所示的輸入框中輸入圓的半徑,即可在窗體上顯示計(jì)算出的圓面積。 Option Explicit Dim r%, a As Single Const pi As Single = 3.14159 Private Sub Form_Click()r = Val(InputBox(“請(qǐng)輸入圓半徑” & vbCrLf & “(1-9):”, “輸入”, 5))a = pi * r ^ 2 Print “半徑為”;r;“的圓面積為”;a End Sub 19、編寫一個(gè)時(shí)鐘程序,當(dāng)選擇“24小時(shí)”時(shí),以24小時(shí)的方式顯示如A,當(dāng)選擇“12小時(shí)”時(shí),以12小時(shí)的方式顯示如B。 Private Sub Form_Load()Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer()Select Case True Case Option1.Value Label1.Caption = Time Case Option2.Value Label1.Caption = Format(Time, “HH:MM:SS AM/PM”)End Select End Sub 20、設(shè)計(jì)一個(gè)程序,用戶界面如圖所示。程序運(yùn)行后,用戶在文本框中輸入一段文字,然后按需要單擊選擇框,用以改變文本的字體、字型、顏色以及大小。 Option Explicit Private Sub Check1_Click()If Check1.Value = 1 Then Text1.FontName = “黑體” Else Text1.FontName = “宋體” End If End Sub Private Sub Check2_Click()If Check2.Value = 1 Then Text1.FontUnderline = True Else Text1.FontUnderline = False End If End Sub Private Sub Check3_Click()If Check3.Value = 1 Then Text1.FontSize = 20 Else Text1.FontSize = 9 End If End Sub Private Sub Check4_Click()If Check4.Value = 1 Then Text1.ForeColor = vbGreen Else Text1.ForeColor = vbBlack End If End Sub Private Sub Command1_Click()Text1.Text = “" End Sub Private Sub Command2_Click()End End Sub 20做出2個(gè)周期的正弦波形.Private Sub Form_Click()Dim i%, x#, y# Const pi As String = 3.1415926 Form1.Scale(-2 * pi, 1.2)-(2 * pi,-1.2)Form1.Line(-2 * pi, 0)-(2 * pi, 0)Form1.Line(0, 1.2)-(0,-1.2)For x =-2 * pi To 2 * pi Step 0.01 y = Sin(x) Form1.PSet(x, y)Next x End Sub 21以窗體為中心,產(chǎn)生1000個(gè)半徑顏色隨機(jī)的同心圓.Private Sub Form_Click()For i = 1 To 1000 x = Form1.ScaleWidth / 2 y = Form1.ScaleHeight / 2 r = Int(Rnd * y) c = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd) Form1.Circle(x, y), r, c Next End Sub 22.九九乘法表 Private Sub Form_Click()Dim i%, j% Form1.Caption = ”九九乘法表“ Print Tab(48);Caption Print Tab(48);”-------------“ For i = 1 To 9 For j = 1 To i Print Tab((j-1)* 12 + 1);i;”*“;j;”=“;i * j; Next j Print Next i End Sub 23求最大公約數(shù)和最小公倍數(shù) Private Sub Command2_Click()Text1.Text = ”“ End Sub Private Sub command1_Click()Dim m%, n%, r%, t% m = Val(Text1.Text)n = Val(Text2.Text)If m < n Then t = m: m = n: n = t t = m * n Do r = m Mod n m = n n = r Loop Until r = 0 Text3.Caption = ”公約數(shù):“ & m Text4.Caption = ”公倍數(shù)" & t / m End Sub 24.用隨機(jī)函數(shù)產(chǎn)生50個(gè)兩位數(shù),保存于一個(gè)一維數(shù)組中,要求找出其中的最大值,最小值及所在位置.第二篇:上機(jī)習(xí)題2教案
第三篇:語(yǔ)法分析上機(jī)實(shí)習(xí)題2014
第四篇:東北大學(xué)上機(jī)實(shí)驗(yàn)3
第五篇:VB上機(jī)考試習(xí)題以及答案