C输入5个数据按从大到小的顺序排列

 #include<stdio.h>
int main()
{
 int num[5];
 for(int i=0;i<5;i++)
 {
 scanf("%d",&num[i]);
 } 
 for(int i=0;i<5;i++)
 {
      for(int j=i+1;j<5;j++)
      {
       if(num[i]<num[j])
       {
       int temp=num[i];
       num[i]=num[j];
       num[j]=temp;
       }
      }
 }
 printf("从大到小的排序如下:\n");
 for(int i=0;i<5;i++)
 {
 printf("%d\n",num[i]);
 }
 
 
}
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来为您详细解答一下。 首先,我们需要使用汇编语言编写一个循环程序,实现从键盘接受10个输入数据并存储到内存中。 下面是一个简单的示例代码: ```asm mov bx, 0 ; 初始化计数器 mov cx, 10 ; 设置循环次数 input_loop: mov ah, 01h ; 设置输入功能号 int 21h ; 调用DOS中断21h,等待输入 sub al, 30h ; 将输入字符转换为数字 mov ah, 0 ; 清空高位 mov [input+bx], al ; 存储到内存中 inc bx ; 计数器加1 loop input_loop ; 循环输入 input: times 10 db 0 ; 申请10个字节的内存,用于存储输入数据 ``` 接下来,我们需要编写排序算法,将输入数据按从大到小的顺序排列。 这里使用冒泡排序算法,代码如下: ```asm mov bx, 0 ; 初始化计数器 mov cx, 9 ; 设置循环次数,因为每次比较会减少一个数的比较 outer_loop: mov si, 0 ; 初始化si为0,用于内层循环的计数器 inner_loop: mov al, [input+si] ; 取出当前位置的值 cmp al, [input+si+1] ; 比较当前值和下一个值的大小 jle skip_swap ; 如果当前值比下一个值大,跳过交换 xchg al, [input+si+1] ; 交换当前值和下一个值 mov [input+si], al ; 存回当前位置 skip_swap: inc si ; 计数器加1 cmp si, cx ; 判断是否到达循环上限 jle inner_loop ; 如果未到达,继续内层循环 dec cx ; 每次外层循环结束,循环次数减少1 cmp cx, 0 ; 如果循环次数为0,跳出循环 jne outer_loop ``` 最后,我们将排好序的数据输出到屏幕上,代码如下: ```asm mov bx, 0 ; 初始化计数器 mov cx, 10 ; 设置循环次数 output_loop: mov al, [input+bx] ; 取出当前位置的值 add al, 30h ; 将数字转换为字符 mov ah, 02h ; 设置输出功能号 int 21h ; 调用DOS中断21h,输出字符 inc bx ; 计数器加1 loop output_loop ; 循环输出 mov ah, 4Ch ; 设置功能号,用于程序结束 int 21h ; 调用DOS中断21h,程序结束 ``` 完整代码如下: ```asm .model small .stack 100h .data input: times 10 db 0 ; 申请10个字节的内存,用于存储输入数据 .code mov bx, 0 ; 初始化计数器 mov cx, 10 ; 设置循环次数 input_loop: mov ah, 01h ; 设置输入功能号 int 21h ; 调用DOS中断21h,等待输入 sub al, 30h ; 将输入字符转换为数字 mov ah, 0 ; 清空高位 mov [input+bx], al ; 存储到内存中 inc bx ; 计数器加1 loop input_loop ; 循环输入 mov bx, 0 ; 初始化计数器 mov cx, 9 ; 设置循环次数,因为每次比较会减少一个数的比较 outer_loop: mov si, 0 ; 初始化si为0,用于内层循环的计数器 inner_loop: mov al, [input+si] ; 取出当前位置的值 cmp al, [input+si+1] ; 比较当前值和下一个值的大小 jle skip_swap ; 如果当前值比下一个值大,跳过交换 xchg al, [input+si+1] ; 交换当前值和下一个值 mov [input+si], al ; 存回当前位置 skip_swap: inc si ; 计数器加1 cmp si, cx ; 判断是否到达循环上限 jle inner_loop ; 如果未到达,继续内层循环 dec cx ; 每次外层循环结束,循环次数减少1 cmp cx, 0 ; 如果循环次数为0,跳出循环 jne outer_loop mov bx, 0 ; 初始化计数器 mov cx, 10 ; 设置循环次数 output_loop: mov al, [input+bx] ; 取出当前位置的值 add al, 30h ; 将数字转换为字符 mov ah, 02h ; 设置输出功能号 int 21h ; 调用DOS中断21h,输出字符 inc bx ; 计数器加1 loop output_loop ; 循环输出 mov ah, 4Ch ; 设置功能号,用于程序结束 int 21h ; 调用DOS中断21h,程序结束 end ``` 希望能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值