| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 910 人关注过本帖
标题:同样做函数,差距咋这么大呢 <本来以为自己能解决的,有些高估自己了> ...
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
程序代码:
#include <stdio.h>

//函数功能把十进制转换成二进制
//函数第2个参数在主函数中分配内存,定义一个全0数组即可
int i_ju=0;
void dec2bin(int source,char* bin)
{
    if(source==0) return;
    dec2bin(source/2,bin);
    bin[i_ju++]=(char)(source%2+0x30);
}
//函数功能把十进制转换成二进制
//函数第2个参数在主函数中分配内存,定义一个全0数组即可
//这个函数是个错误函数,可是不知道哪里错了
void _dec2bin(int source,char* bin)
{
    if(source==0) return;
    _dec2bin(source/2,bin);
    *(i_ju+bin)=(char)(source%2+0x30);
    i_ju++;
}
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);
    i_ju = 0;
    for(int i=0;i<20;i++) source[i]='\0';  //建议lz在这里把i定义为局部变量,不然i会变为全局变量的i,这样很容易影响到其他函数中的全局变量i;

    _dec2bin(24,source);
    printf("提示: 这里无法得到正确的字串24(10)=%s(2)\n",source);
    return 0;
}

//已经尽我所能的尊重原版了...


I have not failed completely
2012-12-03 20:21
XuMM_12
Rank: 1
等 级:新手上路
帖 子:8
专家分:9
注 册:2012-11-12
收藏
得分:0 
程序代码:
#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+1);//改这里~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ,然后再加个倒序排列就可以了
    *bin=(char)(source%2+0x30);
}
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)

*/

 


[ 本帖最后由 XuMM_12 于 2012-12-3 20:55 编辑 ]
2012-12-03 20:53
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用XuMM_12在2012-12-3 20:53:43的发言:

#include  
 
//函数功能把十进制转换成二进制
//函数第2个参数在主函数中分配内存,定义一个全0数组即可
int i=0;
void dec2bin(int source,char* bin)
{
    if(source==0) return;
    dec2bin(source/2,bin);
    bin=(char)(source%2+0x30);
    i++;
}
//函数功能把十进制转换成二进制
//函数第2个参数在主函数中分配内存,定义一个全0数组即可
//这个函数是个错误函数,可是不知道哪里错了
void _dec2bin(int source,char* bin)
{
    if(source==0) return;
    _dec2bin(source/2,bin+1);//改这里~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ,然后再加个倒序排列就可以了
    *bin=(char)(source%2+0x30);
}
int main()
{
    char source[20];
    for(int i=0;i<20;i++) source='\0';
    dec2bin(24,source);
    printf("注意这里能得到正确的字串24(10)=%s(2)\n",source);
    for(i=0;i<20;i++) source='\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)
 
*/
 
唉,难道就没办法了吗  这样是逆序了  然后再正序过来 把原来的简单的函数 变得复杂起来
还是第一种好啊

DO IT YOURSELF !
2012-12-03 21:00
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
还可以用指针数组或char指针来完成,不过完全是另一个版本的了
数组确实比指针好理解些
为了使程序的可读性提高,即使是指针要是调用起地址中的值来通常也会用数组的表达方法

I have not failed completely
2012-12-03 21:05
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
你试试传二级指针

总有那身价贱的人给作业贴回复完整的代码
2012-12-03 22:45
快速回复:同样做函数,差距咋这么大呢 <本来以为自己能解决的,有些高估自己了> ...
数据加载中...
 
   



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

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