实验报告 子程序设计实验
- 格式:doc
- 大小:222.50 KB
- 文档页数:10
实验名称:子程序设计实验日期:2023年X月X日实验地点:XX大学计算机实验室实验目的:1. 理解子程序的概念和作用。
2. 掌握子程序的设计方法和调用方式。
3. 学会使用子程序提高程序的可读性和可维护性。
实验内容:一、实验背景子程序是程序设计中常用的一种结构,它可以将一段具有独立功能的代码封装起来,方便在其他程序中调用。
使用子程序可以提高程序的可读性、可维护性和模块化程度。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验步骤1. 创建一个新的C++项目,命名为“子程序设计”。
2. 在项目中创建一个头文件“Subroutine.h”,用于声明子程序。
3. 在头文件中声明两个子程序:`Add` 和 `Subtract`。
4. 在头文件中定义一个全局变量 `Result`。
5. 在源文件“Subroutine.cpp”中实现头文件中声明的子程序。
6. 在主函数中调用子程序,并输出结果。
7. 编译并运行程序,观察输出结果。
四、实验代码1. 头文件“Subroutine.h”:```cpp#ifndef SUBROUTINE_H#define SUBROUTINE_Hvoid Add(int a, int b);void Subtract(int a, int b); int Result;#endif // SUBROUTINE_H```2. 源文件“Subroutine.cpp”:```cpp#include "Subroutine.h"void Add(int a, int b) {Result = a + b;}void Subtract(int a, int b) { Result = a - b;}```3. 主函数“main.cpp”:```cpp#include <iostream>#include "Subroutine.h"int main() {int a = 10;int b = 5;Add(a, b);std::cout << "Add: " << Result << std::endl;Subtract(a, b);std::cout << "Subtract: " << Result << std::endl;return 0;}```五、实验结果与分析1. 编译并运行程序,输出结果如下:```Add: 15Subtract: 5```2. 分析:(1)在实验中,我们首先在头文件中声明了两个子程序 `Add` 和 `Subtract`,它们分别用于计算两个整数的和与差。
程序设计实践实验报告实验报告课程名称___ 程序设计实践______实验项目_______子程序设计实验仪器_______PC _____系别_ 计算机科学与工程____专业______软件工程__________班级/学号___B软工0701/2007011801学生姓名_____ XX____________实验日期____2009-3-26__________成绩_______________________指导教师_____XX______________.实验二子程序设计一、实验目的1. 学习和掌握参数传递的方法;2.学习和掌握递归调用;3.了解goto语句的使用;4.了解降低嵌套深度的方法;5.了解复杂度的度量。
二、实验要求1.通过编程实现,学习和理解参数传递和递归调用的使用。
2.使用goto语句编写程序,用非goto语句改写程序;3.了解减少嵌套层次和度量复杂度的方法。
三、实验内容和结果1. 参数传递(1)创建控制台应用程序项目(CLR)。
定义函数swap,swap函数有两个整型形参x,y,swap的功能为交换x和y的值,并依次显示出交换后的x,y的值。
主函数定义两个整型变量a,b,并赋不同的初值,依次显示a和b的值,调用swap 函数,a,b作为实参,再在主函数中依次显示a和b的值。
(值传递)编写并运行以上程序,分析运行结果,思考值传递中是否会改变实参的值。
(2)创建控制台应用程序项目,修改(1)中程序,使swap函数的参数为两个指向整型的指针,swap函数中交换指针所指向的内容;主函数中调用swap函数,交换整型变量a和b的值。
编写并运行修改后的程序,比较与(1)中程序运行结果的不同之处及原因。
(3)创建控制台应用程序项目,修改(1)中程序,采用引用方式传递函数的参数。
编写并运行修改后的程序,比较与(1)、(2)中程序运行结果的异同以及(2)、(3)程序中改写的难易程度。
int swap1(int x,int y){int temp;temp=x;x=y;y=temp;return 0;} //实参传递函数int swap2(int &x,int &y){int temp;temp=x;x=y;y=temp;return 0;}//形参传递函数int swap3(int *x,int *y){int temp;temp=*x;*x=*y;*y=temp;return 0;}//指针传递函数int main(){int a,b;Console::WriteLine ("plesae input a and b interger:");a=Int32::Parse(Console::ReadLine());b=Int32::Parse(Console::ReadLine());Console::WriteLine ("实参传递函数交换a和b:");Console::WriteLine ("起始a和b:"+a+" "+b);swap1(a,b);Console::WriteLine ("交换后a和b:"+a+" "+b);Console::WriteLine ("-------------------");Console::WriteLine ("形参传递函数交换a和b:");Console::WriteLine ("起始a和b:"+a+" "+b);swap2(a,b);Console::WriteLine ("交换后a和b:"+a+" "+b);Console::WriteLine ("++++++++++++++++");Console::WriteLine ("指针传递函数交换a和b:");Console::WriteLine ("起始a和b:"+a+" "+b);swap3(&a,&b);Console::WriteLine ("交换后a和b:"+a+" "+b);Console::WriteLine ( "%%%%%%%%%%%%%%%%%" );Console::ReadLine();return 0;}2.递归调用.使用递归时,请注意如下原则:a.确认递归能够停止(子程序中至少含有一条非递归的路径);b.把递归限制在一个子程序内;c.留心栈空间;使用递归前,先考虑可否用其他方式编写程序,可能效果更好。
子程序设计实验报告范文精简处理实验报告是对实验目的、流程、结果和结论等内容的详细描述和总结。
以下是一份精简处理的子程序设计实验报告范文,共计1245字。
#实验报告名称:子程序设计实验##一、实验目的1.熟悉子程序的定义和使用方法;2.掌握子程序设计的基本思路和技巧;3.实践并提高对程序模块化设计的理解和能力。
##二、实验设备和材料-计算机-C语言编程环境##三、实验方法与流程1.根据实验要求,在C语言编程环境中编写一个独立的子程序;2.使用该子程序计算并输出指定的结果;3.程序编写完成后,编译并运行该程序,观察结果是否符合要求。
##四、实验内容1. 设计一个名为`sum`的子程序,接受一个整型数组和数组长度作为参数,计算数组元素之和,并返回该和;2.编写主程序,使用该子程序求解一个整型数组的元素之和;3.输出求和结果,观察是否正确。
##五、实验结果与分析实验中,我们使用了一组测试数据进行验证。
首先,定义一个整型数组`arr`,其中包含5个元素:{1, 2, 3, 4, 5}。
然后,将该数组和数组长度传递给`sum`子程序进行求和操作。
经过运行,我们得到的结果是15,与我们预期的结果一致。
因此,可以判断子程序设计正确,并成功实现了数组元素之和的计算功能。
##六、实验总结通过本次实验,我们成功设计并实现了一个独立的子程序,在主程序中调用该子程序计算了一个整型数组的元素之和。
通过此次实验,我们进一步熟悉了子程序的定义和使用方法,掌握了子程序设计的基本思路和技巧,并提高了对程序模块化设计的理解和能力。
这对于今后的软件开发和编程工作具有重要意义。
##七、实验心得本次实验让我更加深入地理解了子程序设计的重要性和作用。
通过将功能模块化,我们可以方便地组织和管理程序代码,提高代码的复用性和可维护性。
在实际的软件开发中,子程序设计及其正确使用是非常关键的,能够大大提高开发效率和代码的可靠性。
因此,我会继续学习和掌握更多的子程序设计技巧,并应用于未来的编程工作中。
本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。
.段内调用与返回:调用子程序指令与子程序同在一个段内。
因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。
3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。
一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。
2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。
子程序设计实验报告子程序设计实验报告1. 实验背景子程序是一种可重复使用的程序代码片段,能够被主程序调用执行。
本次实验旨在通过编写子程序来加深对子程序设计的理解,并能够熟练使用子程序进行程序的模块化设计。
2. 实验目的通过本次实验,我将掌握以下技能:- 理解子程序的概念和作用- 掌握子程序的定义和调用- 理解子程序的参数传递方式- 学会使用子程序进行程序的模块化设计3. 实验内容本次实验涉及三个任务,分别是:1. 编写一个计算两个数之和的子程序2. 编写一个计算阶乘的子程序3. 编写一个计算圆形面积的子程序4. 实验步骤4.1 编写计算两个数之和的子程序首先,我们需要编写一个子程序用来计算两个数之和。
以下是该子程序的代码示例:pythondef add_numbers(num1, num2):sum = num1 + num2return sum上述代码中,我们定义了一个名为`add_numbers`的子程序,该程序接收两个参数`num1`和`num2`,计算它们的和并返回结果。
4.2 编写计算阶乘的子程序接下来,我们需要编写一个子程序用来计算一个数的阶乘。
以下是该子程序的代码示例:pythondef factorial(n):if n <= 1:return 1else:return n factorial(n-1)上述代码中,我们定义了一个名为`factorial`的子程序,该程序接收一个参数`n`,计算`n`的阶乘并返回结果。
我们使用递归的方式实现了阶乘的计算。
4.3 编写计算圆形面积的子程序最后,我们需要编写一个子程序用来计算圆形的面积。
以下是该子程序的代码示例:pythondef calculate_circle_area(radius):pi = 3.14159area = pi radius radiusreturn area上述代码中,我们定义了一个名为`calculate_circle_area`的子程序,该程序接收一个参数`radius`,计算圆形的面积并返回结果。
实验七求最大值和最小值一、实验目的1、学习子程序的定义和调用方法。
2、掌握子程序设计、调试。
二、实验内容对内存中给定的几个无符号字节数,求其最大值和最小值并在数码管上显示。
三、实验程序框图四、实验步骤脱机模式:(1)在P.态下,按SCAL键,然后在内存4000H~4007H中写入任意八个字节的数,按下MON键,返回P状态。
(2)在P.态下,输入2E70,按EXEC键。
(3)数码管显示为:“XX——XX”,最左两位为最大值,最右两位为最小值。
(4)按“系统复位”键,退出运行状态,数码管返回“P。
”状态。
联机模式:(1)在内存4000H~4007H中写入任意八个字节的数,按下MON键,返回P状态。
(2)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S7.ASM 文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(3)数码管显示为:“XX——XX”,最左两位为最大值,最右两位为最小值。
(4)按“系统复位”键,退出运行状态,数码管返回“P。
”状态。
五、实验程序清单X:\DICE-8086K3微机原理与接口实验箱CDROM\CODE\86kasm\S7.ASMCODE SEGMENT ;S7.ASM,LOOK FOR MAX & MINASSUME CS:CODEORG 2E70H ;INPUT DATA 4000H--4007HSTART: JMP START0PA EQU 0FF21H ;字位口PB EQU 0FF22H ;字形口PC EQU 0FF23H ;键入口BUF DB ?,?,?,?,?,?data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1hdb 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV SI,4000H ;数据首址MOV CX,0008H ;长度CALL MAXMIN ;调用比较大小子程序CALL BUF1 ;最大最小值送显示缓冲区CON1: CALL DISP ;循环调用显示子程序JMP CON1MAXMIN: JCXZ EXIT ;比较结束子程序返回PUSH SI ;压栈PUSH CXPUSH BXMOV BH,[SI] ;取第一个数MOV BL,BH ;保存数据到BLCON2: LODSB ; 取数CMP AL,BH ;比较两数JNA X1 ;小于等于转MOV BH,AL ;BH存大的数JMP X2 ;转X2X1: CMP AL,BL ;比较两数JNB X2 ;大于等于转MOV BL,AL ;BL存小的数X2: LOOP CON2 ;未完继续MOV AX,BX ;POP BX ;出栈POP CXPOP SIEXIT: RET ;返回DISP: MOV AL,0FFH ;显示子程序5msMOV DX,PAOUT DX,ALMOV CL,0DFH ;注释略,见实验六显示程序MOV BX,OFFSET BUFDIS1: MOV AL,[BX]MOV AH,00HPUSH BXMOV BX,OFFSET DATA1ADD BX,AXMOV AL,[BX]POP BXMOV DX,PBOUT DX,ALMOV AL,CLMOV DX,PAOUT DX,ALPUSH CXDIS2: MOV CX,00A0HLOOP $POP CXCMP CL,0FEH ;01HJZ LX1MOV AL,0FFH ;00HMOV DX,PAOUT DX,ALINC BXROR CL,1 ;SHR CL,1JMP DIS1LX1: MOV AL,0FFHMOV DX,PBOUT DX,ALRETBUF1: MOV BH,AHCALL ZHMOV BUF+5,ALMOV BUF+4,AHMOV AL,BHCALL ZHMOV BUF,AHMOV BUF+1,ALMOV BUF+2,17HMOV BUF+3,17HRET;-------------------------------------------------------- ZH: MOV BL,AL ;数据拆送MOV CL,4ROL AL,CLAND AL,0FHMOV AH,ALMOV AL,BLAND AL,0FHRET;------------------------------------------------------- CODE ENDSEND START。
子程序设计实验报告子程序设计实验报告1. 实验目的本实验旨在让学生通过设计和实现子程序,深入了解子程序的概念、使用方法和设计原则,培养学生的程序设计思维和编程能力。
2. 实验背景子程序是一个独立于主程序的独立程序段,它可以完成特定的任务并返回结果。
子程序可以被主程序调用多次,不仅可以提高程序的可读性和可维护性,还可以节省重复代码的编写和修改时间。
在实际的程序设计中,子程序被广泛应用于各种领域,如算法实现、功能模块划分、错误处理等。
3. 实验内容在这个实验中,我们将设计一个简单的子程序,实现一个猜数字的游戏。
游戏的规则是计算机随机一个1到100之间的整数,用户通过输入猜测的数字,计算机根据用户的猜测给出相应的提示,直到用户猜中为止。
实验要求:- 使用 Python 编程语言实现。
- 设计一个子程序,用于随机数。
- 设计一个子程序,用于接受用户输入并判断是否猜中。
- 设计一个子程序,用于给出猜测结果的提示。
4. 实验步骤4.1 设计子程序:随机数,我们需要设计一个子程序,用于一个1到100之间的整数。
可以使用 Python 的 random 模块中的 randint 函数来实现。
pythonimport randomdef generate_random_number():return random.randint(1, 100)4.2 设计子程序:接受用户输入并判断是否猜中接下来,我们设计一个子程序,用于接受用户输入的猜测数字,并判断是否猜中。
可以使用 Python 的 input 函数来接受用户输入,并使用 if 语句来判断用户猜测的数字是否与的随机数一致。
pythondef get_user_guess():guess = int(input(\。
子程序设计实验报告1. 实验目的本实验旨在通过设计子程序,巩固和提升学生对于子程序设计的理解和运用能力,培养学生的逻辑思维和程序设计能力。
2. 实验内容2.1 设计一个子程序,实现两个数相加的功能。
2.2 设计一个子程序,实现两个数相乘的功能。
2.3 设计一个子程序,实现对一个数的平方根的计算。
3. 实验步骤3.1 子程序1:实现两个数相加assemblyadd_numbers:; 输入:寄存器R1和R2分别存放两个待相加的数; 输出:寄存器R0存放相加结果; 保存现场PUSH R1PUSH R2; 执行相加操作ADD R0, R1, R2; 恢复现场POP R0POP R2POP R1; 返回RET3.2 子程序2:实现两个数相乘assemblymultiply_numbers:; 输入:寄存器R1和R2分别存放两个待相乘的数 ; 输出:寄存器R0存放相乘结果; 保存现场PUSH R1PUSH R2; 执行相乘操作MUL R0, R1, R2; 恢复现场POP R0POP R2POP R1; 返回RET3.3 子程序3:实现对一个数的平方根的计算assemblycalculate_sqrt:; 输入:寄存器R1存放待计算平方根的数 ; 输出:寄存器R0存放计算结果; 保存现场PUSH R1PUSH R0; 初始化结果为0XOR R0, R0; 循环计算平方根LDR R2, 1 ; 设定计算误差精度为1 sqrt_loop:; 比较结果的平方与待计算数的大小MUL R3, R0, R0CMP R3, R1; 结果满足精度要求,跳出循环BHI sqrt_done; 调整结果ADD R0, R0, R2; 继续循环B sqrt_loopsqrt_done:; 恢复现场POP R0POP R1; 返回RET4. 实验结果和分析经过上述子程序的设计和实现,我们实现了两个数相加、两个数相乘、以及一个数的平方根的计算功能。
子程序设计实验报告子程序设计实验报告引言:子程序是计算机程序中的一个重要组成部分,它能够将一个大的任务分解成若干个小的子任务,使得程序结构更加清晰,并且提高了代码的可复用性和可维护性。
本次实验旨在通过设计和实现一些子程序,来加深对子程序设计的理解和应用。
一、实验目的本次实验的主要目的是掌握子程序的基本概念和设计方法,并通过实际编程实现一些常见的子程序功能。
具体目标如下:1. 理解子程序的定义和调用过程;2. 掌握参数传递和返回值的方法;3. 设计和实现一些常见的子程序功能。
二、实验环境本次实验使用的是C语言编程环境,具体使用的是GCC编译器。
三、实验内容1. 子程序的定义和调用子程序是一个独立的代码块,可以在程序中被多次调用。
在C语言中,子程序的定义使用函数的方式进行,通过函数名来调用子程序。
在定义子程序时,需要指定子程序的返回类型、参数类型和参数个数。
在调用子程序时,需要提供相应的参数。
2. 参数传递和返回值在子程序的调用过程中,参数的传递是一个重要的问题。
参数可以通过值传递、引用传递或指针传递的方式进行。
在值传递中,实参的值会被复制到形参中;在引用传递中,实参的地址会被传递给形参;在指针传递中,实参的指针会被传递给形参。
返回值可以通过return语句来实现,返回值的类型需要与子程序的返回类型相匹配。
3. 子程序的设计和实现根据实际需求,设计和实现一些常见的子程序功能,例如求两个数的最大公约数、判断一个数是否为素数等。
在设计子程序时,需要考虑输入参数的合法性和边界条件,以及返回值的正确性。
四、实验步骤1. 确定子程序的功能和输入输出要求;2. 设计子程序的算法和流程;3. 编写子程序的代码,并进行调试和测试;4. 在主程序中调用子程序,并验证其正确性;5. 对实验结果进行分析和总结。
五、实验结果与分析通过实验,我们成功设计和实现了一些常见的子程序功能,例如求两个数的最大公约数和判断一个数是否为素数。
实验一并行输入输出口的使用一、实验目的:学会设计proteus 7仿真电路,学习P1口的使用方法和延时子程序的编写用Keil uVision 3编程实现发光二极管的流水点亮。
二、实验原理:P1口为8位准双向I/O口,它的每一位都可以分别定义为输入线或输出线(作为输入时,口锁存器必须置1)。
P1口作为输出,接8个发光二极管D1~D8经限流电阻分别接至8个引脚。
本实验仿真电路图、流程图如下:三、实验代码:#include<reg51.h>#include<intrins.h> //移位库函数包含于此头文件中void delay(unsigned int d) //定义延时子函数{ while(--d>0);}void main(){ unsigned char i,sel;while(1){ sel=0xfe;for(i=0;i<=8;i++){ P1=sel; //显示变量赋给P1口delay(50000); //延时sel=_crol_(sel,1); //改变显示变量}}}四、实验结论:用while语句实现发光二极管循环流水点亮,从上到下一次点亮。
实验二C51分支程序设计一、实验目的:学习多分支选择结构和switch语句,了解循环的嵌套。
二、实验原理:do while 循环先执行后判断是否循环,switch括号中的表达式的值与某case后的常量表达式的值相同时,就执行它后面的语句,遇到break语句则退出switch语句。
本实验仿真电路图、流程图如下:(仿真电路图)(流程图)三、实验代码:#include <reg51.h>void main(){ char a;do{ P1=0xff;a=P1;a=a&0x03;switch(a){ case 0:P2=0x0e;break;case 1:P2=0x0d;break;case 2:P2=0x0b;break;case 3:P2=0x07;break;}}while(1);}四、实验结论:多分支选择的switch/case语句,可直接处理并行多分支选择问题,从匹配表达式的括号开始执行,不再进行判断。
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
汇编语言子程序设计实验心得(精选5篇)在刚进入大学得知数学专业也要学习程序设计的时候,我的内心充满了喜悦,因为我喜欢数学的同时,一样喜欢计算机。
虽说程序设计只是计算机专业的冰山一角,但这却是基础,所以我下定决心要学好它。
前段时间,我们学习了前五章的内容。
第一章主要对c语言进行了简单的介绍;第二章便是对最基础知识的介绍:C语言的数据类型、常用的简单符号、运算符的结合性等;而第三章就开始进行一些简单的算术运算了,千万别以为这就是小学数学水平的东西,其实这跟数学还是有差别的;第四章键盘输入和屏幕输出就是告诉我们如何进行人机交流,把自己的东西输入电脑,再在屏幕上显示出来;第五章便开始利用计算机进行程序设计来解决生活中的实际问题,而这就需要一个很重要的结构——选择控制结构。
虽然刚开始学习的内容还不是很多,但我却在这为时不长的学习中,深深地感受到了c语言的魅力,以及它强大的“功效”:C语言语言虽简单,但表达能力却强,使用起来灵活方便,而且程序设计自由度大,我们可以从多角度寻找解决问题的方案。
虽然人的能力很强,但不是所有问题解决的最佳途径依赖于人,有时候依靠C语言既省时又省力。
就像对很多的数据进行运算时,对人来说可谓是一项大工程,一点不注意就会全盘皆输,要重新来过,让人头大;而对计算机来说,它只会执行你的指令,不管其他,没有枯燥,不懂乏味,更重要的是,效率尤其高。
不止计算,C语言还有很多用处。
刚开始的时候,我错误的认为C语言跟数学没有太大差别。
然而接触过后我才发现自己错的很离谱。
虽然C语言与数学有着难舍难分的关系,但C语言就是C 语言,它有着自己的语言,自己的思想跟自己的规则。
我们可以借助数学更好的掌握C语言,但不能因此混淆二者。
就像数学语言在程序中是不一定能够识别的(“=”在数学中是等于,在C语言中是赋值,C语言中的等于是“==”),虽然数学对C语言帮助很大,但C语言却不会因此就放你程序通过,不识别就是不识别,除非你用我自己的东西。
实验四子程序设计实验目的:通过编写子程序来实现函数的封装和代码的重用。
实验原理:子程序是一段具有特定功能的代码,可以在程序中多次调用。
在实际的软件开发过程中,为了提高代码的可读性、可维护性和代码的重用,我们经常使用子程序。
子程序的定义一般包括以下几个要素:1.子程序名称:子程序的名称用于被调用和调用。
子程序名称一般要具有描述性,能够清晰地表达其功能和作用。
2.输入参数:子程序可以接收输入参数,用于在子程序内部进行计算和处理。
输入参数可以是实际的数值,也可以是变量、数组等。
3.输出参数:子程序可以具有输出参数,用于将计算结果或者处理结果返回到主程序中。
输出参数可以是实际的数值,也能是变量、数组等。
4.子程序体:子程序体是子程序内部的代码块,用于实现具体的功能。
子程序体可以包含多条语句和控制结构,以完成复杂的操作和计算。
实验步骤:本次实验我们将编写一个求取三角形面积的子程序,实现代码的封装和重用。
1.编写主程序:首先,我们先编写一个主程序,用来调用子程序并输出计算结果。
```pythondef main(:a = float(input("请输入三角形的底边长: "))h = float(input("请输入三角形的高: "))area = triangle_area(a, h)print("三角形的面积为: ", area)def triangle_area(base, height):area = (base * height) / 2return areaif __name__ == "__main__":main```2. 编写子程序: 根据主程序中调用的子程序名称,我们可以编写一个名为`triangle_area`的子程序来计算三角形的面积。
```pythondef triangle_area(base, height):area = (base * height) / 2return area```3.运行程序:运行主程序,输入三角形的底边长和高,程序将输出计算结果。
.合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:****************学号:**********姓名:*****目录实验一··3实验二··7实验三··12实验四··22实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序实验内容一:e ds:0200 E7 1A 3F 00e ds:0204 C4 E5 6B 00实验内容二:(1)直接寻址方式MOV AX,[0200]MOV BX,[0202]ADD AX,[0204]ADC BX,[0206]MOV [0208],AXMOV [020A],BX(2)寄存器间接寻址方式MOV SI,0200HMOV DI,0204HMOV BX,0208HMOV AX,[SI]MOV DX,[SI+2]ADD AX,[DI]ADC DX,[DI+2]MOV [BX],AXMOV [BX+2],DX四.实验结果(包括必要的截图)实验内容一:输入数据:显示数据:实验内容二:(1)直接寻址方式程序段编辑:反汇编:运行:结果在DS:0208 单元中为00AB00ABH(2)寄存器间接寻址方式程序段编辑:反汇编:运行:结果高字存放在dx中,低字存放在ax中(结果为00AB00ABh)五.实验体会通过本实验,实践debug程序中的命令,并在debug下调试运行汇编语言源程序。
实验报告子程序设计实验实验报告:子程序设计实验一、实验目的本次实验的主要目的是深入理解和掌握子程序设计的概念、原理和方法,通过实际编程实现,提高我们的编程能力和问题解决能力。
二、实验环境本次实验使用的编程语言为 Python,开发工具为 PyCharm。
操作系统为 Windows 10。
三、实验内容(一)简单函数的定义与调用首先,我们定义了一个简单的函数来计算两个数的和。
```pythondef add_numbers(a, b):return a + b```然后,通过调用这个函数来计算并输出结果。
```pythonresult = add_numbers(5, 3)print("两数之和为:", result)```(二)带参数的函数接下来,定义了一个函数可以根据给定的半径计算圆的面积。
```pythonimport mathdef calculate_area(radius):return mathpi radius 2```调用该函数计算半径为 4 的圆的面积并输出。
```pythonarea = calculate_area(4)print("半径为 4 的圆的面积为:", area)```(三)函数的返回值定义了一个函数,判断一个数是否为偶数。
```pythondef is_even(number):if number % 2 == 0:return Trueelse:return False```调用该函数对多个数进行判断并输出结果。
(四)函数的嵌套调用定义了两个函数,一个函数计算两个数的平均值,另一个函数判断一个数是否大于平均值。
```pythondef calculate_average(a, b):return (a + b) / 2def is_greater_than_average(number, a, b):average = calculate_average(a, b)if number > average:return Trueelse:return False```通过调用这两个函数进行相应的计算和判断。
汇编子程序设计实验心得(精选5篇)汇编子程序设计实验心得【篇1】经过了一周左右密集的学习,仔细地回顾和评估了自己学习的过程,我切实地发现28定律在编程学习中同样发挥着作用。
在很长一段时间以前的学习中,我总是试图把一本书从头读到尾,或者是找一个视频课,想要从头到尾跟着做,但结果不是做不完放弃,就是看完之后感觉到还是什么都不会。
这一周我发现了编程学习中那百分之二十产生效益的地方在哪,因此将改善学习方法,提升效率。
简要地说,编程学习的那百分之二十飞速提升效率的地方就在代码上。
这听起来很荒谬,编程不就是写代码吗?但在实际的学习中,我确实时常犯下这个错误,就是绝大多数的精力并没有放在代码上。
我思考了一下改善学习的流程:在资料充分的情况下,理当先拿到源代码,然后查看源代码的输入和输出。
搞清楚这一段源代码的效果是什么.然后接下来对源代码写注释,逐行搞清楚源代码中每一句的意思,并且借此补充知识,不需要记忆,就是通过注释写明就好了。
搞清楚原理,然后写作出来。
尝试清楚明确地讲明白这段代码背后的概念是什么,原理是什么。
做完这三步之后马上循环写下一个项目,以项目到项目的方式来进展,试图把前面写过的项目追加到后面的项目中去,去连接学过的内容,并且就此复习。
同样不需要记忆,只要查看原来写过的东西就好了了。
接下来的学习中将彻底实践此方法论,并且在下一个阶段评估学习的效率。
汇编子程序设计实验心得【篇2】经过五天的Java实训,感触很深,收获也很大,对自己的缺点也有了很多的认识,回首本学期JAVA学习,重点还是在学习概念等一些常识性的东西,关于类型、变量、接口、输入输出流、分析异常、抛出异常,后期主要是小程序运用,Gui界面设计和事件。
在我学习的语言中,我自己认为Java是一门比较强大的面向对象的编程语言,不仅仅是因为它的跨平台型还有它的较强的实用性,强悍的嵌入性。
本次实训主要是针对我们对项目流程不熟悉和对整体项目的把握不清楚,学习数据库的设计和表的建设以及表与表之间的联系,还有一些代码的编写,这些都是我们所不熟悉的也是我们最薄弱的部分。
南通大学计算机类课程实验报告MOV [Z],AX ;将最后的结果送给ZMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。
代码还不能灵活运用,编写代码有所困难。
解决办法:多试调试。
八、实验心得和建议对于DEBUG的追踪还不熟悉,不过在指导老师的认真教导下,我们渐渐了解了汇编语言。
也能读懂一些简单的汇编语言。
我觉得在以后的学习中,我们必须要加强汇编语言的学习力度。
在学习过程中,不仅要大量阅读源程序,分析其功能,而且要借鉴他人的经验,练习编写完成特定功能的源程序。
南通大学计算机类课程实验报告MOV AH,2INT 21HMOV AH,4CH ;返回DOSINT 21HCODE ENDSEND START(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。
代码还不能灵活运用,编写代码有所困难。
解决办法:多试调试。
八、实验心得和建议第二次做汇编实验了,在心理上已没有了第一次做实验的那种茫然不知。
在实验中遇到的错误很多,并且无论怎样修改都还是不能使程序达到完美的状态的时候,情绪会比较不稳定,这时候才知道,编写程序除了有思路,有想法,有语言知识,还要有很强大的心理,要有耐心,才能去面对这一连串的错误。
在学习过程中,不仅要大量阅读源程序,分析其功能,而且要借鉴他人的经验,练习编写完成特定功能的源程序。
南通大学计算机类课程实验报告PUSH DXMOV DL,0AHMOV AH,2INT 21HPOP DXPOP AXRETCRLF ENDPCODE ENDSEND START(如不够,请另附纸)(如不够,请另附纸)六、实验结果七、实验存在问题和解决办法问题:在实验过程中,对指令不熟悉,以至于不熟悉命令的应用及debug的调用命令。
实验5 子程序实验一.实验目的1.掌握主程序与子程序之间的调用关系及调用方法;2.掌握子程序调用过程中近程调用与远程调用的区别;3.掌握通过堆栈转送参数的方法。
4. 掌握多模块程序设计方法二.实验内容1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。
要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。
DATAS SEGMENTBUF DB00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B, 11100010B,01010010BCAN DB $-BUF ;定义常量CANDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASMAIN PROC FAR ;主程序块START:MOV AX,DATASMOV DS,AXMOV CL,10LEA SI,BUFLOOP1: ;调用子程序语句call HEXACcall DISPDEC CANJNZ LOOP1EXIT:MOV AH,4CHINT 21HMAIN ENDPHEXAC PROC NEAR ;二进制转换成十六进制子程序MOV BL,[SI]INC SIRETHEXAC ENDPDISP PROC NEAR ;显示子程序MOV CL,4MOV CH,2MOVE: ;移位语句ROL BL,CLMOV DL,BLAND DL,0FHADD DL,30HCMP DL,'9'JBE PRINTADD DL,07HPRINT:MOV AH,02H ;显示语句INT 21HDEC CHJNZ MOVEMOV DL,' 'MOV AH,02HINT 21HRETDISP ENDPCODES ENDSEND START2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。
DATA SEGMENTSTR1 DB 0ah,0dh,'PLEASE INPUT YOUR STRING:$'STR2 DB 0ah,0dh,'THE NUMBER OF b is:$'TABLE DB 50, ? ,50 DUP(?),'$'DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART:MOV AX,DATAMOV DS,AXLEA DX,STR1MOV AH,9INT 21HLEA DX,TABLEMOV AH,0AHINT 21HLEA SI , TABLEMOV CL, [SI+1]MOV CH, 0INC SIINC SIMOV AL,'b'MOV AH,0PUSH SIPUSH CXPUSH AXCALL FAR PTR CHECKPOP AXMOV CL,ALLEA DX,STR2MOV AH,9INT 21HMOV DL,CLAND DL, 0FHCMP DL,9JBE CANADD DL,7CAN:ADD DL,30HMOV AH,2INT 21HEXIT:MOV AH,4CHINT 21HCODE ENDSSCODE SEGMENTASSUME CS:SCODE CHECK PROC FARPUSH BPMOV BP,SPMOV SI,[BP+10]MOV CX, [BP+8]MOV AX, [BP+6]XOR AH, AH AGAIN:CMP AL,[SI]JNE CAN1INC AHCAN1:INC SILOOP AGAINMOV AL, AHMOV [BP+10],AXPOP BPRET 4CHECK ENDPSCODE ENDSEND START3. 请编写一个程序来实现简单的程序菜单显示。
(采用多模块程序设计方法)显示一个菜单要求用户从下表中选择:(1)HEXAC GAME (对应-->程序1)(2)CHAR STATISTICS PROGRAM(对应-->程序2)(3)PRESS “ESC”TO QUIT用户作出选择1~3时,显示输出要执行操作的名字,如“Your selection is 1,the program will execute HEXAC NUMBER GAME!”然后转向相应的程序去执行,执行结束前进行退出的判断,显示一个提示信息“will you continue program really?(Y:N)”要求用户从键盘键入字符,若是“Y”键,则继续程序的执行,若是“N”键,则返回到菜单。
若用户选择3,要求程序显示提示信息“Please press ESC key to exit!”,并能按要求正确退出。
DATAS SEGMENTOPT DW YIDW ERmenu DB 0DH,0AH,'THE MENU:' ;显示菜单DB 0DH,0AH,'(1)HEXAC GAME' ;对应-->程序1DB 0DH,0AH,'(2)CHAR STATISTICS PROGRAM';对应-->程序2DB 0DH,0AH,'(3)PRESS "ESC" TO QUIT$'BUF DB 00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B, 11100010B,01010010BCAN DB $-BUF ;定义常量CANstr1 DB 0DH,0AH,'Your selection is 1,the program will execute HEXAC GAME!$'str2 DB 0dh,0ah,'Your selection is 2,the program will execute CHAR STATISTICS PROGRAM!$'str3 DB 0DH,0AH,'will you continue program really?(Y:N)$'str4 DB 0DH,0AH,'Please press ESC key to exit!$'TABLE DB 50, ? ,50 DUP(?),'$'char1 db 0ah,0dh,'PLEASE INPUT YOUR STRING:$'char2 db 0ah,0dh,'THE NUMBER OF b is:$'DATAS ENDSCODES SEGMENTMAIN PROC FARASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXXOR DI,DIsub bx,bxxor si,siLEA DX,menu ;显示主菜单MOV AH,9INT 21Hmov dl,0dh ;显示回车mov ah,2int 21hMOV DL,0AH ;显示换行MOV AH,2INT 21HMOV AH,1 ;输入选项INT 21HCMP AL,'1'JE YICMP AL,'2'JE ERCMP AL,'3'JE QUITYI: MOV DI,0lea dx,str1mov ah,9int 21hMOV CL,10LEA SI,BUFCALL HEXACLOOP1: ;调用子程序语句call HEXACcall DISPDEC CANJNZ LOOP1JMP CONTINUEER: MOV DI,02Hlea dx,str2mov ah,9int 21hLEA DX,char1MOV AH,9INT 21HLEA DX,TABLEMOV AH,0AH ;输入字符串INT 21HLEA SI , TABLEMOV CL, [SI+1]MOV CH, 0 ;CX中为字符串长度INC SIINC SI ;SI指向串首址TABLEMOV AL,'b'MOV AH,0 ;AX中为待查字符PUSH SIPUSH CXPUSH AX ; 参数送堆栈CALL CHECKPOP AX ;统计个数在AL中MOV CL,ALLEA DX,char2 ;显示结果MOV AH,9INT 21HMOV DL,CLAND DL, 0FHCMP DL,9JBE CAN3ADD DL,7CAN3:ADD DL,30HMOV AH,2INT 21H ;显示统计个数JMP CONTINUEQUIT:LEA DX,str4 ;退出的子程序MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,1BH ;按ESC退出JE EXITCONTINUE:LEA DX,str3 ;用户是否继续执行当前程序MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,'Y' ;按y继续,按n退出,不需区分大小写JE YESCMP AL,'y'JE YESCMP AL,'N'JE STARTCMP AL,'n'JE STARTYES: JMP opt[DI] ;继续运行当前子程序EXIT:MOV AH,4CH;退出INT 21HMAIN ENDPCODES ENDSHEXACCODES SEGMENTASSUME CS:HEXACCODESHEXAC PROC FAR ;二进制转换成十六进制子程序MOV BL,[SI]INC SIRETHEXAC ENDPHEXACCODES ENDSDISPCODES SEGMENTASSUME CS:DISPCODESDISP PROC FAR ;显示子程序MOV CL,4MOV CH,2MOVE: ;移位语句ROL BL,CLMOV DL,BLAND DL,0FHADD DL,30HCMP DL,'9'JBE PRINTADD DL,07HPRINT:MOV AH,02H ;显示语句INT 21HDEC CHJNZ MOVEMOV DL,' 'MOV AH,02HINT 21HRETDISP ENDPDISPCODES ENDSCHARCODE SEGMENTASSUME CS: CHARCODE ;子程序部分CHECK PROC FARPUSH BPMOV BP,SPMOV SI,[BP+10]MOV CX, [BP+8]MOV AX, [BP+6]XOR AH, AHAGAIN:CMP AL,[SI]JNE CAN1INC AHCAN1:INC SILOOP AGAINMOV AL, AHMOV [BP+10],AXPOP BPRET 4CHECK ENDPCHARCODE ENDSEND START三.实验要求1.第一个实验程序用子程序的近程调用实现。