在数据段BUFF开始顺序存放着100个无符号16位数,试编写程序将这100个数从大到小排序,写出完整程序。
时间: 2023-03-28 19:04:58 浏览: 109
您好,我可以回答这个问题。以下是一个简单的程序,可以将数据段BUFF中的100个无符号16位数从大到小排序:
```
#include <stdio.h>
#define SIZE 100
int main() {
unsigned short buff[SIZE];
int i, j, temp;
// 读入数据
for (i = ; i < SIZE; i++) {
scanf("%hu", &buff[i]);
}
// 冒泡排序
for (i = ; i < SIZE - 1; i++) {
for (j = ; j < SIZE - i - 1; j++) {
if (buff[j] < buff[j + 1]) {
temp = buff[j];
buff[j] = buff[j + 1];
buff[j + 1] = temp;
}
}
}
// 输出结果
for (i = ; i < SIZE; i++) {
printf("%hu ", buff[i]);
}
printf("\n");
return ;
}
```
该程序使用冒泡排序算法,首先读入数据段BUFF中的100个无符号16位数,然后进行排序,最后输出结果。
相关问题
在TEC-8 实验系统中,基于 TEC-8指令系统编写汇编程序,假设有3个无符号数依次存放在A地址开始的内存中(假设3个数为56H,12H,78H)试编写程序,使它们从大到小排列并依次存放在B地址开始的内存中。
下面是一份实现该功能的TEC-8汇编程序:
```
ORG 0000H ;程序起始地址
;定义变量
A EQU 0000H ;存放3个无符号数的起始地址
B EQU 0003H ;存放排序后的3个无符号数的起始地址
;初始化数据
INIT: LD A, 56H ;将第一个数存入A寄存器
ST A, A ;将A寄存器中的数存入A地址
LD A, 12H ;将第二个数存入A寄存器
ST A, A+1 ;将A寄存器中的数存入A地址+1
LD A, 78H ;将第三个数存入A寄存器
ST A, A+2 ;将A寄存器中的数存入A地址+2
;排序
SORT: LD A, A+2 ;将第三个数存入A寄存器
LD B, A+1 ;将第二个数存入B寄存器
CP A, B ;比较A、B寄存器中的数
JP M, CASE1 ;如果A<B,跳转到CASE1
ST A, B ;将A寄存器中的数存入B地址
ST B, A+2 ;将B寄存器中的数存入A地址+2
JP SORT ;继续排序
CASE1: LD B, A+2 ;将第三个数存入B寄存器
LD C, A+1 ;将第二个数存入C寄存器
CP B, C ;比较B、C寄存器中的数
JP M, CASE2 ;如果B<C,跳转到CASE2
ST B, C ;将B寄存器中的数存入C地址
ST C, A+2 ;将C寄存器中的数存入A地址+2
JP SORT ;继续排序
CASE2: LD C, A ;将第一个数存入C寄存器
CP B, C ;比较B、C寄存器中的数
JP M, CASE3 ;如果B<C,跳转到CASE3
ST B, C ;将B寄存器中的数存入C地址
ST C, A ;将C寄存器中的数存入A地址
JP SORT ;继续排序
CASE3: ST C, B ;将C寄存器中的数存入B地址
JP SORT ;继续排序
;结束程序
END: HLT ;停机指令
```
程序流程如下:
1. 定义变量A和B,分别表示存放3个无符号数的起始地址和存放排序后的3个无符号数的起始地址。
2. 初始化数据,将3个无符号数(56H,12H,78H)分别存入A地址开始的内存中。
3. 排序,使用冒泡排序算法将3个无符号数从大到小排列,并依次存放在B地址开始的内存中。
4. 结束程序,停机。
该程序使用了冒泡排序算法,每次比较相邻的两个数,如果前面的数比后面的数大,则交换它们的位置。每轮排序都会将最大的数排到最后面,因此需要进行3轮排序。排序完成后,3个无符号数就按照从大到小的顺序存放在B地址开始的内存中。
阅读全文