| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 632 人关注过本帖
标题:十进制数转换二进制的代码,可惜有错误,请众位指点。
只看楼主 加入收藏
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
结帖率:94.74%
收藏
 问题点数:0 回复次数:0 
十进制数转换二进制的代码,可惜有错误,请众位指点。
程序代码:
/**********************************************************************
*************                                              ************
*************     程序写到这里,进行不下去了,现在主要是        ************
*************  两个问题:1,输入的十进制数字不能大于int         ************
*************  的范围,否则无法完成转换;2,小数部分如果        ************
*************  是只能取近似值的无限循环数时,无法判断并         ************
*************  结束循环并取近似值,但现在的程序也怪了,         ************
*************  本来是无法结束的循环,莫名其妙就结束了,想       ************
*************  了半天也不知道问题在哪?还望高手指点。           ************
*************                                              ************
*************     其实也想到过用数组作为输入数,但实在是        ************
*************  想不出算法来,也请高手作以指点。谢谢了。         ************
*************                                              ************
**********************************************************************/

#include<stdio.h>
#include<string.h>
#define N 1000
int main(void)
{
        float a;
        char b[N];
        int i=0,j,c,l=1;
        do
        {
                system("cls");
                printf("请输入待转换的30000以内十进制数:\n");
                scanf("%f",&a);
                if(a>30000)
                {
                        printf("您的输入有误,请重新输入。");
                        sleep(1);
                }
        }
        while(a>30000);
        printf("\n二进制为:\n");
        c=a;     /* C是int 型,问题就出在这,主要是想取数值的整数部分。*/
        if(!c)
                printf("0"); /* 如果C为0,直接输出0 */
        if(c)
        {
                for(;c;c/=2)  /*如果输入值非零,进入循环中*/
                {
                        if(c%2)  b[i]='1';  /* 如果余2为真,在数组中存入1 */
                        else     b[i]='0';  /* 如果没有余数,说明此位为 0 */
                        ++i;
                }
                for(j=i-1;j>=0;--j,++l)
                {
                        printf("%c",b[j]);
                        if(!(l%4))    printf(" "); /* 输出整数部分的二进制数 */
                }
        }
        a-=(int)a;   /* 取小数部分的值 */
        l=1;
        if(a>0)       /* 如果小数部分有值,就进入循环 */
        {
                printf("."); /* 输出小数点 */
                for(;a>0;a=a*2,++l)  /* 循环的结束条件为 a 值小于或等于零 */
                {
                        a-=(int)a;     /* 取小数部分值 */
                        if(!(a-(int)a)) /*~~~~~~~~~~~如果 a 值为零,跳出循环*/
                                break;
                        if(a*2>=1)      /*如果 a*2 大于等于1,此位二进制为 1 */
                                printf("1");
                        else    printf("0");  /* 如果a*2不进位,此位为 0 */
                        if(!(l%4))    printf(" ");
                        if(!(l%40))   puts(" ");/* 输出格式:四位一组,10组一行*/
                }
        }
        puts("");

        getch();
}


[[it] 本帖最后由 广陵绝唱 于 2008-5-13 19:38 编辑 [/it]]
搜索更多相关主题的帖子: 十进制数 二进制 近似值 代码 小数 
2008-05-13 19:33
快速回复:十进制数转换二进制的代码,可惜有错误,请众位指点。
数据加载中...
 
   



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

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