微机编写程序:从键盘输入十个学生的成绩(设成绩<100),统计60分以下(fail),60~69分
时间: 2023-11-20 18:03:14 浏览: 30
要编写程序实现从键盘输入十个学生的成绩,并统计60分以下的人数和60~69分的人数,可以使用Python编程语言。
首先,可以使用input函数来获取从键盘输入的十个学生的成绩,并将其存储在一个列表中。然后,遍历列表,统计60分以下和60~69分的人数,并打印出结果。
具体的代码如下所示:
```python
# 获取十个学生的成绩
scores = []
for i in range(10):
score = int(input("请输入第{}个学生的成绩:".format(i+1)))
scores.append(score)
# 统计60分以下和60~69分的人数
fail_count = 0
pass_count = 0
for score in scores:
if score < 60:
fail_count += 1
elif 60 <= score <= 69:
pass_count += 1
# 打印结果
print("60分以下的人数:", fail_count)
print("60~69分的人数:", pass_count)
```
以上代码实现了从键盘输入十个学生的成绩,并统计了60分以下和60~69分的人数。在运行程序之后,用户可以输入每个学生的成绩,然后程序会输出统计结果。
这样就可以通过编写程序来实现从键盘输入十个学生成绩,并统计60分以下和60~69分的人数。
相关问题
1. 自内存SCORE单元开始连续存放着10个学生的“微机原理”成绩请编程做如下统计: 1.找出最高分和最低分送入MAX和MIN单元。找出90-100,60~69的人数分别送入S9、S6单元。求平均成绩送入AVER单元. 2.用-G命令对程序运行,并分析程序运行前后各寄存器内容的变化。 3. 用-D命令查看运行结果。
好的,这是一道比较典型的汇编语言程序综合设计题目,主要涉及到对数据的读取、运算和存储。下面是一个可能的程序实现,仅供参考:
```assembly
; 学生成绩统计程序
; 学生成绩存放在 SCORE 单元开始的 10 个单元中
; 统计结果存放在 MAX、MIN、S9、S6、AVER 单元中
ORG 0x0000 ; 程序起始地址
JMP START ; 跳转到 START 标号处
; 可以改为 CALL START
; 数据段定义
ORG 0x0100 ; 数据段起始地址
SCORE: DB 70, 85, 96, 62, 78, 80, 92, 88, 75, 82
MAX: DB 0 ; 最高分
MIN: DB 100 ; 最低分
S9: DB 0 ; 90-100 分的人数
S6: DB 0 ; 60-69 分的人数
AVER: DB 0 ; 平均分
; 程序段定义
START:
MOV SI, SCORE ; SI 指向 SCORE 单元
MOV AL, [SI] ; 取出第一个成绩
MOV [MAX], AL ; 初始化最高分
MOV [MIN], AL ; 初始化最低分
MOV CX, 9 ; 循环 9 次,因为第一个成绩已经取出
MOV BL, 0 ; 计数器清零
MOV BH, 0 ; 计数器清零
LOOP:
INC SI ; SI 指向下一个成绩
MOV AL, [SI] ; 取出下一个成绩
CMP AL, [MAX] ; 比较是否是最高分
JBE NOT_MAX ; 如果不是,跳过
MOV [MAX], AL ; 如果是,更新最高分
NOT_MAX:
CMP AL, [MIN] ; 比较是否是最低分
JAE NOT_MIN ; 如果不是,跳过
MOV [MIN], AL ; 如果是,更新最低分
NOT_MIN:
CMP AL, 100 ; 判断是否大于等于 90 分
JA NOT_90 ; 如果不是,跳过
INC [S9] ; 如果是,S9 计数器加 1
JMP END_LOOP ; 跳过后面的比较
NOT_90:
CMP AL, 89 ; 判断是否大于等于 80 分
JB NOT_80 ; 如果不是,跳过
INC [S9] ; 如果是,S9 计数器加 1
JMP END_LOOP ; 跳过后面的比较
NOT_80:
CMP AL, 69 ; 判断是否大于等于 60 分
JA NOT_60 ; 如果不是,跳过
INC [S6] ; 如果是,S6 计数器加 1
JMP END_LOOP ; 跳过后面的比较
NOT_60:
; 如果不是以上三种情况,不做任何操作
END_LOOP:
ADD [AVER], AL ; 累加成绩
INC BL ; 计数器加 1
CMP BL, 10 ; 判断是否循环完毕
JE CALC_AVG ; 如果是,跳转到计算平均分
JMP LOOP ; 如果不是,继续循环
CALC_AVG:
MOV AL, [AVER] ; 取出累加的成绩
MOV DL, BL ; 取出计数器
DIV DL ; 除以计数器,得到平均分
MOV [AVER], AL ; 存储平均分
RET ; 返回调用程序
END ; 程序结束
```
程序说明:
1. 程序从 `START` 标号处开始执行,首先将 `SI` 寄存器指向 `SCORE` 单元,然后取出第一个成绩,并初始化最高分和最低分。
2. 然后通过循环,依次取出剩余的成绩,比较是否是最高分或最低分,并统计90-100分和60-69分的人数。同时,累加成绩并计数,用于后面计算平均分。
3. 最后,计算平均分并存储,然后返回调用程序。
4. 可以通过 `-G` 命令运行程序,然后用 `-D` 命令查看结果。在运行前后,可以使用 `-A` 命令查看各寄存器的内容变化。
你是一名成绩优秀的大二电子工程学生,请根据微型计算机原理与接口技术这本书,编写三个微机原理的混合程序,并对其语句进行解释
好的,以下是三个微机原理的混合程序和对其语句的解释:
1. 计算两个数的和并输出结果
```
.MODEL SMALL
.STACK 100H
.DATA
FIRST DB 10
SECOND DB 20
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AL, FIRST
ADD AL, SECOND
MOV DL, AL
MOV AH, 2H
INT 21H
MOV AH, 4CH
INT 21H
END START
```
解释:该程序定义了两个字节型变量 FIRST 和 SECOND,分别赋值为 10 和 20。在代码段中,将数据段地址存入 AX 寄存器中,再将其赋值给 DS 寄存器。接着,将 FIRST 变量的值存入 AL 寄存器中,再与 SECOND 变量的值相加,并将结果存入 DL 寄存器中。然后,将 DL 寄存器中的值输出到屏幕上,并结束程序。
2. 将字符串 "Hello World!" 输出到屏幕上
```
.MODEL SMALL
.STACK 100H
.DATA
MESSAGE DB 'Hello World!$'
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 9H
MOV DX, OFFSET MESSAGE
INT 21H
MOV AH, 4CH
INT 21H
END START
```
解释:该程序定义了一个字符串型变量 MESSAGE,赋值为 "Hello World!" 并以 $ 结尾。在代码段中,将数据段地址存入 AX 寄存器中,再将其赋值给 DS 寄存器。接着,将 AH 寄存器赋值为 9H,将 MESSAGE 变量的地址存入 DX 寄存器中,最后调用 21H 中断以输出该字符串。然后,结束程序。
3. 求出两个数的乘积并输出结果
```
.MODEL SMALL
.STACK 100H
.DATA
FIRST DW 50
SECOND DW 20
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AX, FIRST
MUL SECOND
MOV CX, AX
MOV AH, 2H
MOV DL, ' '
INT 21H
MOV AX, CX
CALL WRITE_NUM
MOV AH, 4CH
INT 21H
WRITE_NUM PROC
PUSH BX
PUSH CX
PUSH DX
MOV BX, 10
XOR CX, CX
WRITE_LOOP:
XOR DX, DX
DIV BX
PUSH DX
INC CX
OR AX, AX
JNZ WRITE_LOOP
PRINT_LOOP:
POP DX
ADD DL, '0'
MOV AH, 2H
INT 21H
LOOP PRINT_LOOP
POP DX
POP CX
POP BX
RET
WRITE_NUM ENDP
```
解释:该程序定义了两个双字节型变量 FIRST 和 SECOND,分别赋值为 50 和 20。在代码段中,将数据段地址存入 AX 寄存器中,再将其赋值给 DS 寄存器。接着,将 FIRST 变量的值存入 AX 寄存器中,再与 SECOND 变量的值相乘,并将结果存入 CX 寄存器中。然后,调用 WRITE_NUM 过程将 CX 寄存器中的值输出到屏幕上,并结束程序。
WRITE_NUM 过程将 BX 寄存器赋值为 10,将 CX 寄存器清零。在 WRITE_LOOP 中,将 DX 寄存器清零,将 AX 寄存器除以 BX 寄存器得到商和余数,并将余数压入栈中。然后,将 CX 寄存器加 1,如果 AX 寄存器不为零,则跳转到 WRITE_LOOP。在 PRINT_LOOP 中,将栈中的余数依次弹出并转换为字符,再输出到屏幕上。最后,弹出 DX、CX 和 BX 寄存器的值并返回。