Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能解释一下这个程序是如何工作的吗?它通过递归函数显示数字的二进制等价物 #包括 #包括 整数二进制(int); void main() { int-num; printf(“输入编号:\n”); scanf_s(“%d”和&num); 二进制(num); } 整数二进制(整数) { 内部rem; rem=num%2; num=num/2; 如果(num==0) { printf(“\n二进制等价物为%d”,rem); 返回rem; } 其他的 二进制(num); printf(“%d”,rem); }_C - Fatal编程技术网

有人能解释一下这个程序是如何工作的吗?它通过递归函数显示数字的二进制等价物 #包括 #包括 整数二进制(int); void main() { int-num; printf(“输入编号:\n”); scanf_s(“%d”和&num); 二进制(num); } 整数二进制(整数) { 内部rem; rem=num%2; num=num/2; 如果(num==0) { printf(“\n二进制等价物为%d”,rem); 返回rem; } 其他的 二进制(num); printf(“%d”,rem); }

有人能解释一下这个程序是如何工作的吗?它通过递归函数显示数字的二进制等价物 #包括 #包括 整数二进制(int); void main() { int-num; printf(“输入编号:\n”); scanf_s(“%d”和&num); 二进制(num); } 整数二进制(整数) { 内部rem; rem=num%2; num=num/2; 如果(num==0) { printf(“\n二进制等价物为%d”,rem); 返回rem; } 其他的 二进制(num); printf(“%d”,rem); },c,C,我无法理解这里返回语句的工作原理。它将值返回给什么?我想知道最终的结果是怎样的。假设我们把'8'作为输入,它输出1000,这是'8'的二进制等价物。但是我无法工作。我试图一步一步地解释 #include <stdio.h> #include <math.h> int binary(int); void main() { int num; printf("Enter the number:\n"); scanf_s("%d", &

我无法理解这里返回语句的工作原理。它将值返回给什么?我想知道最终的结果是怎样的。假设我们把'8'作为输入,它输出1000,这是'8'的二进制等价物。但是我无法工作。

我试图一步一步地解释

#include <stdio.h>
#include <math.h>

int binary(int);

void main()
{
    int num;    
    printf("Enter the number:\n");
    scanf_s("%d", &num);
    binary(num);
}

int binary(int num)
{
    int rem;
    rem = num % 2;
    num = num / 2;
    if(num == 0)
    {
        printf("\nThe binary equivalent is %d", rem);
        return rem;
    }
    else
        binary(num);
    printf("%d", rem);
}
此代码从用户处获取十进制数。然后调用一个函数
binary(num)

二进制(num)
函数中:

int num;
printf("Enter the number:\n");
scanf("%d",&num);
首先,您必须知道如何将数字从
十进制
转换为
二进制
。在这个
递归
函数中,工作已经完成

int binary(int num)
{
    int rem;
    rem=num%2;
    num=num/2;
    if(num==0)
    {
        printf("\nThe binary equivalent is %d",rem);
        return rem;
    }
    else
        binary(num);
    printf("%d",rem);
}
表示如果num为零,则它将终止并返回二进制值,即
rem
。我们正在
rem
中存储二进制值


否则它将继续并再次调用函数
binary()
,以计算数字的其余部分。

我假设您不太熟悉递归的工作原理,所以我将在这里写出来。:)

输入的示例=8。我们运行函数
binary(8)

从二进制(8)开始:
rem=8%2=0
num=8/2=4
。由于
num
不是
0
,请运行
binary(4)
。请注意,
binary(4)
完成后,我们需要打印
rem
,即
0
。但是现在,我们需要首先运行二进制(4)

运行二进制(4):
rem=4%2=0
num=4/2=2
。由于
num
不是
0
,请运行
binary(2)
。同样,我们将在函数
binary(2)
完成后打印
rem
,即
0
。但是现在,我们需要首先运行二进制(2)

运行二进制(2):
rem=2%2=0
num=2/2=1
。由于
num
仍然不是
0
,请运行
binary(1)
。同样,我们将在函数
binary(1)
完成后打印
rem
,即
0
。但是现在,我们需要首先运行二进制(1)

运行二进制(1):
rem=1%2=1
num=1/2=0
(整数除法)。由于
num
最终是
0
(这就是我们称之为
递归的
基本情况
),我们打印
“\n二进制等价物是1

--我们开始返回到前面的函数--

既然
binary(1)
完成了,我们将返回到
binary(2)
来完成剩余的语句(参见上文)。因此,我们打印
0
。然后
binary(2)
完成

既然
binary(2)
完成了,我们返回到
binary(4)
来完成剩下的语句(参见上文)。因此我们再次打印
0
。然后
binary(4)
完成

既然
binary(4)
完成了,我们返回到
binary(8)
来完成剩余的语句(参见上文)。因此我们打印
0
。然后最后
binary(8)
完成

最后,输出为:
\n二进制等价物为1000


哦,是的,顺便说一句,你的
二进制
函数可以是
void
函数。因为它不返回任何有用的值。

在调试器中逐步完成代码,或者用铅笔和纸计算出数字。这将对你有很大帮助。在这段代码中,没有人使用返回值。它返回数字,但不使用返回值-代码是s直到UB,因为在函数末尾缺少一个return语句
if(num==0)