要求用以下给定的主函数调用用户自己编写的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;
}
496

被折叠的 条评论
为什么被折叠?



