编程论坛's Archiver

dousao 发表于 2008-5-12 22:58

10进制小数转换成2进制问题

想法是用队列实现
那里出错了?


#include "stdio.h"
#include "stdlib.h"
typedef  int datatype;


typedef struct linknode
{
        datatype info;
        struct linknode *next;
}node;


typedef struct
{
     node *rear,*front;        
        
}queue;
queue *initqueue()
{
      queue *q;
      q=(queue*)malloc(sizeof(queue));
      q->rear=NULL;
      q->front=NULL;
      return q;      
      
      
      
}
queue *insert(queue *q,datatype oPara)
{
     node *p;
     p=(node*)malloc(sizeof(node));
     p->info=oPara;
     p->next=NULL;
     if(q->front==NULL)
     {
      printf("empty");                  
     }
     else
     {
      q->rear->next=p;
      q->rear=p;
     }
     return q;  
      
      
}
void printqueue(queue *q)
{
node *p;
p=q->front;
if(!p)
{
  printf("empty");      
}
else
{
while(p)
{
  printf("%d",p->info);p=p->next;        
}     
}
     
     
}

/*node *push(node *top,datatype oPara)
{
        node *p;
        p=(node*)malloc(sizeof(node));
        p->info=oPara;
        p->next=top;
        top=p;
        return top;


}

void printstack(node *top)
{
        node *p;
        p=top;
        if(!p)printf("empty");
        else{
        while(p){printf("%d",p->info);p=p->next;}
        }
}

void convertint(datatype oPara)
{
        node *top=NULL;
        while(oPara!=0)
        {
                top=push(top,oPara%2);
                oPara=oPara/2;
        }
    printstack(top);

}*/
void convertfloat(float oPara)
{
queue *q=initqueue();
while(oPara!=0.0)
{
  q=insert(q,(int)(oPara*2));
  oPara=oPara*2;
  oPara=oPara-(int)oPara;               
}
printqueue(q);
     
     
     
     
     
}
int main()
{

       
//convertint(5);
    convertfloat(0.1);getchar();



}

走一圈 发表于 2008-5-12 23:14

void main()
{

   
//convertint(5);
   convertfloat(0.1); getchar();




}
这样写就没出现错误了  不过结果,,,,,,,.
我复制过去编译的时候也出现了错误 你的程序我在看 好多看的慢[tk01]

[[it] 本帖最后由 走一圈 于 2008-5-12 23:21 编辑 [/it]]

dousao 发表于 2008-5-12 23:20

不是编译的错误,是运行的逻辑错误,不断的输出empty,我函数调用只是随便输入0.1测试一下。不知道哪里出错的

dousao 发表于 2008-5-12 23:50

线等,急~~高人解答

StarWing83 发表于 2008-5-13 10:34

询问一下LZ:十进制小数转二进制的原理是啥?

mqh21364 发表于 2008-5-13 10:39

好像是你从来不曾改变那个front指针吧!!!

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.