第一篇:東北大學上機實驗3
實驗三順序結構程序設計實驗
一、實驗目的
1.掌握順序結構程序的基本設計方法; 2.掌握數據傳送指令和算術運算指令的用法; 3.掌握邏輯操作指令和移位操作指令的用法; 4.掌握狀態標志位操作指令的用法; 5.掌握簡單的I/O功能調用。
二、實驗要求
1.熟練掌握DEBUG中的各命令的使用方法;
2.學會利用系統功能調用,來實現鍵盤輸入字符、顯示字符的方法;
3.學會十進制數字與其對應的ASCII碼相互轉換的方法; 4.學會十六進制數字與其對應的ASCII碼相互轉換的方法; 5.學會利用查表的方法實現代碼的轉換。
三、實驗內容
1.編寫十六進制數的乘法程序。要求從鍵盤上輸入兩個一位十六進制數據,乘積存入SUM單元。
2.編寫程序,求表達式5X+Y的值,要求:X、Y值從鍵盤輸入,X、Y均為一位十六進制數據,將計算結果存入SUM單元。
四、解題思路
利用INT 21H的1號功能可以從鍵盤上輸入數據, 通過通用寄存器保存中間結果,完成各項計算功能。將結果的ASCII碼保存在內存單元和DL寄存器中,然后利用INT 21H的2號功能將其輸出到屏幕上。輸出到屏幕上一次只能顯示4位二進制數,所以一個字節需要分兩次才能顯示出來。
五、編程實現 5.1 內容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
;從鍵盤上輸入一個數X(默認放入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
;輸入的數據ASIIC碼翻譯成十六進制;X放入到BL中
;規定要顯示的符號必須在DL中;顯示’*’
;從鍵盤輸入第二個數Y(默認放入AL);輸入的數據ASIIC碼翻譯成十六進制;AL*BL
保存數據到SUM中;利用CH和DH存放;規定要顯示的符號必須在DL中 顯示‘=’
;DH中保存了之前AL中的高四位;查表規定數據必須在AL中;利用查表方法顯示;顯示AL中的高四位
;CH中保存了之前AL中的低四位;查表規定數據必須在AL中;查表方法顯示
;;
運行結果如下如圖3-1
圖3-1 5.2 內容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中保存數據5;X*5默認保存到AX中;X*5保存在CX中
;屏幕上顯示'*'前規定需要保存到DL中;顯示’*’
;利用查表法輸出5,之前必須放入到AL中;查表獲取地址;查表轉換
;屏幕顯示數據5之前規定需要放到DL中;顯示5
;屏幕顯示’+’之前規定需要放到DL中;屏幕顯示’+’;從鍵盤上輸入數據Y
;從鍵盤上輸入X,默認保存到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位,即為原來結果的高4位;放到AL中,便于查表轉換后顯示出來;查表
;顯示結果的高4位 AL,BH BX,HTAB DL,AL
;Y保存到BL寄存器中;實現5X+Y;保存結果
;屏幕顯示‘=’之前規定需放入到DL寄存器中;顯示’=’
;保存CL,因為下面指令SHR需用到CL寄存器;保存CL,因為下面指令SHR需用到CL寄存器
AH,02H 21H CH,0FH AL,CH
;原來結果低4位處理;查表轉換;顯示結果低4位 DL,AL AH,02H 21H AH,4CH 21H
END
START 運行結果如圖3-2
圖3-2
六、實驗總結 6.1 心得體會
6.2 遇到的問題
實驗過程中遇到的問題很多,我就挑典型的幾個錯誤分享一下。1.實驗內容1中,INT 21H會改變AL中的值,所以AL中的數據要在該語句之前保存;
2.實驗內容2中,我剛剛開始輸入Y時忘記寫SUB AL,30H,后來運行結果屏幕顯示的結果總是比實際結果大3,這個錯誤找了很久,給我印象深刻。
第二篇:計算方法上機實驗
龍格-庫塔
#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; } 實驗八 折半查找 一、實驗目的1、熟悉visual C++上機環境,進一步掌握C語言的結構特點。 2、進一步掌握圖的基本概念及其含義。 3、掌握查找的結構特征,以及各種存儲結構的特點及使用范圍。 4、掌握查找的基本運算及其實現。 二、實驗內容(參照課本上的第220頁) 設計一個算法,實現折半查找算法。 三、實驗要求 參照課本220頁算法9.2 四、實驗報告要求(參照《數據結構題集》第83頁實驗報告模板) 實驗報告必須有以下內容:實驗目的、實驗內容、實驗要求、源程序、測試結果(打印界面的形式表示)。 實驗四 串的基本操作實現-堆存儲結構的實現 一、實驗目的1、熟悉visual C++上機環境,進一步掌握C語言的結構特點。 2、掌握串的基本操作:初始化串、判串為空、求串長等運算及C語言實現。 二、實驗內容(參照課本上的第72-75頁) 編寫一個程序,實現求串長length_str、串連接、串比較、求子串、串插入、串刪除操作。 三、實驗報告要求(參照《數據結構題集》第83頁實驗報告模板) 實驗報告必須有以下內容:實驗目的、實驗內容、實驗要求、源程序、測試結果(打印界面的形式表示)。 上機實驗要求 一、實驗前的準備工作 在上機實驗前應事先做好準備工作,以提高上機實驗的效率: 1.了解所用的計算機系統(包括C編譯系統)的性能和使用方法。 2.復習和掌握與本實驗有關的教學內容。 3.準備好上機所需程序。要仔細弄清題意,選擇和設計合適的算法。在選擇算法時,應當是在理解現有算法的基礎上,自己動手畫出流程圖再設計源程序。手編寫程序應當書寫整齊,并經人工檢查無誤后才能上機,以提高上機效率。切忌不編寫程序或抄襲他人程序,注意培養嚴謹踏實的學習作風。 4.對運行中可能出現的問題應率先作出估計;對程序中自己有疑問的地方,應作上記號,以便在上機時給予重視。 5.準備好調試和運行時所需的數據。 二、上機實驗基本步驟 上機實驗時應該獨立上機。上機過程中出現的問題,除了系統問題外,一般應自己獨立處理,不要輕易舉手問教師。尤其對“出錯信息”,應善于自己分析判斷。這是學習調試程序的良好機會,碰到困難時切忌輕易放棄。 上機實驗一般應包括以下步驟: 1.調出C編譯系統,進入C工作環境,如Turbo C2.0集成環境。 2.輸入自己編好的程序,注意正確的鍵盤輸入指法。 3.檢查一遍已經輸入的程序是否有錯(包括輸入錯誤和編程中的錯誤)。 4.進行編譯。如果編譯和連接過程中發現錯誤,屏幕上會出現“出錯信息”,則根據提示找到出錯位置和原因,加以改正,再進行編譯??如此反復,直到順利通過編譯和連接為止。 5.運行程序,并分析運行結果是否正確、合理。組織多組實驗數據,分別從不同情況下檢查程序的正確性。 6.輸出程序清單和運行結果。特別要進行上機調試記錄(尤其是出錯情況和排錯記錄),調試數據和運行結果記錄、心得體會等。 三、撰寫實驗報告 做完實驗后要寫實驗報告,對整個實驗進行總結和提高,這是整個實驗過程的一個重要環節,不要把它看成是一種不必要的負擔,更不能敷衍了事。針對本課程的實驗特點,建議在書寫實驗報告時應包括如下內容。 1.實驗目的實驗作為教學的一個重要環節,其目的在于更深入地理解和掌握課程教學中的有關基本概念和基本技術,從而進一步提高分析問題和解決問題的能力。因此,當著手做一個實驗的時候,必須明確實驗目的,以保證達到課程所指定的基本要求。在寫實驗報告時,要進一步確認是否達到了預期的目的。 2.實驗內容 實驗的目的是要通過解決一些具體問題來達到的。根據教學安排、進度、實驗條件、可提供的上機時數、學生的基礎等因素,逐步完成。在實驗報告中,實驗內容是指本次實驗中實際完成的內容,在每一個實驗題目中,一般都提出了一些具體要求,其中有些具體要求是為了達到實驗目的而提出的。因此,在實驗內容中,不僅要寫清楚具體的實驗題目,還應包括具體要求。 3.算法和流程圖 算法設計是程序設計過程中一個重要步驟。本章的某些實驗題目給出了方法說明,有的還提供了流程圖,但有的沒有給出流程圖。如果在做實驗的過程中,使用的算法或流程圖和本書中給出的不一樣,或者書中沒有給出算法和流程圖,則在實驗報告中應給出較詳細的算法說明與流程圖,并對其中的主要符號與變量作相應的說明。 4.程序清單 程序設計的產品就是程序,它應與算法或流程圖相一致。程序要具有易讀性,符合模塊化和結構化原則。 5.運行結果 程序運行結果一般是輸出語句所輸出的結果,對于不同的輸入,其輸出結果是不同的。因此,在輸出結果之前一般還應注明輸入的數據,以便對輸出結果進行分析和比較。 6.調試分析和體會 這是實驗報告中最重要的一項,也是最容易忽視的一項。實驗過程中大量的工作是程序測試,在調試過程中會遇到各種各樣的問題,每解決一個問題就能積累一點經驗,提高編程的能力。因此,對實驗的總結,最主要的是程序調試經驗的總結。調試分析也包括對結果的分析。體會主要是指通過本次實驗是否達到了實驗目的,有哪些基本概念得到了深入理解等。第三篇:上機實驗八
第四篇:上機實驗四
第五篇:上機實驗要求