2401_87430025 2024-10-31 22:21 采纳率: 25%
浏览 6
已结题

请问这个将十进制数转换为二进制数的代码有什么问题


#include <stdio.h>
void Transform(int *p,int x);
void Print(int *p,int r[]);

int main()
{
    int r[16];
    int *p = r;
    int x;
    do{
        printf("Input an integer which belong to 0~65535:\n");
        scanf("%d",&x);
    }while( (x<0) || (x > 65535) );
    
    Transform(p,x);
    printf("The binary is:\n");
    Print(p,r);
    
    return 0;

}
//将十进制数转换为二进制数
void Transform(int *p,int x)
{
    while(x!=0)
    {
        *p = x % 2;
        x = x / 2;
        p ++;
    }
}
//打印二进制数
void Print(int *p,int r[])
{
    p --;
    for( ;p >= r ;p --)
    {
        printf("%d", *p);
    }
}

请问这个将十进制数转换为二进制数的代码有什么问题

  • 写回答

2条回答 默认 最新

  • micthis 2024-10-31 22:34
    关注

    转换函数的参数p要用二级指针才能修改实参的值,同时为了能处理0转换函数改成用do...while循环,代码:

    #include <stdio.h>
    void Transform(int **p,int x);
    void Print(int *p,int r[]);
    int main()
    {
        int r[16];
        int *p = r;
        int x;
        do{
            printf("Input an integer which belong to 0~65535:\n");
            scanf("%d",&x);
        }while( (x<0) || (x > 65535) );
        Transform(&p,x);
        printf("The binary is:\n");
        Print(p,r);
        return 0;
    }
    //将十进制数转换为二进制数
    void Transform(int **p,int x)
    {
        do
        {
            **p = x % 2;
            x = x / 2;
            (*p) ++;
        }while(x!=0);
    }
    //打印二进制数
    void Print(int *p,int r[])
    {
        p--;
        for( ;p >= r ;p --)
        {
            printf("%d", *p);
        }
    }
    

    或者返回p,代码:

    #include <stdio.h>
    int* Transform(int *p,int x);
    void Print(int *p,int r[]);
    int main()
    {
        int r[16];
        int *p = r;
        int x;
        do{
            printf("Input an integer which belong to 0~65535:\n");
            scanf("%d",&x);
        }while( (x<0) || (x > 65535) );
        p=Transform(p,x);
        printf("The binary is:\n");
        Print(p,r);
        return 0;
    }
    //将十进制数转换为二进制数
    int* Transform(int *p,int x)
    {
        do
        {
            *p = x % 2;
            x = x / 2;
            p++;
        }while(x!=0);
        return p;
    }
    //打印二进制数
    void Print(int *p,int r[])
    {
        p--;
        for( ;p >= r ;p --)
        {
            printf("%d", *p);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月9日
  • 已采纳回答 11月1日
  • 创建了问题 10月31日