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

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

手机上的,你试一下,我没验过
void_dec2bin(intsource,char* bin)
{
    if(source==0)return;
    _dec2bin(source/2,bin++);
    *bin=(char)(source%2+0x30);     
}
貌似这个我已经做过测试了  没用的

DO IT YOURSELF !
2012-12-03 19:31
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
那就没意义了  还不如用第一种呢
主要就是不想用再增加变量

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

那就只能用指针数组或着char指针来完成了
我真心觉得楼主对指针不太了解,其实指针移位的方法和数组本就差不多。

好吧看来得不到分了...
呵呵,那道没关系,只要参与 都会分分的

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



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

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