1 / 11
文档名称:

实验四 子程序设计(强烈推荐).docx

格式:docx   页数:11
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

实验四 子程序设计(强烈推荐).docx

上传人:yzhfg888 2015/11/3 文件大小:0 KB

下载得到文件列表

实验四 子程序设计(强烈推荐).docx

文档介绍

文档介绍:实验四子程序设计
:
;
DOS 功能调用.
:
.
.
.
,输入学生数目不宜太多,
能考虑美观.
.
三、创新功能:
1、监测不合法输入,当输入字符不为数字时,报错'Input illegal!'。且允许用户从将当前错误数据重新输入,不必整体重新输入。
2、根据实际情况按百分制换算,当输入为3位数时自动结束读取,且最高分可限定为100分,例如输入999,排名时按照100分计算。
3、允许相同成绩的同学存在,不会影响排名。
4、允许输入的学生数任意,只要不超过堆栈空间均可。
5、输入输出界面友好,用户可以直观地看到名次表,对应学生学号和成绩。
6、利用堆栈空间,存储结构优越
7、 程序采用模块化设计,将实现相同功能的代码聚为宏块或子函数
:
?
答:对成绩降序排序,同时记录学号
,采用什么方法进行比较以得到学生的名次最为简单?
答:每次查找出当前最小成绩和其所对应学号入栈,这样形成的栈栈顶为最高分,弹栈 时可依次降序输出成绩和对应学号,即为名次表。
.
答:见下面流程图
.
按顺序输入12个学生成绩:100、67、88、89、93、50、6、21、77、77、56、95,按ctrl+z 输入结束
运行结果为:
五、代码分析
CHG MACRO X;将数字转换成ASCII码的宏块
PUSH AX
PUSH BX
MOV AX,X
MOV BL,10
DIV BL
ADD AL,'0'
ADD AH,'0'
MOV BH,AL
MOV BL,AH
MOV X,BX
POP BX
POP AX
ENDM
PRESENT MACRO X;显示单个字符的宏块
MOV AH,02H
MOV DL,X
INT 21H
ENDM
STR MACRO STRING;显示字符串宏块
MOV AH,09H
MOV DX,SEG STRING
MOV DS,DX
LEA DX,STRING
INT 21H
ENDM
INPUT MACRO;输入单个字符宏块
MOV AH,01H
INT 21H
ENDM
DATA SEGMENT
BUFF DB 100 DUP(0);存入输入数据
STRING1 DB 0DH,'Input illegal!','$'
STRING2 DB 'score of stu ','$'
STRING3 DB '100','$'
STRING4 DB 'NO.','$'
STRING5 DB 'The final rank is:','$'
STRING6 DB ' STU:','$'
STRING7 DB ' SCORE:','$'
NUM DW 1;存入学生人数
NUM2 DW 1
P DW 1
COUNT DB 0;计数成绩位数
COUNT1 DW 1
DATA ENDS
STACK SEGMENT 'STACK'
DB 300 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
START: MOV DX,SEG DATA
MOV DS,DX
LEA SI,BUFF
;输入模块
LOOP1: MOV BH,'0'
MOV BL,'0'
STR STRING2
MOV CX,NUM;移入CX进行转换显示
CHG CX;将当前学号变为ASCII
PRESENT CH
PRESENT CL
PRESENT ':'
L3: INPUT
CMP AL,26;输入是否结束
JZ EXI
CMP AL,0DH
JNZ L1
L2: INC NUM;输入结束
CMP COUNT,1
JZ Y1
MOV [SI],BH;存成绩!!!!!!!!!
MOV [SI+1],BL
JMP Y2
Y1: MOV BYTE PTR [SI],'0';当输入为一位数时,高位写0
MOV [SI+1],BH
Y2: INC SI
INC SI
MOV COUNT,0;计数变量清零