第二周上机任务1-2---编写递归函数将十进制数转换成二进制数输出

本文介绍了如何使用递归函数将十进制数转换为二进制数,并提供了完整的程序代码,包括版权声明、作者信息、完成日期等必要信息。通过实例展示了程序的具体实现过程,帮助读者理解并掌握该技术。

实验目的:编写递归函数将十进制数转换成二进制数输出

实验内容:
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br> * 作<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 者:<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>雷恒鑫<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br> * 完成日期:<wbr><wbr><wbr> 2012 年 02 月25<wbr><wbr><wbr> 日<br> * 版本号:<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><br> * 对任务及求解方法的描述部分<br> * 输入描述:由程序产生随机数作为初始值<br> * 问题描述:……<br> * 程序输出:……<br> * 程序头部的注释结束</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

#include <iostream>

using namespace std;

int main ()
{

int n, a, b[10], i = 0;

cin >> n;

while (n > 0)
{
a = n % 2;
n = n / 2;
b[i] = a;
++i;

}

for(--i; i >= 0; --i)
cout << b[i];

return n;

}

运行结果:

经验积累:
1.不用自定义函数也能实现将十进制数转换成二进制数输出!

上机感言:
我更加熟悉递归的运算流程了。


<think>好的,我需要帮助用户查找关于二进制加法的运算规则、码表、转换表格以及相关资料。用户还提到了相关的编码表或参考资料,可能需要具体的示例或代码实现。让我先回顾一下用户提供的引用内容,看看有没有相关信息。 首先,引用[1]提到了C语言的二进制四则运算口诀表代码,特别是加法部分,使用了递归函数来处理进位。代码中有一个trans函数,将十进制转换为二进制。这可能对用户有帮助,特别是代码示例部分。 引用[2]讨论了使用Logsim设计4位二进制补码器和3位加法器的电路设计,提到了异或门和与门用于计算本位和进位。这里解释了二进制加法的基本逻辑门实现,可能涉及加法器的结构,这可以作为运算规则的硬件实现参考。 引用[3]涉及C语言的二进制乘法运算,但用户主要关注加法,这部分可能不太相关,不过其中提到的补码和反码可能与二进制运算中的溢出处理有关,需要留意。 引用[4]是关于上机实验的,要求实现多精度二进制数的加减法编程,可能包含如何处理多位加法和进位传递的方法,这对用户的问题中的运算规则和编码实现有帮助。 引用[5]详细描述了十进制加法器的设计,特别是当结果超过9时需要加6调整,虽然主要是十进制,但其中涉及的二进制加法调整机制可能对用户理解二进制运算中的特殊情况(如溢出处理)有参考价值。 接下来,我需要整理二进制加法的基本规则,比如逐位相加、进位处理,可能还需要真值表或码表来展示不同位的相加结果。例如,0+0=0,0+1=11+0=11+1=0进位1。这部分可以制作一个简单的表格。 然后,用户可能需要转换示例,比如如何将两个二进制数相加,处理进位。例如,1011 + 1101的结果如何逐步计算。这可以结合引用中的代码或电路设计来说明。 关于码表或转换表格,引用[1]中的trans函数可能展示了十进制转二进制的方法,但用户可能需要二进制加法本身的码表,即每一位相加的结果及进位情况。例如,类似真值表的格式,输入两个位和进位输入输出当前位和进位输出。 此外,用户提到的参考资料可能包括加法口诀表,引用[1]中的代码可能对应口诀表的实现,但需要解释其逻辑。例如,二进制加法中每一位的运算和进位处理规则,类似于十进制的竖式加法。 可能还需要考虑补码表示(引用[2]和[3])在加法中的应用,特别是在处理负数时的二进制加法规则,但用户的问题主要关注加法本身,可能需要先介绍原码加法,再提到补码的情况。 综合以上信息,我需要分步骤回答用户的问题,包括运算规则、码表、转换示例以及参考资料,引用相关的引用内容作为支持。同时,生成相关问题,引导用户进一步探索二进制加法的其他方面。</think>### 二进制加法详解 #### 一、二进制加法运算规则 二进制加法遵循**逐位相加、进位传递**的原则,基本规则如下: 1. **本位计算**: - $0 + 0 = 0$(无进位) - $0 + 1 = 1$(无进位) - $1 + 0 = 1$(无进位) - $1 + 1 = 0$(进位12. **进位处理**:若当前位相加产生进位,需将进位累加到高位。例如: $$1011_2 + 1101_2 = 11000_2$$ 计算过程: ``` 1 0 1 1 + 1 1 0 1 ---------- 1 1 0 0 0 ``` #### 二、二进制加法码表(真值表) | 位A | 位B | 进位输入 | 本位和 | 进位输出 | |-----|-----|---------|-------|---------| | 0 | 0 | 0 | 0 | 0 | | 0 | 1 | 0 | 1 | 0 | | 1 | 0 | 0 | 1 | 0 | | 1 | 1 | 0 | 0 | 1 | | 0 | 0 | 1 | 1 | 0 | | 0 | 1 | 1 | 0 | 1 | | 1 | 0 | 1 | 0 | 1 | | 1 | 1 | 1 | 1 | 1 | 此表展示了全加器的逻辑行为[^2]。 #### 三、二进制与十进制转换示例 以 $1011_2 + 1101_2$ 为例: 1. **十进制转换**: - $1011_2 = 11_{10}$ - $1101_2 = 13_{10}$ - 和为 $11 + 13 = 24_{10} = 11000_2$。 2. **二进制直接相加**: ``` 1 0 1 1 + 1 1 0 1 ---------- 1 1 0 0 0 ``` #### 四、相关代码实现 ##### 1. C语言二进制加法口诀表(递归处理进位) ```c #include <stdio.h> #define N 2 int trans(int j) { if (j < N) return j; else return j % N + 10 * trans(j / N); // 十进制转二进制 } int main() { for (int i=0; i<N; i++) { for (int j=0; j<N; j++) { printf("%d+%d=%d ", i, j, trans(i+j)); } printf("\n"); } return 0; } ``` 输出: ``` 0+0=0 0+1=1 1+0=1 1+1=10 ``` 此代码展示了二进制加法口诀表的生成逻辑[^1]。 ##### 2. 硬件电路实现(Logsim) 使用**异或门计算本位**,**与门计算进位**: - 一位全加器电路: - 本位和:$S = A \oplus B \oplus C_{in}$ - 进位输出:$C_{out} = (A \cdot B) + (C_{in} \cdot (A \oplus B))$ - 多位加法器通过级联全加器实现[^2]。 #### 五、参考资料 1. **二进制加法口诀表代码**:引用[1]中的递归转换函数。 2. **硬件电路设计**:引用[2]中异或门与与门的组合逻辑。 3. **多精度加减法编程**:引用[4]中提到的实验要求。 4. **溢出调整机制**:引用[5]中提到的加6修正逻辑(适用于BCD码)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值