根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中
时间: 2024-02-25 17:56:14 浏览: 143
好的,以下是针对你的问题的回答:
你可以使用以下的代码实现:
```c
int cj[10] = {80, 90, 70, 85, 95, 75, 60, 92, 88, 76}; // 保存学生的成绩
int mc[10] = {0}; // 保存学生的名次
// 统计名次
for (int i = 0; i < 10; i++) {
int rank = 1;
for (int j = 0; j < 10; j++) {
if (cj[j] > cj[i]) {
rank++;
}
}
mc[i] = rank;
}
// 输出名次
for (int i = 0; i < 10; i++) {
printf("学生%d的名次是%d\n", i+1, mc[i]);
}
```
这段代码中,我们先定义了一个保存学生成绩的数组`cj`和一个保存学生名次的数组`mc`,然后使用两个循环来统计每个学生的名次。外层循环遍历每个学生,内层循环遍历所有学生的成绩,如果成绩比当前学生高,则名次加1。最后,我们再用一个循环输出每个学生的名次。
希望这个答案能够帮到你!如果你还有其他问题,可以继续问我。
相关问题
汇编编程:根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中并输出mc数组
以下是使用x86汇编语言实现的代码:
```assembly
; 数据段
.data
cj db 80, 90, 70, 85, 95, 60, 75, 65, 100, 55 ; 存储10个学生的成绩
mc db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 存储10个学生的名次,初始值为0
; 代码段
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
mov cx, 10 ; 循环10次,对每个学生进行处理
mov si, 0 ; si寄存器用于存储当前处理的学生的索引,初始值为0
loop_start:
mov al, cj[si] ; 加载当前学生的成绩
mov bh, 1 ; bh寄存器用于存储当前学生的名次,初始值为1
inner_loop_start:
cmp al, cj[bx] ; 将当前学生的成绩与其他学生的成绩逐一比较
jg inner_loop_end ; 如果当前学生成绩高于其他学生的成绩,则跳出循环
inc bh ; 否则将当前学生的名次加1
inc bx ; bx寄存器用于存储当前比较的学生的索引,加1后继续比较
jmp inner_loop_start
inner_loop_end:
mov mc[si], bh ; 将当前学生的名次存入名次数组
inc si ; 处理下一个学生
loop loop_start
; 输出名次数组
mov cx, 10 ; 循环10次,输出名次数组中的所有元素
mov si, 0 ; si寄存器用于存储当前输出的元素的索引,初始值为0
output_loop_start:
mov dl, mc[si] ; 加载当前要输出的名次
add dl, 48 ; 将数字转换为ASCII码
mov ah, 02h ; 使用dos中断21h中的02h功能,输出一个字符
int 21h
mov ah, 02h ; 使用dos中断21h中的02h功能,输出一个空格
mov dl, ' '
int 21h
inc si ; 处理下一个元素
loop output_loop_start
mov ah, 4Ch ; 使用dos中断21h中的4Ch功能,退出程序
int 21h
main endp
end main
```
该代码实现了对成绩数组中每个学生的成绩进行遍历,并针对每个学生计算出其名次,并将名次存入名次数组中。最后,输出名次数组中的所有元素。
需要注意的是,在比较当前学生的成绩和其他学生的成绩时,使用了bx寄存器存储当前比较的学生的索引。由于bh寄存器已经被用于存储当前学生的名次,因此在比较学生成绩时需要使用bx寄存器的低8位存储学生的索引。
汇编,根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中
好的,以下是针对你的问题的回答:
你可以使用以下的汇编程序实现:
```assembly
.model small
.stack 100h
.data
cj db 80, 90, 70, 85, 95, 75, 60, 92, 88, 76 ; 保存学生的成绩
mc db 10 dup(0) ; 保存学生的名次
.code
mov ax, @data
mov ds, ax
; 统计名次
mov si, offset cj
mov di, offset mc
mov cx, 10
mov bx, 1
loop1:
mov al, [si]
mov ah, [si+1]
mov dx, cx
inner:
cmp al, [si]
jl next
cmp ah, [si+1]
jg swap
cmp ah, [si+1]
jne next
cmp dx, cx
jle next
swap:
mov bx, dx
mov dl, [si]
mov dh, [si+1]
mov [si], al
mov [si+1], ah
mov al, dl
mov ah, dh
next:
add si, 2
dec dx
jnz inner
mov [di], bx
add di, 1
dec cx
jnz loop1
; 输出名次
mov di, offset mc
mov cx, 10
mov bx, 1
loop2:
mov al, [di]
mov ah, 0
add al, 48
mov dl, bl
add dl, 48
mov ah, 2
int 21h
mov ah, 2
mov dl, ' '
int 21h
inc di
inc bx
dec cx
jnz loop2
mov ah, 4ch
int 21h
```
这段代码中,我们先定义了一个保存学生成绩的数组`cj`和一个保存学生名次的数组`mc`,然后使用两个循环来统计每个学生的名次。外层循环遍历每个学生,内层循环遍历所有学生的成绩,比较大小并交换位置。最后,我们再用一个循环输出每个学生的名次。
希望这个答案能够帮到你!如果你还有其他问题,可以继续问我。
阅读全文