第一篇:東北大學(xué)上機(jī)實(shí)驗(yàn)3
實(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)鍵盤(pá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.編寫(xiě)十六進(jìn)制數(shù)的乘法程序。要求從鍵盤(pán)上輸入兩個(gè)一位十六進(jìn)制數(shù)據(jù),乘積存入SUM單元。
2.編寫(xiě)程序,求表達(dá)式5X+Y的值,要求:X、Y值從鍵盤(pán)輸入,X、Y均為一位十六進(jìn)制數(shù)據(jù),將計(jì)算結(jié)果存入SUM單元。
四、解題思路
利用INT 21H的1號(hào)功能可以從鍵盤(pán)上輸入數(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
;從鍵盤(pán)上輸入一個(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中;顯示’*’
;從鍵盤(pán)輸入第二個(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中;屏幕顯示’+’;從鍵盤(pán)上輸入數(shù)據(jù)Y
;從鍵盤(pán)上輸入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中,我剛剛開(kāi)始輸入Y時(shí)忘記寫(xiě)SUB AL,30H,后來(lái)運(yùn)行結(jié)果屏幕顯示的結(jié)果總是比實(shí)際結(jié)果大3,這個(gè)錯(cuò)誤找了很久,給我印象深刻。
第二篇:計(jì)算方法上機(jī)實(shí)驗(yàn)
龍格-庫(kù)塔
#include
#include
float function(float x,float y)
{
return(0-(y*y));//f(x,y)μ?±í′?ê? }
int main()
{
float x0,x1,y0,y1,k1,k2,k3,k4,a,b,c,n,h;int i;
scanf(“%f %f %f %f”,&a,&b,&c,&n);x0=a;
y0=c;
h=(b-a)/n;
for(i=1;i<=n;i++)
{
k1=h*function(x0,y0);
k2=h*function(x0+h/2,y0+k1/2);k3=h*function(x0+h/2,y0+k2/2);k4=h*function(x0+h,y0+k3);x1=x0+h;
y1=y0+(k1+2*k2+2*k3+k4)/6;
printf(“x%d=%f,y%d=%fn”,i,x1,i,y1);x0=x1;
y0=y1;
}
return 0;
}
拉格朗日
#include
#include
#include
#define maxlength 500
#define pi 3.14***
floata[maxlength],f[maxlength];
float n;
floatlagrange(floata[],floatf[],float x,int n)
{
int k=0,j;
floaty=0.0,l;
while(k<=n)
{
l=1.0;
// printf(“%lfn”,y);
for(j=0;j<=n;j++)
{
if(j!=k)
{
l=l*(x-a[j])/(a[k]-a[j]);// printf(“%lfn”,l);
}
}
//printf(“%lfn”,f[k]);
// printf(“%lfn”,l);
y=y+l*f[k];
k++;
}
printf(“x=%f,y=%fn”,x,y);
return y;
}
float fx1(floatx)
{
return(1/(1+x*x));
}
floatfx2(floatx)
{
return exp(x);
}
floatfx3(float x)
{
return sqrt(x);
}
void math1(float c,float n)
{
int i=0;
float h;
h=2*c/n;
while(i<=n)
{
a[i]=i*h-5;
i++;
}
}
void math2()
{
int i=0;
while(i<=n)
{
a[i]=cos((2*i+1)*pi/2/(n+1));
i++;
}
}
int main()
{
n=20;
int i;
math1(5,n);
for(i=0;i<=n;i++)
{
f[i]=fx1(a[i])
}
lagrange(a,f,0.75,n);
return 0;
}
龍貝格
#include
#include
#include
double t[1000],r[1000];
double f(double x)
{
return(x*x*exp(x));
}
int main()
{
double h,a,b,e;
int i,N,m;
scanf(“%lf,%lf,%d,%lf”,&a,&b,&N,&e);
h=b-a;
m=0;
t[1]=0.5*h*(f(a)+f(b));
printf(“%lf”,t[1]);
r[0]=t[0];
while(1)
{
printf(“n”);
for(i=0;i<((m<4)?m:4);i++)
t[i]=r[i];
m++;
h=h/2;
r[0]=t[0]/2;
for(i=1;i<=pow(2,m);i++)
r[0]+=h*f(a+(i-0.5)*h)/2;
printf(“%lf”,r[0]);
r[1]=(4*r[0]-t[0])/3;
printf(“ %lf”,r[1]);
if(m==1)
continue;
r[2]=(16*r[1]-t[1])/15;
printf(“ %lf”,r[2]);
if(m==2)
continue;
r[3]=(64*r[2]-t[2])/63;
printf(“ %lf”,r[3]);
if(m==3)
continue;
if((fabs(r[3]-t[3])<=e)||(m==N))
break;
}
printf(“nthe current time is :%dn”,m);
return 0;
}
牛頓
#include
#include
#include
double function(double point)
{
return(point*point-2*point*exp(-point)+exp(-2*point));
}
double d_function(double point)
{
return(2*point+2*point*exp(-point)-2*exp(-point)-2*exp(-2*point));}
int main()
{
double beginner,error1,error2;
int max_times=0;
beginner=error1=error2=0;
scanf(“%lf %lf %lf %d”,&beginner,&error1,&error2,&max_times);int current_times=0;
while(current_times<=max_times)
{
if(fabs(function(beginner)) { printf(“%lfn”,beginner); return 0; } if(fabs(d_function(beginner)) { printf(“failuren”); return 0; } beginner=beginner-function(beginner)/d_function(beginner);if(fabs(function(beginner)/d_function(beginner)) printf(“%lfn”,beginner); return 0; } current_times++; } printf(“failuren”); return 0; } 實(shí)驗(yàn)八 折半查找 一、實(shí)驗(yàn)?zāi)康?、熟悉visual C++上機(jī)環(huán)境,進(jìn)一步掌握C語(yǔ)言的結(jié)構(gòu)特點(diǎn)。 2、進(jìn)一步掌握?qǐng)D的基本概念及其含義。 3、掌握查找的結(jié)構(gòu)特征,以及各種存儲(chǔ)結(jié)構(gòu)的特點(diǎn)及使用范圍。 4、掌握查找的基本運(yùn)算及其實(shí)現(xiàn)。 二、實(shí)驗(yàn)內(nèi)容(參照課本上的第220頁(yè)) 設(shè)計(jì)一個(gè)算法,實(shí)現(xiàn)折半查找算法。 三、實(shí)驗(yàn)要求 參照課本220頁(yè)算法9.2 四、實(shí)驗(yàn)報(bào)告要求(參照《數(shù)據(jù)結(jié)構(gòu)題集》第83頁(yè)實(shí)驗(yàn)報(bào)告模板) 實(shí)驗(yàn)報(bào)告必須有以下內(nèi)容:實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)內(nèi)容、實(shí)驗(yàn)要求、源程序、測(cè)試結(jié)果(打印界面的形式表示)。 實(shí)驗(yàn)四 串的基本操作實(shí)現(xiàn)-堆存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn) 一、實(shí)驗(yàn)?zāi)康?、熟悉visual C++上機(jī)環(huán)境,進(jìn)一步掌握C語(yǔ)言的結(jié)構(gòu)特點(diǎn)。 2、掌握串的基本操作:初始化串、判串為空、求串長(zhǎng)等運(yùn)算及C語(yǔ)言實(shí)現(xiàn)。 二、實(shí)驗(yàn)內(nèi)容(參照課本上的第72-75頁(yè)) 編寫(xiě)一個(gè)程序,實(shí)現(xiàn)求串長(zhǎng)length_str、串連接、串比較、求子串、串插入、串刪除操作。 三、實(shí)驗(yàn)報(bào)告要求(參照《數(shù)據(jù)結(jié)構(gòu)題集》第83頁(yè)實(shí)驗(yàn)報(bào)告模板) 實(shí)驗(yàn)報(bào)告必須有以下內(nèi)容:實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)內(nèi)容、實(shí)驗(yàn)要求、源程序、測(cè)試結(jié)果(打印界面的形式表示)。 上機(jī)實(shí)驗(yàn)要求 一、實(shí)驗(yàn)前的準(zhǔn)備工作 在上機(jī)實(shí)驗(yàn)前應(yīng)事先做好準(zhǔn)備工作,以提高上機(jī)實(shí)驗(yàn)的效率: 1.了解所用的計(jì)算機(jī)系統(tǒng)(包括C編譯系統(tǒng))的性能和使用方法。 2.復(fù)習(xí)和掌握與本實(shí)驗(yàn)有關(guān)的教學(xué)內(nèi)容。 3.準(zhǔn)備好上機(jī)所需程序。要仔細(xì)弄清題意,選擇和設(shè)計(jì)合適的算法。在選擇算法時(shí),應(yīng)當(dāng)是在理解現(xiàn)有算法的基礎(chǔ)上,自己動(dòng)手畫(huà)出流程圖再設(shè)計(jì)源程序。手編寫(xiě)程序應(yīng)當(dāng)書(shū)寫(xiě)整齊,并經(jīng)人工檢查無(wú)誤后才能上機(jī),以提高上機(jī)效率。切忌不編寫(xiě)程序或抄襲他人程序,注意培養(yǎng)嚴(yán)謹(jǐn)踏實(shí)的學(xué)習(xí)作風(fēng)。 4.對(duì)運(yùn)行中可能出現(xiàn)的問(wèn)題應(yīng)率先作出估計(jì);對(duì)程序中自己有疑問(wèn)的地方,應(yīng)作上記號(hào),以便在上機(jī)時(shí)給予重視。 5.準(zhǔn)備好調(diào)試和運(yùn)行時(shí)所需的數(shù)據(jù)。 二、上機(jī)實(shí)驗(yàn)基本步驟 上機(jī)實(shí)驗(yàn)時(shí)應(yīng)該獨(dú)立上機(jī)。上機(jī)過(guò)程中出現(xiàn)的問(wèn)題,除了系統(tǒng)問(wèn)題外,一般應(yīng)自己獨(dú)立處理,不要輕易舉手問(wèn)教師。尤其對(duì)“出錯(cuò)信息”,應(yīng)善于自己分析判斷。這是學(xué)習(xí)調(diào)試程序的良好機(jī)會(huì),碰到困難時(shí)切忌輕易放棄。 上機(jī)實(shí)驗(yàn)一般應(yīng)包括以下步驟: 1.調(diào)出C編譯系統(tǒng),進(jìn)入C工作環(huán)境,如Turbo C2.0集成環(huán)境。 2.輸入自己編好的程序,注意正確的鍵盤(pán)輸入指法。 3.檢查一遍已經(jīng)輸入的程序是否有錯(cuò)(包括輸入錯(cuò)誤和編程中的錯(cuò)誤)。 4.進(jìn)行編譯。如果編譯和連接過(guò)程中發(fā)現(xiàn)錯(cuò)誤,屏幕上會(huì)出現(xiàn)“出錯(cuò)信息”,則根據(jù)提示找到出錯(cuò)位置和原因,加以改正,再進(jìn)行編譯??如此反復(fù),直到順利通過(guò)編譯和連接為止。 5.運(yùn)行程序,并分析運(yùn)行結(jié)果是否正確、合理。組織多組實(shí)驗(yàn)數(shù)據(jù),分別從不同情況下檢查程序的正確性。 6.輸出程序清單和運(yùn)行結(jié)果。特別要進(jìn)行上機(jī)調(diào)試記錄(尤其是出錯(cuò)情況和排錯(cuò)記錄),調(diào)試數(shù)據(jù)和運(yùn)行結(jié)果記錄、心得體會(huì)等。 三、撰寫(xiě)實(shí)驗(yàn)報(bào)告 做完實(shí)驗(yàn)后要寫(xiě)實(shí)驗(yàn)報(bào)告,對(duì)整個(gè)實(shí)驗(yàn)進(jìn)行總結(jié)和提高,這是整個(gè)實(shí)驗(yàn)過(guò)程的一個(gè)重要環(huán)節(jié),不要把它看成是一種不必要的負(fù)擔(dān),更不能敷衍了事。針對(duì)本課程的實(shí)驗(yàn)特點(diǎn),建議在書(shū)寫(xiě)實(shí)驗(yàn)報(bào)告時(shí)應(yīng)包括如下內(nèi)容。 1.實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)作為教學(xué)的一個(gè)重要環(huán)節(jié),其目的在于更深入地理解和掌握課程教學(xué)中的有關(guān)基本概念和基本技術(shù),從而進(jìn)一步提高分析問(wèn)題和解決問(wèn)題的能力。因此,當(dāng)著手做一個(gè)實(shí)驗(yàn)的時(shí)候,必須明確實(shí)驗(yàn)?zāi)康?,以保證達(dá)到課程所指定的基本要求。在寫(xiě)實(shí)驗(yàn)報(bào)告時(shí),要進(jìn)一步確認(rèn)是否達(dá)到了預(yù)期的目的。 2.實(shí)驗(yàn)內(nèi)容 實(shí)驗(yàn)的目的是要通過(guò)解決一些具體問(wèn)題來(lái)達(dá)到的。根據(jù)教學(xué)安排、進(jìn)度、實(shí)驗(yàn)條件、可提供的上機(jī)時(shí)數(shù)、學(xué)生的基礎(chǔ)等因素,逐步完成。在實(shí)驗(yàn)報(bào)告中,實(shí)驗(yàn)內(nèi)容是指本次實(shí)驗(yàn)中實(shí)際完成的內(nèi)容,在每一個(gè)實(shí)驗(yàn)題目中,一般都提出了一些具體要求,其中有些具體要求是為了達(dá)到實(shí)驗(yàn)?zāi)康亩岢龅?。因此,在?shí)驗(yàn)內(nèi)容中,不僅要寫(xiě)清楚具體的實(shí)驗(yàn)題目,還應(yīng)包括具體要求。 3.算法和流程圖 算法設(shè)計(jì)是程序設(shè)計(jì)過(guò)程中一個(gè)重要步驟。本章的某些實(shí)驗(yàn)題目給出了方法說(shuō)明,有的還提供了流程圖,但有的沒(méi)有給出流程圖。如果在做實(shí)驗(yàn)的過(guò)程中,使用的算法或流程圖和本書(shū)中給出的不一樣,或者書(shū)中沒(méi)有給出算法和流程圖,則在實(shí)驗(yàn)報(bào)告中應(yīng)給出較詳細(xì)的算法說(shuō)明與流程圖,并對(duì)其中的主要符號(hào)與變量作相應(yīng)的說(shuō)明。 4.程序清單 程序設(shè)計(jì)的產(chǎn)品就是程序,它應(yīng)與算法或流程圖相一致。程序要具有易讀性,符合模塊化和結(jié)構(gòu)化原則。 5.運(yùn)行結(jié)果 程序運(yùn)行結(jié)果一般是輸出語(yǔ)句所輸出的結(jié)果,對(duì)于不同的輸入,其輸出結(jié)果是不同的。因此,在輸出結(jié)果之前一般還應(yīng)注明輸入的數(shù)據(jù),以便對(duì)輸出結(jié)果進(jìn)行分析和比較。 6.調(diào)試分析和體會(huì) 這是實(shí)驗(yàn)報(bào)告中最重要的一項(xiàng),也是最容易忽視的一項(xiàng)。實(shí)驗(yàn)過(guò)程中大量的工作是程序測(cè)試,在調(diào)試過(guò)程中會(huì)遇到各種各樣的問(wèn)題,每解決一個(gè)問(wèn)題就能積累一點(diǎn)經(jīng)驗(yàn),提高編程的能力。因此,對(duì)實(shí)驗(yàn)的總結(jié),最主要的是程序調(diào)試經(jīng)驗(yàn)的總結(jié)。調(diào)試分析也包括對(duì)結(jié)果的分析。體會(huì)主要是指通過(guò)本次實(shí)驗(yàn)是否達(dá)到了實(shí)驗(yàn)?zāi)康模心男┗靖拍畹玫搅松钊肜斫獾取?/p> 第三篇:上機(jī)實(shí)驗(yàn)八
第四篇:上機(jī)實(shí)驗(yàn)四
第五篇:上機(jī)實(shí)驗(yàn)要求