第一篇:东北大学上机实验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.调试分析和体会 这是实验报告中最重要的一项,也是最容易忽视的一项。实验过程中大量的工作是程序测试,在调试过程中会遇到各种各样的问题,每解决一个问题就能积累一点经验,提高编程的能力。因此,对实验的总结,最主要的是程序调试经验的总结。调试分析也包括对结果的分析。体会主要是指通过本次实验是否达到了实验目的,有哪些基本概念得到了深入理解等。第三篇:上机实验八
第四篇:上机实验四
第五篇:上机实验要求