zhyin 发表于 2016-5-12 17:51:37

将十进制转化成二进制

题目:编写一函数完成十进制整数到二进制的转换,函数的原型为:void itob(int n,char s[]),并测试你编写的函数。
我是最近才学了调用函数这些内容,然后一下代码是我做的,但是是错误的,求指导


#include <stdio.h>
int main ()
{
        int change(int str_1[],int n);
        int a, i, str;
        printf ("请输入一个整数:");
        scanf ("%d",&a);
        change(str,a);
        if ( a < 0 )
                printf ("-");
        for (i = 10; i >= 0; i--)
                printf ("%d",str);
        printf ("\n");
        return 0;
}
int change(int str_1[],int n)
{
        int j;
        while (n != 0)
        {
                n =(int)(n % 2);
                for (j = 0;; j++)
                        str_1 = n;
                n /= 2;
        }
}

倾天 发表于 2016-5-12 18:09:42

#include <stdio.h>
int main ()
{
      void change(char str_1[],int n);
      int a;
      char str;
      printf ("请输入一个整数:");
      scanf ("%d",&a);
      change(str,a);
      if ( a < 0 )
                printf ("-");
      printf("%s", str);
      printf ("\n");
      return 0;
}
void change(char str_1[],int n)
{
      int i = 0;
      while(n > 0){
                str_1 = n % 2 + (int) '0';
                n /= 2;
                }
      str_1 = '\0';
}
这是改进后后的

Whitehat_K 发表于 2016-5-13 11:50:25

O_o: ..... .... . .. ...................(错误之处,请指正。)

本帖最后由 Whitehat_K 于 2016-5-13 12:32 编辑

#include <stdio.h>
int main ()
{
    int change(int str_1[],int n);
    int a, i, str, j;
   
    printf ("请输入一个整数:");
    scanf ("%d",&a);
   

    if ( a > 0 )
    {
      j = change(str,a);
      for (i = j-1; i >= 0; i--)
            printf ("%d",str);
      
      printf ("\n");
    }
    else if( a < 0)
    {
      a = -a-1;
      /*原理:http://blog.csdn.net/stpeace/article/details/43715781*/
      j = change(str, a);
         for (i = j-1; i >= 0; i--)
            printf ("%d",!str);

         printf("\n");
    }

    return 0;
}

int change(int str_1[],int n)
{
    int j = 0;
    while (n != 0)
    {
      str_1 = n%2;
      n /= 2;
    }
   
    return j;
}

倾天 发表于 2016-5-12 18:20:43

楼主错的地方如下:
1、change函数没有返回值
2、算法有误,在第一次n =(int)(n % 2);时,n的值只能是 1 或 0 ,后面自然出错,要不就用另一个变量保存起来,不然就像我一样。用 n 保存 n 对 2 取模的值是不对的。

还有,最好用char 型数组,虽然int 型也行, 不过char数组至少好打印不是。

zhyin 发表于 2016-5-13 09:10:00

倾天 发表于 2016-5-12 18:20
楼主错的地方如下:
1、change函数没有返回值
2、算法有误,在第一次时,n的值只能是 1 或 0 ,后面自然出 ...

不是不用返回值的吗

zhyin 发表于 2016-5-13 09:20:35

倾天 发表于 2016-5-12 18:20
楼主错的地方如下:
1、change函数没有返回值
2、算法有误,在第一次时,n的值只能是 1 或 0 ,后面自然出 ...

对了,那个符号怎么弄,就是如果输入的数是负数,我刚刚试了改几下,都弄不了

倾天 发表于 2016-5-13 13:04:07

zhyin 发表于 2016-5-13 09:10
不是不用返回值的吗

你的change函数的声明是:int shange();
所以需要一个 int型的返回值(虽然没什么用)

倾天 发表于 2016-5-13 13:05:54

zhyin 发表于 2016-5-13 09:20
对了,那个符号怎么弄,就是如果输入的数是负数,我刚刚试了改几下,都弄不了

负数的话,可以先读入一个字符串,然后把数值和 负号分开,把数值转换为二进制后再把负号加上去就好了

zhyin 发表于 2016-5-13 19:46:23

倾天 发表于 2016-5-13 13:05
负数的话,可以先读入一个字符串,然后把数值和 负号分开,把数值转换为二进制后再把负号加上去就好了

好,谢谢你啦

倾天 发表于 2016-5-14 13:15:28

zhyin 发表于 2016-5-13 19:46
好,谢谢你啦

我终于能解决别人的问题了,好激动

zhyin 发表于 2016-5-14 16:41:57

倾天 发表于 2016-5-14 13:15
我终于能解决别人的问题了,好激动

哈哈,加油哦{:10_265:}我还没有可以解决别人的问题的能力呢
页: [1]
查看完整版本: 将十进制转化成二进制