编制程序从n个学生的成绩中统计出低于平均分的人数
时间: 2023-04-28 19:02:26 浏览: 69
这个程序需要先计算出所有学生的平均分,然后再遍历一遍成绩列表,统计低于平均分的人数即可。具体实现可以参考以下伪代码:
1. 输入n个学生的成绩列表,存储在一个数组中
2. 计算所有学生的平均分avg,可以使用循环遍历数组并累加每个学生的成绩,最后除以n得到平均分
3. 初始化低于平均分的人数count为0
4. 使用循环遍历数组,对于每个学生的成绩score,如果score小于avg,则count加1
5. 输出低于平均分的人数count
完整代码如下:
```
#include <stdio.h>
int main() {
int n, i, count = 0;
float avg = 0;
printf("请输入学生人数:");
scanf("%d", &n);
float scores[n];
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的成绩:", i+1);
scanf("%f", &scores[i]);
avg += scores[i];
}
avg /= n;
for (i = 0; i < n; i++) {
if (scores[i] < avg) {
count++;
}
}
printf("低于平均分的人数为:%d\n", count);
return 0;
}
```
相关问题
汇编 设有10个学生的成绩存放在内存中,编制程序分别统计90分以上、80~90分、 70~79分、60~69分、低于60分的学生人数,并存放到A、B、C、D、E、单元中。
以下是汇编代码实现:
```
ORG 100h ;指定程序的起始地址
MOV CX, 10 ;学生人数为10,存放在内存中
MOV SI, 0 ;初始化指针为0
MOV BL, 0 ;初始化统计人数为0
MOV BH, 0 ;初始化统计人数为0
MOV CH, 0 ;初始化统计人数为0
MOV DH, 0 ;初始化统计人数为0
MOV DL, 0 ;初始化统计人数为0
LOOP1:
MOV AL, [SI] ;将当前指针指向的成绩值读入AL寄存器
CMP AL, 90 ;比较成绩是否大于等于90分
JGE COUNT_A ;如果大于等于90分,跳转到COUNT_A标签
CMP AL, 80 ;比较成绩是否大于等于80分
JGE COUNT_B ;如果大于等于80分,跳转到COUNT_B标签
CMP AL, 70 ;比较成绩是否大于等于70分
JGE COUNT_C ;如果大于等于70分,跳转到COUNT_C标签
CMP AL, 60 ;比较成绩是否大于等于60分
JGE COUNT_D ;如果大于等于60分,跳转到COUNT_D标签
COUNT_E: ;低于60分,统计人数
INC DL ;将E区域的人数加1
JMP NEXT ;跳转到NEXT标签
COUNT_D: ;60~69分,统计人数
INC DH ;将D区域的人数加1
JMP NEXT ;跳转到NEXT标签
COUNT_C: ;70~79分,统计人数
INC CH ;将C区域的人数加1
JMP NEXT ;跳转到NEXT标签
COUNT_B: ;80~89分,统计人数
INC BH ;将B区域的人数加1
JMP NEXT ;跳转到NEXT标签
COUNT_A: ;90分以上,统计人数
INC BL ;将A区域的人数加1
NEXT:
INC SI ;将指针指向下一个成绩
LOOP LOOP1 ;循环执行,直到统计完所有学生的成绩
MOV [500], BL ;将A区域的人数存放到内存地址500处
MOV [501], BH ;将B区域的人数存放到内存地址501处
MOV [502], CH ;将C区域的人数存放到内存地址502处
MOV [503], DH ;将D区域的人数存放到内存地址503处
MOV [504], DL ;将E区域的人数存放到内存地址504处
MOV AH, 4CH ;退出程序
INT 21H
```
该程序使用了循环和条件语句来统计每个成绩段的学生人数,并将结果存储在内存中的不同单元中,最后通过INT 21H中断退出程序。在实际运行时,需要将10个学生的成绩存储在内存中并对应修改程序中的内存地址。
汇编设有10个学生的成绩存放在内存中,编制程序分别统计90分以上、80~90分、 70~79分、60~69分、低于60分的学生人数,并存放到A、B、C0、D、E、单元中。
这是一道比较典型的汇编程序设计题,需要进行多次的比较和跳转操作,以下是一个可能的解决方案:
```
DATA SEGMENT
GRADE DB 95, 85, 70, 60, 75, 80, 50, 65, 90, 55
N DB 0, 0, 0, 0, 0
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV CX, 10 ; 学生人数
MOV BX, 0
; 统计90分以上的学生人数
MOV SI, 0
MOV DI, 0
LOOP1:
CMP GRADE[SI], 90
JGE OVER1
INC SI
JMP NEXT1
OVER1:
INC N[DI]
INC SI
INC DI
NEXT1:
LOOP LOOP1
; 统计80~89分的学生人数
MOV SI, 0
MOV DI, 1
LOOP2:
CMP GRADE[SI], 80
JB OVER2
CMP GRADE[SI], 90
JGE OVER2
INC N[DI]
OVER2:
INC SI
LOOP LOOP2
; 统计70~79分的学生人数
MOV SI, 0
MOV DI, 2
LOOP3:
CMP GRADE[SI], 70
JB OVER3
CMP GRADE[SI], 80
JGE OVER3
INC N[DI]
OVER3:
INC SI
LOOP LOOP3
; 统计60~69分的学生人数
MOV SI, 0
MOV DI, 3
LOOP4:
CMP GRADE[SI], 60
JB OVER4
CMP GRADE[SI], 70
JGE OVER4
INC N[DI]
OVER4:
INC SI
LOOP LOOP4
; 统计低于60分的学生人数
MOV SI, 0
MOV DI, 4
LOOP5:
CMP GRADE[SI], 60
JGE OVER5
INC N[DI]
OVER5:
INC SI
LOOP LOOP5
; 将结果存储到对应的单元中
MOV SI, OFFSET N
MOV DI, 0
MOV CX, 5
LOOP6:
MOV AL, N[DI]
MOV [SI], AL
INC SI
INC DI
LOOP LOOP6
; 程序结束
MOV AH, 4CH
INT 21H
CODE ENDS
END START
```
这段程序使用了很多的循环和条件跳转,统计出了90分以上、80~89分、70~79分、60~69分、低于60分的学生人数,并将结果存储到A、B、C、D、E单元中。需要注意的是,这里使用了数据段来存储学生的成绩和结果,代码段中的程序对数据段进行操作。