| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 877 人关注过本帖
标题:新手,编写了一个十进制转换二进制的代码?但是只有一部分答案正确,求解?
只看楼主 加入收藏
a4099970
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2015-10-26
收藏
 问题点数:0 回复次数:12 
新手,编写了一个十进制转换二进制的代码?但是只有一部分答案正确,求解?
程序代码:
//十进制转二进制的小程序


int main(){
    int s = 13; //假设输入了一个13,----------------------问题在此,输入100以下可以正常运行,1000程序正常,答案不对,10000的时候程序崩溃
    int y = 0;  //定义一个余数
    int i = 0;  //定义数组下表起始数为 0
    int a[i+1]; //定义一个数组 一共有i+1个元素
       while (s != 0) { //当商不等于0的时候求余数,并把余数放入数组中
        
        y = s % 2; //第一次求求余数
        printf("%d",y);
        a[i] = y;     //把余数放入数组中
        i++;          //因为下次放入的数组要+1所以这里需要 i++
        s /= 2;       //并且重新把商的值变成除以2的值
    }
    printf("\n");
    printf("%d\n",i);
    for (int j = 0; j < i; j++) { //最后反向打印数组
        printf("%d",a[i-1-j]);
        
    }
    
        return 0;
    
}





[此贴子已经被作者于2015-10-26 13:29编辑过]

搜索更多相关主题的帖子: 十进制 二进制 
2015-10-26 13:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
int i = 0;
int a[i+1]; --- 为什么不直接写 int a[1] ?
2015-10-26 13:42
a4099970
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2015-10-26
收藏
得分:0 
回复 2楼 rjsp
因为数组是个变量啊。如果写1了,数组就成了一个只有1个元素的素组,后面算得余数怎么放进去呢。。
而且是试了以下,如果是写成a[1]的话,程序在0-100的情况下答案就已经出错了。。

[此贴子已经被作者于2015-10-26 13:46编辑过]

2015-10-26 13:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 3楼 a4099970
我想到一个天才的主意:
在纸条上写了“请卖给我1包烟”,我拿它到小卖部,一句话不说,掏出纸条。店老板吓了一条,看了后,笑着对我:“原来是个哑巴呀,我还以为是抢劫的”,交易完毕后,我高兴的回到家。
第二天,烟抽完了,我掏出上次的那张纸条,将上面的1改为2,笑眯眯地等着一会儿第二包烟的自动出现,……
2015-10-26 16:35
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
我想说,,C语言的数组定义不是不能动态的吗?他在编译程序的时候就给数组变量预留空间了。
然后,你这个程序在一开始的时候就对数组定义为i[1],这说明这个数组只需要一个位置,,但在后来的程序运行中,你却调用了超出你之前定义的数组空间,也就是下标越界了。
一定是这时候出问题了。我怀疑,程序在运行的时候会自动不断地去重写程序,你需要的数组空间每多一个,他就重写一次,所以才会数字越大越接近崩溃。

我是新手,刚学加自学的。。。。不值得采信,就是发表下看法

φ(゜▽゜*)♪
2015-10-27 19:13
shf19961008
Rank: 1
等 级:新手上路
帖 子:13
专家分:2
注 册:2015-10-18
收藏
得分:0 
看下楼
2015-10-27 21:22
shf19961008
Rank: 1
等 级:新手上路
帖 子:13
专家分:2
注 册:2015-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>

int main(void)
{
    int n;
    int yu[100];
    int cnt,i;
    scanf("%d",&n);
    for(cnt=0;n!=0;cnt++)//cnt=counter
    {
        yu[cnt]=n%2;
        n/=2;
    }
    for(i=0;i<cnt;i++)
    {
        printf("%d",yu[cnt-1-i]);
    }
    return 0;
}
2015-10-27 21:22
mj0011
Rank: 2
等 级:论坛游民
帖 子:24
专家分:39
注 册:2014-12-23
收藏
得分:0 
c primer plus位运算 和第9章函数(用递归实现)中有相关的代码你可以去看一下

[此贴子已经被作者于2015-10-28 00:50编辑过]

2015-10-28 00:48
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:0 
楼主没清楚,数组从定义的时候就必须指定大小的了,这样编译器才好给你分配你需要的内存。(虽然自动变大的数组是很智能并人性化,但你强求程序知道你那个数组最终有多大是没可能的,因为按道理说它们全都有可能无限大。所以控制数组的内存使用多少就交由人来决定了。)
你思路是对的。
2015-11-05 23:28
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
收藏
得分:0 
#include <stdio.h>
int main()
{
    int n,m=0x80000000;
    scanf("%d",&n);
    while(m){
        if(m&n)
            printf("1");
        else
            printf("0");
        m>>=1;
    }
}

这样写的
健壮版本
int main()
{
    int n,m=1,i;
    scanf("%d",&n);
    for(;m>0;m<<=1)   i=m;                //算INT是几个Bit位  把最高位置为1
     while(i){
        if(i&n)
            printf("1");
        else
            printf("0");
        i>>=1;
    }      

}


[此贴子已经被作者于2015-11-6 15:51编辑过]

2015-11-06 15:30
快速回复:新手,编写了一个十进制转换二进制的代码?但是只有一部分答案正确,求 ...
数据加载中...
 
   



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

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