鱼C论坛

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

将十进制转化成二进制

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

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

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

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

360反馈意见截图16171117286848.png
#include <stdio.h>
int main ()
{
        int change(int str_1[],int n);
        int a, i, str[10];
        printf ("请输入一个整数:");
        scanf ("%d",&a);
        change(str,a);
        if ( a < 0 )
                printf ("-");
        for (i = 10; i >= 0; i--)
                printf ("%d",str[i]);
        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[j] = n;
                n /= 2;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-12 18:09:42 | 显示全部楼层
#include <stdio.h>
int main ()
{
        void change(char str_1[],int n);
        int a;
        char str[10];
        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[i++] = n % 2 + (int) '0';
                n /= 2;
                }
        str_1[i] = '\0';
}
这是改进后后的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[10], j;
    
    printf ("请输入一个整数:");
    scanf ("%d",&a);
    

    if ( a > 0 )
    {
        j = change(str,a);
        for (i = j-1; i >= 0; i--)
            printf ("%d",str[i]);
        
        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[i]);

         printf("\n");
    }

    return 0;
}

int change(int str_1[],int n)
{
    int j = 0;
    while (n != 0)
    {
        str_1[j++] = n%2;
        n /= 2;
    }
    
    return j;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

还有,最好用char 型数组,虽然int 型也行, 不过char数组至少好打印不是。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不是不用返回值的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对了,那个符号怎么弄,就是如果输入的数是负数,我刚刚试了改几下,都弄不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你的change函数的声明是:int shange();
所以需要一个 int型的返回值(虽然没什么用)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

负数的话,可以先读入一个字符串,然后把数值和 负号分开,把数值转换为二进制后再把负号加上去就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好,谢谢你啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我终于能解决别人的问题了,好激动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哈哈,加油哦  我还没有可以解决别人的问题的能力呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 02:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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