十进制到二进制C,除以2

时间:2014-03-13 17:05:07

标签: c unix math

我必须编写2个将dec转换为bin的程序。我已经完成了第一个,但是当我尝试运行这个时,它打印出一个随机数的数组,不知道为什么,这就是我所拥有的:

#include <stdio.h>

int getNumber();
int dectoBin(int, int binarray[], int);
void printBin(int binary[], int dec);

int main()
{
    int M = 8;
    int binarray[M];
    int dec = getNumber();
    printf("The decimal number you entered was: %d", dec);
    decToBin(dec, binarray, M);
    printBin(binarray, dec);
    return 0;
}

int getNumber()
{
    int dec;
    printf("Enter any a number between 0 and 255: ");
    scanf("%d",&dec);
    return dec;
}

int decToBin(int dec, int binarray[], int M)
{
    int i, j;
    for(i=8; i>=0;i--)
    {
        while(dec != 0)
        {
            binarray[i]= dec % 2;
            dec = dec / 2; binarray[i] = dec; 
        }
    }
    return *binarray;
}

void printBin(int binary[], int dec)
{
    int i;
    if(dec > 255)    
    {
        printf("please use another number");
        main();
    }
    else
    {
        for(i =8; i >= 0;i--)
        {
            printf("%d", binary[i]);
            printf("\n");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您正在设置binarray[i]两次 - 一次正确(在模数声明之后)和一次错误(在除以dec之后)。因此,如果您的十进制数为65,则倒数第二个数字为32

您还可以使binarray成为位数而不是数字。这会给你一个编译错误,并且可能会让你陷入逻辑错误。

编辑:此计划存在很多控制流问题。您应该在调用dec > 255之前检查是否decToBin,否则程序将无法正常运行。 decToBinary不应该返回int - 它应该返回int s(或我建议的位)的数组,这就是您应该发送给printBin的内容。现在你正在返回指向binArray的指针(你知道指针是什么吗?)decToBin也应该返回void,因为它不执行任何计算。

编辑2:正如其他人指出你的数组索引不正确,我不知道你是怎么没有得到一个数组越界错误。此外,在打印时你的方法是错误的:你需要使用for循环,该循环从0开始,到7结束。

答案 1 :(得分:1)

以下是一些建议。

  1. 您在声明中有dectoBin但在函数调用和函数定义中有decToBin。确保它们都是dectoBin或全部是decToBin
  2. {li> M未在decToBin中使用。随意将其删除。
  3. 我会更改getNumber(),以便检查范围,并确保从返回语句中获得0到255之间的数字。这样就无需在printBin进行检查。
  4. decToBin的实施比你想的要简单得多。 for循环可以简化为:

     for(i=7; i>=0;i--, dec /= 2)
     {
        binarray[i]= dec % 2;
     }
    
  5. 最后,printBin的实现可能会略微不同,以使输出更具可读性。它们不是一次打印一个数字,而是可以一行打印。

  6. 这是我想出的:

    #include <stdio.h>
    
    int getNumber();
    int decToBin(int, int binarray[]);
    void printBin(int binary[], int dec);
    
    int main()
    {
       int M = 8;
       int binarray[M];
       int dec = getNumber();
       printf("The decimal number you entered was: %d\n", dec);
       decToBin(dec, binarray);
       printBin(binarray, dec);
       return 0;
    }
    
    int getNumber()
    {
       int dec;
       printf("Enter a number between 0 and 255: ");
       scanf("%d",&dec);
       if( dec < 0 || dec > 255)
       {
          printf("Please use another number\n");
          return getNumber();
       }
       return dec;
    }
    
    int decToBin(int dec, int binarray[])
    {
       int i;
       for(i=7; i>=0;i--, dec /= 2)
       {
          binarray[i]= dec % 2;
       }
       return *binarray;
    }
    
    void printBin(int binary[], int dec)
    {
       int i;
       printf("The decimal number in binary: ");
       for(i=0; i!=8; ++i)
       {
          printf("%d", binary[i]);
       }
       printf("\n");
    }
    

    示例执行和输出:

    ~>>./test-07
    Enter a number between 0 and 255: 149
    The decimal number you entered was: 149
    The decimal number in binary: 10010101