6-2 实验6_4_二进制转十进制 (100分)

6-2 实验6_4_二进制转十进制 (100分)
设计递归函数int convert(int n);用于将二进制数n转换为十进制数并返回。 递归函数设计思路与提示: 如将1101转换为十进制的形式:

1101=1 * 2
​0
​​ + 0 * 2
​1
​​ + 1 * 2
​2
​​ + 1 * 2
​3
​​ = 1101 % 10 + convert(110) * 2 ;

110 = 0 * 2
​0
​​ + 1 * 2
​1
​​ + 1 * 2
​2
​​ = 110 % 10 + convert(11) * 2;

11 = 1 * 2
​0
​​ + 1 * 2
​1
​​ = 11 % 10 + convert(1) * 2 ;

convert(1) = 1 ;

所以得到以下结论:当n0或n1时,函数返回n,否则返回n%10+convert(n/10)*2 。

输入与输出要求: 输入一个整数n,代表二进制数,其长度不大于10。输出转换后的十进制数,占一行。

函数接口定义:
函数原型如下:
int convert(int n);
其中 n 是用户传入的参数。 n 的长度不大于10;函数的返回值为转换后的十进制数。

裁判测试程序样例:
函数被调用的例子如下:
#include<stdio.h>

int convert(int n);

int main()
{
int n ;

scanf("%d",&n);

printf("%d\n",convert(n)) ;
return 0 ;    

}

/* 请在这里填写答案 */
输入样例:
101010
输出样例:
42

int convert(int n)
{
	if(n==0||n==1)
	  return n;
	else
	  return n%10+convert(n/10)*2;
}
好的,下面是针对您的实验要求的指导: 1. 更改十六进制BCD实验: 在emu8086软件中进行十六进制BCD的实验,可以参考以下步骤: - 首先打开emu8086软件,创建一个新的程序文件 - 在程序中定义需要转换的十六进制值 - 将十六进制转换二进制值 - 将二进制成4位一组,转换成BCD码 - 将BCD码合并起来,得到最终的BCD码 以下是一个简单的十六进制BCD的示例程序,供您参考: ``` org 100h mov al, 0A7h ; 设置需要转换的十六进制值 mov bl, 10 ; 设置除用于二进制组 mov cl, 4 ; 设置每组的位,即BCD码的位 mov ah, 0 ; 清空寄存器 mov bh, 0 ; 清空寄存器 convert: xor ah, ah ; 清空寄存器 div bl ; 将al除以bl,商存入ah,余存入al or ah, 30h ; 将ah转换为ASCII码 cmp ah, 39h ; 判断是否大于9 jbe skip ; 如果不大于9,跳过下一行 add ah, 7h ; 如果大于9,加上7,得到对应的字母 skip: push ax ; 将ah和al压入栈中 inc bh ; 增加计器 cmp bh, cl ; 判断是否已经达到每组的位 jne convert ; 如果没有达到,继续转换 pop ax ; 弹出栈中的据,得到最后一个BCD码 mov dl, al ; 将最后一个BCD码存入dl pop ax ; 弹出栈中的据,得到前一个BCD码 mov dh, al ; 将前一个BCD码存入dh mov ah, 2 ; 设置输出功能号 mov dl, dh ; 输出高位BCD码 int 21h ; 调用21h中断 mov dl, dl ; 空一格 int 21h ; 调用21h中断 mov ah, 2 ; 设置输出功能号 mov dl, dl ; 空一格 int 21h ; 调用21h中断 mov dl, dl ; 空一格 int 21h ; 调用21h中断 mov ah, 2 ; 设置输出功能号 mov dl, dl ; 空一格 int 21h ; 调用21h中断 mov dl, dl ; 空一格 int 21h ; 调用21h中断 mov ah, 2 ; 设置输出功能号 mov dl, dl ; 空一格 int 21h ; 调用21h中断 mov dl, dl ; 空一格 int 21h ; 调用21h中断 mov ah, 4ch ; 设置退出功能号 int 21h ; 调用21h中断 ``` 2. 实现二进制十进制: 在emu8086软件中实现二进制十进制实验,可以参考以下步骤: - 首先打开emu8086软件,创建一个新的程序文件 - 在程序中定义需要转换二进制值 - 设定计器,用于计算二进制值的十进制值 - 用除法算法将二进制转换十进制值 以下是一个简单的二进制十进制的示例程序,供您参考: ``` org 100h mov al, 1010110b ; 设置需要转换二进制值 mov bl, 10 ; 设置除用于二进制转换十进制值 mov cl, 0 ; 清空计器 mov dl, 0 ; 清空寄存器 convert: xor ah, ah ; 清空寄存器 div bl ; 将al除以bl,商存入ah,余存入al mov bh, ah ; 将ah存入bh shl bh, cl ; 将bh左移cl位 or dl, bh ; 将dl和bh进行或运算 inc cl ; 增加计器 cmp al, 0 ; 判断是否已经将所有位转换完 jne convert ; 如果没有转换完,继续转换 mov ah, 0 ; 设置输出功能号 mov al, dl ; 将十进制值存入al add al, 30h ; 将al转换为ASCII码 mov dl, al ; 将al存入dl mov ah, 2 ; 设置输出功能号 int 21h ; 调用21h中断 mov ah, 4ch ; 设置退出功能号 int 21h ; 调用21h中断 ``` 希望这些内容能够对您有所帮助。如有任何问题,请随时联系我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChaoYue_miku

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值