- 10
- 0
- 约2.54千字
- 约 4页
- 2019-10-19 发布于江西
- 举报
PAGE 2
微机原理实验报告
实验任务:
一个学生的信息包括姓名、班级、学号(班内序号)、成绩。试编写程序实现以下功能:
(1)能录入学生成绩(十进制形式);提示:输入形如:tom 205 16 95回车,每名学生用一行;选择一个特殊符表示输入结束
(2)能按要求(如班内序号或成绩)进行排序显示;
(3)能统计平均成绩;
(4)能按分数段统计人数,不及格、60~70、70~80、80~90、90~100各分数段的人数。
实验实现过程与方法:
将输入的学生信息保存在一个一维数组中,在数据段中变现为:
STUDENT DB 256 DUP( );存储学生信息
在信息的存储过程中直接把输入的字符串存储至STUDENT中,姓名,班级,班内序号,成绩各属性之间以空格分开,来标识不同的属性。
每一个功能都用一个子程序来完成,在主程序中直接调用实现相应的功能。所以主程序为:
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,100H
CALL INPUT_PRO ;调用输入子程序
CR
MOV DX,OFFSET MESSAGE
MOV AH,09H
INT 21H
CALL DISPLAY_PRO ;显示学生输入信息
CR
CALL NUMBERSORT_PRO ;按学号升序排列
CALL SUM_PRO ;求出成绩总和
CALL GRADESORT_PRO ;按成绩降序排列
CALL AVERAGE_PRO ;调用平均成绩子程序,并以字符串显示出来
CALL THEGRADE_PRO ;各个成绩段的人数统计
MOV AH,4CH
INT 21H
CODE ENDS
END START
其中CR是一个宏,用来实现回车换行的功能,INPUT_PRO实现成绩等学生信息的输入并存储起来,DISPLAY_PRO用来在窗口显示学生的信息,NUMBERSORT_PRO
是按学生班内序号由小到大排序,GRADESORT_PRO是按学生成绩由大到小排序,
AVERAGE_PRO是求出学生的平均成绩并以字符串的形式显示出来,THEGRADE_PRO则是最后用来统计各个分数段的学生的人数。
下面来介绍各个子程序相应的算法及流程图:
输入子程序:
输入形如:tom 205 16 95回车,每名学生用一行;选择一个特殊符表示输入结束的INPUT_PRO,给每一个学生在STUDENT中划分14字节用来存储学生信息,STUDENT0-STUDENT2字节用来存学生姓名,STUDENT4-STUDENT6用来存学生的班级,STUDENT8-STUDENT9用来存班内序号,STUDENT11-STUDENT13用来存储学生成绩。剩余的存储空间存储的都是空格,以把各个属性分开来,用于后面把各要素显示出来。一个学生信息依顺序输入并存储,然后循环,用输入的字符判断是否继续循环。为了后面的判断,所有信息输出完之后在STUDENT末尾加一个回车0DH
显示子程序:
使用02H中断显示字符,把一个STUDENT中的信息显示出来,一个学生显示完之后判断后面学生的第一个字符是否是0DH,如果不是就继续显示,并且学生数加1,学生数的初值设为1,否则结束循环,退出该子程序。学生数加
学生数加1
学号排序子程序:
由于学号是按字符的形式存入STUDENT中的,所以可以直接进行比较比较STUDENT8和STUDENT9,若学生只有一位即下一位的第一位是0DH,结束程序,否则先比较STUDENT8表示十位数,若相等再继续比较STUDENT9,即采用冒泡排序方法重新对STUDENT排序,排序结束后调用显示子程序显示出排序结果
流程图:
成绩排序子程序:
先调用求和子程序SUM_PRO把成绩字符转换为十进制数保存在SCORES中,把总和保存在SUM中,从开始比较SCORES中的数,若前一个比后一个小则交换,采用冒泡排序,比较完之后调用显示子程序显示排序结果
流程图:
求均值子程序:
由求和子程序求出总和SUM,又已知学生的总数STUDENTNUMBER便可以直接求出平均值,再调用DEVDIV转换为字符显示出来。
流程图:
成绩统计子程序:
扫描学生信息的成绩,如果该学生信息的第一位为0DH,退出程序,否则到成绩的第三位,若不为空格则90-100即
原创力文档

文档评论(0)