微机编写程序:从键盘输入十个学生的成绩(设成绩<100),统计60分以下(fail),60~69分
时间: 2023-11-20 17:03:14 浏览: 152
要编写程序实现从键盘输入十个学生的成绩,并统计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分的人数。
相关问题
用微机原理8086编写一个分支程序,通过成绩90分以上,体测90分以上,品德90分以上三个分支选出三好学生。
在8086微机原理中,编写一个分支程序(也称为条件转移)来根据成绩和体测分数判断是否达到三好学生的标准,可以使用基本的指令如`CMP` (比较) 和 `JNE` (不等于,跳转非零) 或 `JE` (相等,跳转到零) 来实现。这里是一个简单的伪代码示例:
```assembly
; 定义分数变量
Score DB ?
PhysicalTest DB ?
MoralCharacter DB ?
; 读取每个分数
MOV AL, [Score] ; 读取成绩
CMP AL, 90 ; 比较是否超过90
JGE IsGoodStudent ; 如果大于等于,跳转到IsGoodStudent标签
; 同理,对其他两个分数做同样的比较
MOV AL, [PhysicalTest]
CMP AL, 90
JGE PhysicalTestPass
MOV AL, [MoralCharacter]
CMP AL, 90
JGE MoralCharacterPass
; 跳转到结束部分,因为都没有达到三好学生标准
jmp End
IsGoodStudent:
; 表明成绩满足条件,继续检查其他方面
; ...(这里可以添加更多的条件判断)
PhysicalTestPass:
; 体测也达标,进一步检查
; ...(同上)
MoralCharacterPass:
; 品德达标,至此已满足所有条件,设置标志位或者跳转到"三好学生"标签
End:
; 这里放置程序结束或者后续处理代码
```
请注意,这只是一个基本的框架,实际编写时需要将每一步操作转换成具体的机器码,并考虑到内存访问、标志位更新和数据的正确存储等问题。在8086中,分支指令通常配合段寄存器和偏移地址一起使用。
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` 命令查看各寄存器的内容变化。
阅读全文