| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 910 人关注过本帖
标题:同样做函数,差距咋这么大呢 <本来以为自己能解决的,有些高估自己了> ...
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:24 
同样做函数,差距咋这么大呢 <本来以为自己能解决的,有些高估自己了>
程序代码:
#include <stdio.h>

//函数功能把十进制转换成二进制
//函数第2个参数在主函数中分配内存,定义一个全0数组即可
int i=0;
void dec2bin(int source,char* bin)
{
    if(source==0) return;
    dec2bin(source/2,bin);
    bin[i]=(char)(source%2+0x30);
    i++;
}
//函数功能把十进制转换成二进制
//函数第2个参数在主函数中分配内存,定义一个全0数组即可
//这个函数是个错误函数,可是不知道哪里错了
void _dec2bin(int source,char* bin)
{
    if(source==0) return;
    _dec2bin(source/2,bin);
    *bin=(char)(source%2+0x30);
    bin++;
}
int main()
{
    char source[20];
    for(int i=0;i<20;i++) source[i]='\0';
    dec2bin(24,source); 
    printf("注意这里能得到正确的字串24(10)=%s(2)\n",source);
    for(i=0;i<20;i++) source[i]='\0';
    _dec2bin(24,source);
    printf("提示: 这里无法得到正确的字串24(10)=%s(2)\n",source);
    return 0;
}

/*
  实验结果:
  D:\c_source\t1\Debug>t1
  注意这里能得到正确的字串     24(10)=11000(2)
  提示: 这里无法得到正确的字串24(10)=0(2)

*/


[ 本帖最后由 wp231957 于 2012-12-3 18:55 编辑 ]
搜索更多相关主题的帖子: 二进制 十进制 
2012-12-03 16:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
晕 我定义了2个i  居然能编译通过

DO IT YOURSELF !
2012-12-03 16:24
suijishu
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:66
专家分:144
注 册:2012-12-1
收藏
得分:1 
膜拜大牛!!!分给我吧。。。
2012-12-03 17:45
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用suijishu在2012-12-3 17:45:00的发言:

膜拜大牛!!!分给我吧。。。
没问题  给我讲讲 第二个函数哪里做错了啊

DO IT YOURSELF !
2012-12-03 18:48
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
以下是引用wp231957在2012-12-3 16:24:33的发言:

晕 我定义了2个i  居然能编译通过

一个i是全局变量 一个i是局部变量 有局部变量屏蔽全局变量

那个第二个 貌似每次都会往同一个位置写?
2012-12-03 18:55
suijishu
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:66
专家分:144
注 册:2012-12-1
收藏
得分:0 
看不懂
2012-12-03 18:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用zklhp在2012-12-3 18:55:22的发言:


一个i是全局变量 一个i是局部变量 有局部变量屏蔽全局变量

那个第二个 貌似每次都会往同一个位置写?
那个递归的函数我不会跟踪
不过我猜测也是和你的差不多  
那问题1、能改吗 2、咋改

DO IT YOURSELF !
2012-12-03 18:59
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:7 
程序代码:
void _dec2bin(int source,char* bin)
{
    if(source==0) return;
    _dec2bin(source/2,bin);  //这里虽然带入了source/2,但是source本身的值并没有改变,所以在递归到第二个时source又等于1,于是又带入,再递归,再带入...应改成source =/ 2;

    *bin=(char)(source%2+0x30);
    bin++;
}

I have not failed completely
2012-12-03 19:15
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用神龙赖了在2012-12-3 19:15:01的发言:

void _dec2bin(int source,char* bin)
{
    if(source==0) return;
    _dec2bin(source/2,bin);  //这里虽然带入了source/2,但是source本身的值并没有改变,所以在递归到第二个时source又等于1,于是又带入,再递归,再带入...应改成source =/ 2;
 
    *bin=(char)(source%2+0x30);
    bin++;
}
如果这样的话 那么第一函数 使用数组下标的那个 为什么就能得到正确结果呢

DO IT YOURSELF !
2012-12-03 19:16
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用神龙赖了在2012-12-3 19:15:01的发言:

void _dec2bin(int source,char* bin)
{
    if(source==0) return;
    _dec2bin(source/2,bin);  //这里虽然带入了source/2,但是source本身的值并没有改变,所以在递归到第二个时source又等于1,于是又带入,再递归,再带入...应改成source =/ 2;
 
    *bin=(char)(source%2+0x30);
    bin++;
}
我做过测试,在递归之前 打印过 source  打印过*bin  都能得到正确的东东
就是回溯出现了问题

DO IT YOURSELF !
2012-12-03 19:19
快速回复:同样做函数,差距咋这么大呢 <本来以为自己能解决的,有些高估自己了> ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017558 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved