题目要求:
假设15名学生某门课成绩如下:
90,67,88,77,55,89,68,98,95,72,57,67,92,88,78
请编程实现,统计该成绩中小于60分的人数,60~90分的人数,大于90分的人数,分别存储于变量X1,X2,X3中。
题目分析:
循环15次,每次循环取出一个学生的成绩,然后根据此成绩,按照相应的条件去操作即可。
代码实现:
data segment
array db 90,67,88,77,55,89,68,98,95,72,57,67,92,88,78 ;数据准备
X1 db ? ;X1变量用于保存分数在60以下的人
X2 db ? ;X2变量用于保存分数60~90之间的人
X3 db ? ;X3变量用于保存分数在90以上的人
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,15
mov si,offset array
C1:
mov al,[si]
cmp al,60
jb INCX1
cmp al,90
ja INCX3
jmp INCX2
INCX1:
mov ah,X1
add ah,1
mov X1,ah
jmp ENDLOOP
INCX2:
mov ah,X2
add ah,1
mov X2,ah
jmp ENDLOOP
INCX3:
mov ah,X3
add ah,1
mov X3,ah
jmp ENDLOOP
ENDLOOP:
inc si
loop C1
mov ax,4c00h
int 21h
code ends
end start
代码不足:
此程序在分数类别的判断上首先判断是否低于60,如果是就跳转至INCX1操作,否则继续判断是否高于90,如果是跳转至INCX3,否则就默认当成分数是60~90之间的分数。那么此时就有一个问题,如果准备的数据本身就不符合要求呢?例如超过100,或低于0等,可见还未对其分数有效性进行判断。可见代码健壮性有待提高。不过从题意上来讲,这样写其实也是基本实现了功能了的。