用函数实现二进制-十进制变换

要求用以下给定的主函数调用用户自己编写的BinaryInput、isInputError、BinaryToDecimal等函数,实现将用户输入的二进制数(不超过10位)转换为相应的十进制数。

#include<stdio.h>
#define FALSE 0
#define TRUE 1

int main(void)
{
    long binary,decimal;
    binary=BinaryInput();
    if(isInputError(binary)==FALSE) {
        printf("%ld不是二进制数\n",binary);
    }
    else{
        decimal=BinaryToDecimal(binary);
        printf("二进制数%ld对应的十进制数是%ld\n",binary,decimal); 
    }
    return 0;
}

函数BinaryInput负责接收用户输入的二进制数,并返回这个二进制数;函数isInputError负责判断其输入参数是否为一个二进制数,若是,则返回1,否则返回0;函数BinaryToDecimal完成将输入参数转换成十进制数,并返回这个十进制数。

输入格式:

给出一个二进制数,例如:1010。

输出格式:

输出与输入二进制对应的十进制数。

输入样例:

在这里给出一组输入。例如:

1010

输出样例:

在这里给出相应的输出。例如:

二进制数1010对应的十进制数是10

各函数具体实现思路

BinaryInput 函数
  • 此函数的主要目的是获取用户输入的二进制数。在函数内部,定义了一个 long 类型的变量 binary,然后使用 scanf 函数从标准输入读取一个长整型数,并将其赋值给 binary。最后,将读取到的 binary 返回给调用者(也就是主函数),以便后续进行处理。
isInputError 函数
  • 该函数用于判断输入的数是否为二进制数。它接受一个 long 类型的参数 binary。在函数内部,通过一个 while 循环,只要 binary 不等于 0,就会持续进行检查。每次循环中,先通过取 binary 的个位数字(对 10 取余)来判断该数字是否大于 1。如果个位数字大于 1,那就说明这个数不是二进制数,此时函数直接返回 FALSE;如果个位数字不大于 1,则将 binary 除以 10,去掉已经检查过的个位数字,以便继续检查下一位。当整个 binary 的每一位都检查完毕且都不大于 1 时,说明这个数是二进制数,函数返回 TRUE
BinaryToDecimal 函数
  • 此函数负责将二进制数转换为十进制数。它同样接受一个 long 类型的参数 binary。在函数内部,首先定义了两个变量 decimal(用于存储转换后的十进制数,初始化为 0)和 base(用于表示每位的权值,初始化为 1)。然后通过一个 while 循环,只要 binary 不等于 0,就会持续进行转换计算。每次循环中,先将 binary 的个位数字(对 10 取余)乘以当前的权值 base,并累加到 decimal 中;接着将 binary 除以 10,去掉已经转换过的个位数字,以便转换下一位;最后将权值 base 乘以 2,更新为下一位的权值(因为二进制数每位的权值是依次为 2 的幂次方)。当 binary 为 0 时,循环结束,此时 decimal 中存储的就是转换得到的十进制数,将其返回给调用者(主函数)。
#include<stdio.h>
#define FALSE 0
#define TRUE 1

// 函数声明
// 声明一个函数BinaryInput,该函数无参数,返回值为long类型,用于接收用户输入的二进制数并返回该二进制数
long BinaryInput();
// 声明一个函数isInputError,该函数接受一个long类型的参数binary,返回值为int类型,用于判断输入的参数是否为二进制数
int isInputError(long binary);
// 声明一个函数BinaryToDecimal,该函数接受一个long类型的参数binary,返回值为long类型,用于将输入的二进制数转换为十进制数并返回
long BinaryToDecimal(long binary);

int main()
{
    long binary, decimal;

    // 调用BinaryInput函数获取用户输入的二进制数,并将其赋值给变量binary
    binary = BinaryInput();

    // 调用isInputError函数判断输入的二进制数是否合法,若返回值为FALSE(即不是二进制数)
    if (isInputError(binary) == FALSE) {
        // 输出提示信息,表明输入的数不是二进制数
        printf("%ld不是二进制数\n", binary);
    }
    else {
        // 若输入的是合法的二进制数,调用BinaryToDecimal函数将该二进制数转换为十进制数,并将结果赋值给变量decimal
        decimal = BinaryToDecimal(binary);
        // 输出提示信息,展示输入的二进制数以及对应的十进制数
        printf("二进制数%ld对应的十进制数是%ld\n", binary, decimal);
    }

    // 主函数正常结束,返回0
    return 0;
}

// 函数定义

// BinaryInput函数,用于接收用户输入的二进制数并返回
long BinaryInput()
{
    long binary;

    // 使用scanf函数从标准输入读取一个长整型数,并将其存储到变量binary中
    scanf("%ld", &binary);

    // 将读取到的二进制数返回给调用者
    return binary;
}

// isInputError函数,判断输入参数是否为二进制数
int isInputError(long binary)
{
    // 当输入的数binary不为0时,进入循环进行逐位检查
    while (binary!= 0) {
        // 取binary的个位数字(即对10取余),判断该数字是否大于1
        if (binary % 10 > 1) {
            // 如果个位数字大于1,说明该数不是二进制数,返回FALSE
            return FALSE;
        }
        // 将binary除以10,去掉已经检查过的个位数字,以便检查下一位
        binary /= 10;
    }

    // 如果整个数的每一位都不大于1,说明是二进制数,返回TRUE
    return TRUE;
}

// BinaryToDecimal函数,将二进制数转换为十进制数并返回
long BinaryToDecimal(long binary)
{
    long decimal = 0, base = 1;

    // 当输入的二进制数binary不为0时,进入循环进行转换计算
    while (binary!= 0) {
        // 将binary的个位数字(即对10取余)乘以当前的权值base,并累加到decimal中
        decimal += (binary % 10) * base;
        // 将binary除以10,去掉已经转换过的个位数字,以便转换下一位
        binary /= 10;
        // 将权值base乘以2,更新为下一位的权值(因为二进制数每位的权值是2的幂次方)
        base *= 2;
    }

    // 将转换得到的十进制数返回给调用者
    return decimal;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值