精华内容
下载资源
问答
  • 实验七 分支与循环程序设计实验 自己写的实验报告,别完全抄袭哦
  • 超星高级语言程序设计实验作业 实验02 分支与循环程序设计 注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。

    超星高级语言程序设计实验作业

    实验02 分支与循环程序设计(三)

    注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。

    11.勒让德多项式

    题目描述:编一个程序,输入x、n,计算勒让德(Legendre)多项式的第 n 项。

    在这里插入图片描述
    输入:一个浮点数和一个整数,分别对应x和n(0<=n<=20)。
    输出:一个浮点数,即勒让德多项式第n项的值,注意小数点后保留到第2位。
    样例1:
    输入:3.4 2
    输出:16.84
    样例2:
    输入:3.4 10
    输出:30143685.82
    样例3:
    输入:3.4 21
    输出:23525972077722828.00

    #include<stdio.h>
    double lr(int n, double x) {
    	double p=0, p1, p2;
    	int k;
    	if (n == 0) p = 1;
    	else if (n == 1) p=x;
    	else{
    		p2 = x; p1 = 1;
    		for (k = 2; k <= n; k++){
    			p = ((2 * k - 1) / (double)k) * x * p2 - ((k - 1) / (double)k) * p1;
    			p1 = p2;
    			p2 = p;
    		}
    	}
    	return p;
    }
    int main() {
    	double x,sum=0;
    	int n;
    	scanf_s("%lf %d", &x, &n);
    	sum = lr(n, x);
    	printf("%.2lf", sum);
    	return 0;
    }
    

    这道题MOOC上也有,但是它们不一样😭
    有很多小伙伴 (包括我) 在这道题上卡了很长时间,用头发😅总结出来超星上大部分的浮点型都是用double类型用float精度不够最后几位会不一样😱
    这道题代码可以用来过OJ但是最后一个样例结果不太一样。😣还要修改

    12.数字金字塔

    题目描述:编程序,制打印如下所示的n行数字金字塔(n由用户从键盘输入)。

    在这里插入图片描述

    1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1
    输入:一个正整数 n (≤10).
    输出:如上所示的类似数字金字塔。输出由数字 0~9构成的n行数字三角矩阵:其中第一行有1个数,第二行有3个数,依次类推,每个数字占用2位英文字符宽度,宽度不足2位的的在数字左侧补空格;整个数字三角阵,除必要的空格、数字、回车换行符,无多余字符。
    样例1:
    输入:1
    输出:
    1
    样例2:
    输入:3
    输出:
    1
    1 2 1
    1 2 3 2 1

    #include<stdio.h>
    int outl(int n) {
    	int i;
    	for ( i = 1; i < n; i++){
    		printf("%2d", i);
    	}
    	if (n == 10) printf(" 0");
    	else printf("%2d",n);
    	for (i=i-1; i >0; i--){
    		printf("%2d", i);
    	}
    	return 0;
    }
    int kongg(int n,int i) {
    	int k;
    	for ( k=1;k  <= (n-i) ; k++){
    		printf("  ");
    	}
    	return 0;
    }
    int main() {
    	int n,i;
    	int out;
    	scanf_s("%d", &n);
    	for ( i = 1; i <=n; i++){
    		out = kongg(n, i);
    		out = outl(i);
    		if (i < n) printf("\n");
    	}
    	return 0;
    }
    

    题目要求是最中间的列对齐。

    13.计算 e^x

    题目描述:请计算上述序列前100项的和
    GJBook3-04-02.jpg

    输入:一个浮点数,对应x值。
    输出:一个浮点数,即e^x的近似值,小数点后保留到第2位。
    注:本题不允许使用math.h头文件和相关的pow和exp等函数。
    样例1:
    输入:0
    输出:1.00
    样例2:
    输入:4.3
    输出:73.70

    #include<stdio.h>
    float gx(float x, int n) {
    	int i; float sum=1;
    	for ( i = 1; i <= n; i++){
    		sum = sum * x / i;
    	}
    	return sum;
    }
    int main() {
    	float x,m=0,out=0;
    	scanf_s("%f", &x);
    	for (size_t i = 0; i <= 100; i++){
    		m = gx(x, i);
    		out = out + m;
    	}
    	printf("%.2f", out);
    	return 0;
    }
    

    唯一要注意的就是不能用math.h

    14.公式累乘

    题目描述:用如下的展开式计算当n为某给定值时,圆周率π的值。

    GJBook3-04-0102.jpg

    输入:一个正整数n (n<100000)
    输出:一个浮点数,保留小数点后10位。
    样例1:
    输入:1000
    输出:3.1408077460
    样例2:
    输入:10000
    输出:3.1415141187

    #include<stdio.h>
    double gx(double i) {
    	double jieg;
    	jieg = 4 * i * i / (2 * i - 1) / (2 * i + 1);
    	return jieg;
    }
    int main() {
    	int n,i;
    	double sum;
    	scanf_s("%d", &n);
    	sum = 2;
    	for ( i = 1; i <= n; i++){
    		sum = sum * gx(i);
    }
    	printf("%.10lf", sum);
    	return 0;
    }
    

    15.公式累加

    题目描述:用如下的展开式计算当n为某给定值时,sh(x)的值。
    Exp02-Enhance03.jpg
    编写程序,对上面的公式读入x,输出序列的和直到尾项 小于10^-5。
    输入:一个浮点数作为x的值
    输出:一个浮点数,保留小数点后6位。
    样例1:
    输入:1
    输出:1.175198
    样例2:
    输入:1.5
    输出:2.129277

    #include<stdio.h>
    #include<math.h>
    double fm( double x, double n) {
    	double sum=1; 
    	int i;
    	for (i=1;i<=2*n+1; i++){
    		sum = sum * x / i;
    	}
    	return sum;
    }
    int main() {
    	double out, m;
    	double x;
    	int i = 1;
    	scanf_s("%lf", &x);
    	out = 0; m = x;
    	for (i = 1;fabs(m)>=1e-5; i++){
    		out = out + m;
    		m = fm(x, i);
    }
    printf("%.6lf", out);
    return 0;
    }
    

    这道题啊,卡了一个星期测试的时候结果跟给的样例一样,但是提交后是有两个通过三个不通过,我想了一个星期都没事想出来,最后问了老师
    我 犯 了 个 低 级 的 错 误

    for (i = 1;fabs(m)>=1e-5; i++)
    

    这句中是判断最后一项是否小于10^-5,应该写成1e-5结果我写成10e-5了😭,还有最后一项的值m可能小于0,因此要写绝对值
    希望年轻人耗子尾汁,不要犯我这样的错误。😬

    展开全文
  • 汇编实验分支与循环程序设计

    千次阅读 2020-04-28 22:22:47
    1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。 2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令转移指令、循环指令等。 3、初步了解系统功能调用的使用方法,尝试...

    一、实验目的

    1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。
    2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。
    3、初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。

    二、实验环境与设备

    计算机一台,并且安装Windows操作系统和macro assembler 5.0以上版本的系统软件。

    三、预备知识

    1、掌握汇编语言程序的上机步骤
    2、掌握DEBUG的使用方法
    3、掌握汇编语言的指令:
    ( 1 )数据传送类指令。
    ( 2 )数据运算类指令。
    ( 3 )逻辑判断类指令。
    ( 4 )与转移指令。
    ( 5 )循环指令等。

    四、程序说明

    1.计算1+2+3+…+10,将结果显示在屏幕上。
    2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
    3.对于第2题,怎样修改程序可以同时实现将10个数字的累加功能。(选作)
    4.对于第2题,若要求输入的是两位数,又该怎么办?(选作)

    五、程序代码

    程序一

    CODE SEGMENT
    MAIN PROC FAR
    	ASSUME CS:CODE
    START:
    		PUSH DS
    		XOR AX,AX
    		PUSH AX
    		MOV BX,10	;1-10
    		MOV CX,10	;循环次数
    NEXT:	ADD AX,BX	;累加
    		DEC BX		;数字递减
    		LOOP NEXT
    PRINT:	
    		MOV BL,10
    		DIV BL		;除以10
    		ADD AL,30H	;十六进制表示的ASCII码值
    		MOV CH,AH	
    		MOV DL,AL	;输出高位数
    		MOV AH,2
    		INT 21H
    		ADD CH,30H
    		MOV DL,CH	;输出低位数
    		MOV AH,2
    		INT 21H
    		RET
    MAIN ENDP
    CODE ENDS
    	END START
    
    

    程序二

    DATA SEGMENT
    	BUF DB 10 DUP(?)
    	MAX DB ?
    	MIN DB ?
    	Str1 DB 0DH,0AH,'Please input:','$'
    	Str2 DB 0DH,0AH,'MAX:','$'
    	Str3 DB 0DH,0AH,'MIN:','$'
    DATA ENDS
    CODE SEGMENT
    MAIN PROC FAR
    	ASSUME CS:CODE,DS:DATA
    START:
    		PUSH DS
    		XOR AX,AX
    		PUSH AX
    		MOV AX,DATA
    		MOV DS,AX
    		MOV CX,10		;十次输入
    		MOV BX,0
    		MOV SI,0
    INPUT:	
    		LEA DX,Str1		;输出提示
    		MOV AH,09
    		INT 21H
    		MOV AH,01H		;输入
    		INT 21H
    		SUB AL,30H
    		MOV BUF[SI],AL
    		INC SI			;位移+1
    		LOOP INPUT		;循环输入
    		MOV CX,9		;比较9次
    		MOV SI,0		;位移初始为0
    		MOV AL,BUF[SI]	;AL存放最大值
    		MOV BL,AL		;BL存放最小值
    NEXT:	INC SI
    		MOV DL,BUF[SI]
    		CMP DL,AL		
    		JL LESS			;小于当前最大值跳转
    		MOV AL,DL		;改变最大值
    		JMP MORE
    LESS:	CMP BL,DL
    		JL MORE			;大于当前最小值跳转
    		MOV BL,DL		;改变最小值
    MORE:	LOOP NEXT		;循环比较
    		MOV MAX,AL		;存储到对应单元
    		MOV MIN,BL
    		LEA DX,Str2
    		MOV AH,09
    		INT 21H
    		MOV DL,MAX		;输出最大值
    		ADD DL,30H
    		MOV AH,02H
    		INT 21H
    
    		LEA DX,Str3
    		MOV AH,09
    		INT 21H
    		MOV DL,MIN 		;输出最小值
    		ADD DL,30H
    		MOV AH,02H
    		INT 21H
    		RET
    MAIN ENDP
    CODE ENDS
    	END START
    
    

    程序三

    DATA SEGMENT
    	BUF DB 10 DUP(?)
    	MAX DB ?
    	MIN DB ?
    	SUM DB 0
    	Str1 DB 0DH,0AH,'Please input:','$'
    	Str2 DB 0DH,0AH,'MAX:','$'
    	Str3 DB 0DH,0AH,'MIN:','$'
    	Str4 DB 0DH,0AH,'SUM:','$'
    DATA ENDS
    CODE SEGMENT
    MAIN PROC FAR
    	ASSUME CS:CODE,DS:DATA
    START:
    		PUSH DS
    		XOR AX,AX
    		PUSH AX
    		MOV AX,DATA
    		MOV DS,AX
    		MOV CX,10		;十次输入
    		MOV BL,0
    		MOV SI,0
    INPUT:	
    		LEA DX,Str1		;输出提示
    		MOV AH,09
    		INT 21H
    		MOV AH,01H		;输入
    		INT 21H
    		SUB AL,30H
    		MOV BUF[SI],AL
    		INC SI			;位移+1
    		LOOP INPUT
    		MOV CX,9
    		MOV SI,0
    		MOV AL,BUF[SI]	;AL存放最大值
    		MOV BL,AL		;BL存放最小值
    NEXT:	INC SI
    		MOV DL,BUF[SI]
    		CMP DL,AL
    		JL LESS			;小于当前最大值跳转
    		MOV AL,DL		;改变最大值
    		JMP MORE
    LESS:	CMP BL,DL		
    		JL MORE			;大于当前最小值跳转
    		MOV BL,DL		;改变最小值
    MORE:	LOOP NEXT
    		MOV MAX,AL
    		MOV MIN,BL
    
    		MOV SI,0
    		MOV CX,10
    		MOV BL,0
    AA:		
    		ADD BL,BUF[SI]	;计算累加和
    		INC SI			;位移+1
    		LOOP AA
    
    		LEA DX,Str2
    		MOV AH,09
    		INT 21H
    		MOV DL,MAX		;输出最大值
    		ADD DL,30H
    		MOV AH,02H
    		INT 21H
    
    		LEA DX,Str3
    		MOV AH,09
    		INT 21H
    		MOV DL,MIN 		;输出最小值
    		ADD DL,30H
    		MOV AH,02H
    		INT 21H
    
    		LEA DX,Str4
    		MOV AH,09
    		INT 21H
    		MOV AL,BL 	
    		MOV AH,0		;AH置0,使用CBW也可
    		MOV BL,10
    		DIV BL		
    		ADD AL,30H	
    		MOV CH,AH
    		MOV DL,AL		;输出和
    		MOV AH,2
    		INT 21H
    		ADD CH,30H
    		MOV DL,CH
    		MOV AH,2
    		INT 21H
    		RET
    MAIN ENDP
    CODE ENDS
    	END START
    
    
    

    程序四

    DATA SEGMENT
    	BUF DB 10 DUP(?)
    	MAX DB ?
    	MIN DB ?
    	Str1 DB 0DH,0AH,'Please input:','$'
    	Str2 DB 0DH,0AH,'MAX:','$'
    	Str3 DB 0DH,0AH,'MIN:','$'
    DATA ENDS
    CODE SEGMENT
    MAIN PROC FAR
    	ASSUME CS:CODE,DS:DATA
    START:
    		PUSH DS
    		XOR AX,AX
    		PUSH AX
    		MOV AX,DATA
    		MOV DS,AX
    		MOV CX,10
    		MOV BX,0
    		MOV SI,0
    INPUT:	
    		LEA DX,Str1
    		MOV AH,09
    		INT 21H
    		MOV AH,01H		;输入
    		INT 21H
    		SUB AL,30H		;ASCII转换十六进制
    		MOV AH,0
    		MOV BL,10
    		MUL BL			;×10
    		MOV DL,AL
    		MOV AH,01H
    		INT 21H
    		SUB AL,30H
    		MOV AH,0
    		ADD AL,DL		;相加
    		MOV BUF[SI],AL
    		INC SI
    		LOOP INPUT		;循环输入
    		MOV CX,9
    		MOV SI,0
    		MOV AL,BUF[SI]	;AL存放最大值
    		MOV BL,AL		;BL存放最小值
    NEXT:	
    		INC SI
    		MOV DL,BUF[SI]
    		CMP DL,AL
    		JL LOOP1		;小于当前最大值跳转
    		MOV AL,DL		;改变最大值
    LOOP1:	
    		CMP BL,DL		
    		JL LOOP2		;大于当前最小值跳转
    		MOV BL,DL		;改变最小值
    LOOP2:
    		LOOP NEXT
    		MOV MAX,AL
    		MOV MIN,BL
    PRINTMAX:	
    		LEA DX,Str2
    		MOV AH,09
    		INT 21H
    		MOV AX,0
    		MOV AL,MAX		;输出最大值
    		MOV BL,10
    		DIV BL
    		ADD AL,30H		;转换为ASCII码
    		MOV DL,AL
    		MOV CH,AH
    		MOV AH,02H
    		INT 21H
    		ADD CH,30H
    		MOV DL,CH
    		MOV AH,02H
    		INT 21H
    PRINTMIN:
    		LEA DX,Str3
    		MOV AH,09
    		INT 21H
    		MOV AX,0
    		MOV AL,MIN 		;输出最小值
    		MOV BL,10
    		DIV BL
    		ADD AL,30H
    		MOV DL,AL
    		MOV CH,AH
    		MOV AH,02H
    		INT 21H
    		ADD CH,30H
    		MOV DL,CH
    		MOV AH,02H
    		INT 21H
    		RET
    MAIN ENDP
    CODE ENDS
    	END START
    
    

    六 、实验结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 实验分支程序设计………………………………………………………11 实验循环程序设计………………………………………………………12 实验6 子程序设计…………………………………………………………15 实验7 ...
  • 设计一数据块间的搬移程序 设计思想: 程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。源数据块和目的数据块在存贮中可能有三种情况。 对于两个数据块分离的情况,数据的传送从数据...

    一,实验内容:
    设计一数据块间的搬移程序
    设计思想:
    程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。源数据块和目的数据块在存贮中可能有三种情况。
    对于两个数据块分离的情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可,但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
    可以得出以下结论:当源数据块首址>目的块首址时,从数据块首址开始传送数据。当源数据块首址<目的块首址时,从数据块末地址开始传送数据。
    二,实验设计原理;
    在DOS中数据搬移为防止在地址重叠的情况下数据搬移出错,设定了一些搬移规则,即:
    当源数据块首址>目的块首址时,从数据块首址开始传送数据。当源数据块首址<目的块首址时,从数据块末地址开始传送数据
    在这里插入图片描述
    代码::

    DATAS SEGMENT
    	COUNT EQU 6
    	ORG 14H
    		SOURCE DB '0','1','2','3','4','5'
    	ORG 16H
    		RESULT DB 10 DUP(?)
    	
    DATAS ENDS
    
    STACKS SEGMENT  STACK 'STACK'
        DW 20H DUP(0)
        TOP LABEL WORD
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
    	MOV AX,STACKS
    	MOV SS, AX
    	MOV SP, OFFSET TOP
    	
        MOV AX,DATAS
        MOV DS,AX
        MOV ES, AX    ;初始化
        
        MOV SI, OFFSET SOURCE	;SI指向原来数据地址
        MOV DI, OFFSET RESULT	;DI指向搬移之后的数据地址
        MOV CX, COUNT			;输入的个数为6
        CLD						;递增传数据
        
        CMP SI, DI
        JAE NEXT  				;无符号大于或等于则跳转
        
        MOV AX, CX				
        DEC AX
        ADD SI, AX				;SI+CX-1
        ADD DI, AX				;DI+CX-1
        STD  	;递减传数据
    NEXT:
    	REP MOVSB
    
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
        
    ; STD, 功能是方向标志DF置1,
    ;位置指针SI或DI往反向(地址减小大方向)移动,字串处理是由后往前
    ;CLD,功能是方向标志DF清零,
    ;位置指针SI或DI往正向(地址增大方向)移动,字串知处理是由前往后;
    

    设计二:循环程序设计实验
    实验内容:
    (1)编制程序使S=1+23+34+4*5+……N(N+1),直到N(N+1)项大于200为止。
    (2)求某个数据区内负数的个数
    设数据区的第一单元存放区内数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
    为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。
    实验设计原理;
    (1)简单的递增+乘法,以及对JUMP指令的运用
    (2)在二进制中,负数即是带符号数中最高位为1,通过与1000和待测数高4位进行TEST指令,可判断出最高位是否为1.
    在这里插入图片描述
    在这里插入图片描述
    (1)

    DATAS SEGMENT
        ;此处输入数据段代码  
    DATAS ENDS
    
    STACKS SEGMENT
        ;此处输入堆栈段代码
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
        MOV AX,DATAS
        MOV DS,AX
        
        MOV SI, 10H  ;给定SI初始指向10H
        MOV CX, 1	 ;流程图中用到了DX,这里改为CX
        MOV BL, 2
        MOV AH, 0
    	MOV BH, 0
    LOOP1:
    	MOV AL, BL
    	INC BX
    	MUL BL		;AL*BL
    	ADD CX, AX
    	
    	CMP AX, 200
    	JBE LOOP1 ;无符号不大于等于则跳转
    	
    	MOV [SI], CX	;将结果保存到SI所指向的地方
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
    ;建议不要放到DX,而是放到CX,应为相乘的时候会借用DX
    

    (2)

    DATAS SEGMENT
        ORG 10H
        	NUM DB 6
        	SOURCE DB 12H, 88H, 82H, 90H, 22H, 33H
        ORG 20H
        	RESULT DB ?
    DATAS ENDS
    
    STACKS SEGMENT
        ;此处输入堆栈段代码
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
        MOV AX,DATAS
        MOV DS,AX
        
        MOV DI, OFFSET NUM
        MOV CL, NUM
        INC DI
        MOV CH, 0
        MOV BL, 0		;记录负数个数
    LOOP1:
    	MOV AL, [DI]
    	TEST AL, 80H	;test逻辑与运算结果为零,就把ZF(零标志)置1
    	JZ NEXT			;如果ZF=0,说明不是负数,跳转
    	INC BL			;如果不为0,说明最高位为1,是负数
    NEXT:
    	INC DI			;指向下一个数
    	DEC CX			;记录还剩下多少个数,为0则结束
    	JNZ LOOP1
    	MOV [RESULT], BL	;将BL的值赋给RESULT所在地址
    	  
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
    
    展开全文
  • 1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。 2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令转移指令、循环指令等。 3、初步了解系统功能调用的使用方法,...

    实验目的

    1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。

    2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。

    3、初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。

    实验内容

    1. 计算1+2+3+…+10,将结果显示在屏幕上。
    2. 利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF  DB  10  DUP(?)。编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
    3. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能。(选作)
    4. 对于第2题,若要求输入的是两位数,又该怎么办?(选作)

    设计思想

    1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余   AL是商,AH是余数,后加上30h。

    2、使用SI寄存器,用于在存储器中寻址。利用循环输入10个数字,将10个数比较,大的放在AL,小的放在BL。利用01H号功能,输出。

    3、结合第1题和第2题。

    4、修改输入。

    程序代码

    1

    code segment
    	main proc far
    	assume cs:code
    start:
    	push ds
    	sub ax,ax
    	push ax
    	mov bx,0ah
    	mov cx, 0ah
    sum1:
    	add ax,bx
    	dec bx
    	loop sum1
    printit:
    	mov bl,10
    	div bl
    	add al,30h
    	mov ch,ah
    	mov dl,al
    	mov ah,2
    	int 21h
    	add ch,30h
    	mov dl,ch
    	mov ah,2
    	int 21h
    	ret
    	main endp
    	code ends
    end
    

    2

    data segment         ;数据段定义开始
        buf db 10 dup(?)      ;数据定义及其存储空间
        max db ?
        min db ?
        Str1 db 0DH,0AH,'Please input: ','$'  	 ;定义Str1的内容
        Str2 db 0DH,0AH,'MAX:','$'      	 ;定义Str2的内容
        Str3 db 0DH,0AH,'MIN:','$'        	 ;定义Str3的内容
    data ends    ;数据段定义结束  
    
    Stack segment stack   ;堆栈段定义开始
        db 10 dup(?)
    stack ends      ;堆栈段定义结束
    
    code segment    ;代码段定义开始
    main proc far     
        assume cs:code,ds:data,ss:stack
    start:    					
        push ds       
        sub ax,ax
        push ax
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov cx,10
        mov si,0      ;寄存器,用于寻址
        mov bx,0
    lop1:				
        lea dx,Str1  
        mov ah,09
        int 21h
        mov ah,01h    ; 输入
        int 21h
        mov buf[si],al
        inc si
        loop lop1    ;返回循环1
        mov cx,9
        mov si,0
        mov al,buf[si]
        mov bl,al
    lop2:
        inc si   
        mov dl,buf[si]
        cmp dl,al
        jl compare1
        mov al,dl
    compare1:
        cmp bl,dl 		 ;比较,小的数放在bl
        jl compare2
        mov bl,dl
    compare2:
        loop lop2   
        mov max,al   
        mov min,bl 
        lea dx,Str2
        mov ah,09
        int 21h
        mov dl,max
        mov ah,02h                  
        int 21h       	;输出最大数
        lea dx,Str3
        mov ah,09
        int 21h
        mov dl,min
        mov ah,02h                  
        int 21h       	;输出最小数
        ret 
        main endp
        code ends    
    end start
    

    3

    data segment         ;数据段定义开始
        buf db 10 dup(?)      ;数据定义及其存储空间
        max db ?
        min db ?
        Str1 db 0DH,0AH,'Please input: ','$'  	 ;定义Str1的内容
        Str2 db 0DH,0AH,'MAX:','$'      	 ;定义Str2的内容
        Str3 db 0DH,0AH,'MIN:','$'        	 ;定义Str3的内容
        Str4 db 0DH,0AH,'SUM:','$'        	 ;定义Str4的内容
    data ends    ;数据段定义结束  
    
    Stack segment stack   ;堆栈段定义开始
        db 10 dup(?)
    stack ends      ;堆栈段定义结束
    
    code segment    ;代码段定义开始
    main proc far     
        assume cs:code,ds:data,ss:stack
    start:    					
        push ds       
        sub ax,ax
        push ax
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov cx,10
        mov si,0      ;寄存器,用于寻址
        mov bx,0
    lop1:				
        lea dx,Str1  
        mov ah,09
        int 21h
        mov ah,01h    ; 输入
        int 21h
        mov buf[si],al
        inc si
        loop lop1    ;返回循环1
        mov cx,9
        mov si,0
        mov al,buf[si]
        mov bl,al
    lop2:
        inc si   
        mov dl,buf[si]
        cmp dl,al
        jl compare1
        mov al,dl
    compare1:
        cmp bl,dl 		 ;比较,小的数放在bl
        jl compare2
        mov bl,dl
    compare2:
        loop lop2   
        mov max,al   
        mov min,bl 
        lea dx,Str2
        mov ah,09
        int 21h
        mov dl,max
        mov ah,02h                  
        int 21h       	;输出最大数
        lea dx,Str3
        mov ah,09
        int 21h
        mov dl,min
        mov ah,02h                  
        int 21h       	;输出最小数
        lea dx,Str4
        mov ah,09
        int 21h
        sub ax,ax
        mov bx,0
        mov cx,9
        mov si,0
    sum1:
        inc si   
        mov bl,buf[si]
        sub bl,30h
        add ax,bl
        loop sum1
    printit:
        mov bl,10
        div bl
        add al,30h
        mov ch,ah
        mov dl,al
        mov ah,2
        int 21h
        add ch,30h
        mov dl,ch
        mov ah,2
        int 21h
        ret
        main endp
        code ends    
    end start
    

    4

    data segment         ;数据段定义开始
        buf db 10 dup(?)      ;数据定义及其存储空间
        max db ?
        min db ?
        Str1 db 0DH,0AH,'Please input: ','$'  	 ;定义Str1的内容
        Str2 db 0DH,0AH,'MAX:','$'      	 ;定义Str2的内容
        Str3 db 0DH,0AH,'MIN:','$'        	 ;定义Str3的内容
    data ends    ;数据段定义结束  
    
    Stack segment stack   ;堆栈段定义开始
        db 10 dup(?)
    stack ends      ;堆栈段定义结束
    
    code segment    ;代码段定义开始
    main proc far     
        assume cs:code,ds:data,ss:stack
    start:    					
        push ds       
        sub ax,ax
        push ax
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov cx,10
        mov si,0      ;寄存器,用于寻址
        mov bx,0
    lop1:				
        lea dx,Str1  
        mov ah,09h
        int 21h
        mov ah,01h ; 输入1
        int 21h
        sub al,30h
        mov ah,0
        mov bl,10
        mul bl
        mov dl,al
        mov ah,01h ; 输入2
        int 21h
        sub al,30h
        mov ah,0
        add al,dl
        mov buf[si],al
        inc si
        loop lop1    ;返回循环1
        mov cx,9
        mov si,0
        mov al,buf[si]
        mov bl,al
    lop2:
        inc si   
        mov dl,buf[si]
        cmp dl,al
        jl compare1
        mov al,dl
    compare1:
        cmp bl,dl 		 ;比较,小的数放在bl
        jl compare2
        mov bl,dl
    compare2:
        loop lop2   
        mov max,al   
        mov min,bl 
    printmax:
        lea dx,Str2
        mov ah,09
        int 21h
        mov ax,0
        mov al,max
        mov bl,10
        div bl
        add al,30h
        mov ch,ah
        mov dl,al
        mov ah,2
        int 21h
        add ch,30h
        mov dl,ch
        mov ah,2
        int 21h
    printmin:
        lea dx,Str3
        mov ah,09
        int 21h
        mov ax,0
        mov al,min
        mov bl,10
        div bl
        add al,30h
        mov ch,ah
        mov dl,al
        mov ah,2
        int 21h
        add ch,30h
        mov dl,ch
        mov ah,2
        int 21h
        ret
        main endp
        code ends    
    end start
    

    结果分析

    1

    2

    3

    4

    参考文章

    https://blog.csdn.net/csj41352/article/details/79981434

    https://zhidao.baidu.com/question/562479802788685844.html

    https://wenku.baidu.com/view/af740cdc19e8b8f67d1cb92f.html

    展开全文
  • #include<stdio.h> int main() { int data,i=0; bool f = 1; scanf_s("%d", &data); for ( ;i < data; i++) { if (i % 11 == 0) { if (f) f = 0; else printf(" ");...}
  • #include<stdio.h> int main() { float a, b, c, t; scanf_s("%f%f%f", &a, &b, &c); if (a > b) { t = a; a = b; b = t; } if (a > c) { t = a; a = c; c = t;...}
  • 吉林大学超星MOOC高级语言程序设计 实验00 熟悉开发环境(2020级) 以下代码均由自己本人编写,欢迎交流和指出错误 1 题目编号:Exp02-Basic01,GJBook3-03-03 题目名称:递增排序 题目描述:任意三个实数a、b、c...
  • 1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。 2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令转移指令、循环指令等。 3、初步了解系统功能调用的使用方法,...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

循环程序与分支程序设计实验