鱼C论坛

 找回密码
 立即注册
查看: 2537|回复: 10

将十进制转化成二进制

[复制链接]
发表于 2016-5-12 17:51:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

360反馈意见截图16171117286848.png
  1. #include <stdio.h>
  2. int main ()
  3. {
  4.         int change(int str_1[],int n);
  5.         int a, i, str[10];
  6.         printf ("请输入一个整数:");
  7.         scanf ("%d",&a);
  8.         change(str,a);
  9.         if ( a < 0 )
  10.                 printf ("-");
  11.         for (i = 10; i >= 0; i--)
  12.                 printf ("%d",str[i]);
  13.         printf ("\n");
  14.         return 0;
  15. }
  16. int change(int str_1[],int n)
  17. {
  18.         int j;
  19.         while (n != 0)
  20.         {
  21.                 n =(int)(n % 2);
  22.                 for (j = 0;; j++)
  23.                         str_1[j] = n;
  24.                 n /= 2;
  25.         }
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-12 18:09:42 | 显示全部楼层
  1. #include <stdio.h>
  2. int main ()
  3. {
  4.         void change(char str_1[],int n);
  5.         int a;
  6.         char str[10];
  7.         printf ("请输入一个整数:");
  8.         scanf ("%d",&a);
  9.         change(str,a);
  10.         if ( a < 0 )
  11.                 printf ("-");
  12.         printf("%s", str);
  13.         printf ("\n");
  14.         return 0;
  15. }
  16. void change(char str_1[],int n)
  17. {
  18.         int i = 0;
  19.         while(n > 0){
  20.                 str_1[i++] = n % 2 + (int) '0';
  21.                 n /= 2;
  22.                 }
  23.         str_1[i] = '\0';
  24. }
复制代码

这是改进后后的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-13 11:50:25 | 显示全部楼层

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

本帖最后由 Whitehat_K 于 2016-5-13 12:32 编辑
  1. #include <stdio.h>
  2. int main ()
  3. {
  4.     int change(int str_1[],int n);
  5.     int a, i, str[10], j;
  6.    
  7.     printf ("请输入一个整数:");
  8.     scanf ("%d",&a);
  9.    

  10.     if ( a > 0 )
  11.     {
  12.         j = change(str,a);
  13.         for (i = j-1; i >= 0; i--)
  14.             printf ("%d",str[i]);
  15.         
  16.         printf ("\n");
  17.     }
  18.     else if( a < 0)
  19.     {
  20.         a = -a-1;
  21.         /*原理:http://blog.csdn.net/stpeace/article/details/43715781*/
  22.         j = change(str, a);
  23.          for (i = j-1; i >= 0; i--)
  24.             printf ("%d",!str[i]);

  25.          printf("\n");
  26.     }

  27.     return 0;
  28. }

  29. int change(int str_1[],int n)
  30. {
  31.     int j = 0;
  32.     while (n != 0)
  33.     {
  34.         str_1[j++] = n%2;
  35.         n /= 2;
  36.     }
  37.    
  38.     return j;
  39. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-12 18:20:43 | 显示全部楼层
楼主错的地方如下:
1、change函数没有返回值
2、算法有误,在第一次
  1. n =(int)(n % 2);
复制代码
时,n的值只能是 1 或 0 ,后面自然出错,要不就用另一个变量保存起来,不然就像我一样。用 n 保存 n 对 2 取模的值是不对的。

还有,最好用char 型数组,虽然int 型也行, 不过char数组至少好打印不是。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

不是不用返回值的吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

对了,那个符号怎么弄,就是如果输入的数是负数,我刚刚试了改几下,都弄不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-13 13:04:07 | 显示全部楼层
zhyin 发表于 2016-5-13 09:10
不是不用返回值的吗

你的change函数的声明是:int shange();
所以需要一个 int型的返回值(虽然没什么用)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

负数的话,可以先读入一个字符串,然后把数值和 负号分开,把数值转换为二进制后再把负号加上去就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好,谢谢你啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-14 13:15:28 | 显示全部楼层

我终于能解决别人的问题了,好激动
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-14 16:41:57 | 显示全部楼层
倾天 发表于 2016-5-14 13:15
我终于能解决别人的问题了,好激动

哈哈,加油哦  我还没有可以解决别人的问题的能力呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 09:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表