回 帖 发 新 帖 刷新版面

主题:[讨论]高手帮我修改一下程序好吗?

我是个小菜鸟,熬了2天做个小程序,可是还不好使,所以请高手帮帮我,我做的是10进制和其他进制之间(10进制以下)的相互转换,可结果是 其他进制转换10进制好使,但是10进制转换10进制却不好用,输不出结果。 希望高手帮帮我好吗?  帮我改一下,谢谢了。
程序如下

#include <stdio.h>
#include "math.h"
typedef int datatype;
#define maxsize 64
typedef struct
{datatype data[maxsize];
int top;
}seqstack;
/*置空栈*/
setnull1(s)
seqstack *s;
{s->top=-1;
}
/*判栈空*/
int empty1(s)
seqstack *s;
{if(s->top>=0) return  0;
else return 1;
}
/*进栈*/
seqstack *push(s,x)
seqstack *s;
datatype x;
{if(s->top==maxsize-1) {printf("overflow!");return NULL;}
else
{s->top++;
s->data[s->top]=x;
}
return(s->data[s->top]);
}
/*退栈*/
datatype pop(s)
seqstack *s;
{if(empty1(s))
{printf("Underflow!");return NULL;}
else
{s->top--;
return(s->data[s->top+1]);}
}

typedef struct
{datatype data[maxsize];
int front,rear;
}sequeue;
/*置队空*/
setnull2(sq)
sequeue *sq;
{
sq->front=maxsize-1;
sq->rear=maxsize-1;
}
/*判队空*/
int empty2(sq)
sequeue *sq;
{
if(sq->rear==sq->front)
return(1);
else return(0);
}
/*入队*/
int enqueue(sq,x)
sequeue *sq;
datatype x;
{
if(sq->front==(sq->rear+1)%maxsize)
{printf("Queue is full");return 0;}
else
{sq->rear=(sq->rear+1)%maxsize;
 sq->data[sq->rear]=x;return(1);
}
}
/*出队*/
datatype dequeue(sq)
sequeue *sq;
{if(empty2(sq))
{printf("Queue is empty!"); return NULL;}
else
{sq->front=(sq->front+1)%maxsize;
return(sq->data[sq->front]);
}
}
converse1(N,d)    /*十进制数向任意小于十进制数的转换,N为整数*/
long int N;
int d;
{int e;
seqstack *s;
setnull1(s);
while(N)
{push(s,N%d);
N=N/d;}
while(!empty1(s))
{e=pop(s);
}
}
/*empty1(s);
s->top=0;
while(N!=0)
{s->data[s->top++]=N%d;
N=N/d;
}
while(s->top!=0)
{e=s->data[s->top-1];
printf("%d",e);
s->top--;
}
} */
converse2(N2,d) /*N2为小数部分,d为待转换的进制数*/
float N2;
int d;
{sequeue *sq;
int i=0,c,f;
float b=N2;
setnull2(sq); /*例如0.3转换成二进制为0.3*2=0.6;取0 \ 0.6*2=1.2;取1
        0.2*2=0.4;取0 \ 只取三位*/
while(i<3)
{b=b*d;
 f=(int)b;
 enqueue(sq,f); i++;
 if(b>=d-1)  b=b-f;
 continue;
 }
while(!empty2(sq))
{c=dequeue(sq);
printf("%d",c);}
}

converse3(N,d) /*任意小于十进制(取整数部分)向十进制转换*/
long int N;
int d;
/*int N,d;*/
{seqstack *s;
int i=-1,b,e;
float S=0;
setnull1(s);
while(N)
{b=N%10;
push(s,b);
i++;
if(N>=10)
{N=N/10;continue;}
N=0;
}
while(!empty1(s))
{e=pop(s);
S=S+e*pow(d,i);
i--;
}
return(S);
}
float converse4(N,d) /*任意小于十进制的小数部分向十进制转换*/
int N;
int d;
{sequeue *sq;
int i=-3,b,e;
float S=0;
printf("\nN=%d",N);
setnull2(sq);
while(N)
{b=N%10;
enqueue(sq,b);
N=N/10;
}
while(!empty2(sq))
{e=dequeue(sq);
printf("  #%d",e);
S=S+e*pow(d,i);
i++;
}
return(S);
}

main()
{seqstack *s;
long int N1;
int x,N3,d;
float N,N2,result,a,b;
clrscr();
printf("第一种情况为十进制与十以内进制数的转换!the first case is 10 to any number under 10 convert\n");
printf("第二种情况为十以内进制数与十进制数的转换!the second case is any number under 10 to 10 convert\n");
printf("input the case please input 1 or 2");
scanf("%d",&x);
switch(x)
{
case 1 : printf("\n十进制数与十以内进制数的转换 convert 10 to the number under 10 ");
break;
case 2 : printf("\十以内进制数与十进制数的转换convert any number under 10 to 10");
break;
default : ;
}
if(x==1)
printf("\n请输入要将十进制数转换为何种进制数10 to ? convert:");
else  printf("\n请输入要将何种进制数转换为十进制数? to 10 convert:");
scanf("%d",&d);
printf("\n请输入待转换的数input the number which you want to convert");
printf("(请在小数点后输入三位数)please input three number behand the counter:");
scanf("%f",&N);
N1=(int)N;
N2=N-N1;
printf("N2=%f",N2);
if(x==1)               /*十进制数向十以内任意进制数的转换*/
  {if(N2==0)                /*N为整数*/
   {printf("\n结果为end is:");
   converse1(N1,d);}
   else                       /*N为小数 */
    {
      printf("结果为:end is ");
      converse1(N1,d);
      printf(".");
      converse2(N2,d) ;}
     }
else if(x==2)                 /*十以内任意进制数向十进制的转换*/
 {if(N1==0)                    /*N为整数*/
   {result=converse3(N,d);
    printf("\n结果为end is:%f",result);}
  else                         /*N为小数*/
  {N2=N2*1000;
   N3=(int)N2;
   a=converse3(N1,d);
   b=converse4(N3,d);
   result=a+b;
   printf("\n结果为end is: %f",result);}
 }
getch();
}



回复列表 (共1个回复)

沙发

这是10进制转换为8进制 程序是对的 你自己回去看一下 我用的是TC2.0
  #include <stdio.h>
  #define maxsize 15
  #define FALSE 0
  #define TURE 1
  typedef struct
     {  int data[maxsize];
    int top;
      }
     seqstack;
     seqstack *s,v;

    Initstack(s)
      seqstack *s;
       { s->top=-1;  }
    
    PUSH(s,x)
      seqstack *s;
      int x;
    { if(s->top>maxsize-1)
      printf("error");
      else
       { s->top++;
         s->data[s->top]=x;
       }
    }
      
     POP(s)
       seqstack *s;
    { int x;
      if(s->top==-1)
      return FALSE;
      else
        { x=s->data[s->top];
          s->top--;
          printf("%d",x);
        }
    }
       
     int Stackempty(s)
        seqstack *s;
     { if(s->top==-1)
            return TURE;
           else
            return FALSE;  }
     
     void conversion(s,n)
      seqstack *s;     
       { Initstack(s);
     while(n)
      { PUSH(s,n%8);
            n=n/8;   }
     while(!Stackempty(s))
          POP(s);    }
   
     main()
      { int i,n;
        s=&v;
        scanf("%d",&n);
        conversion(s,n);    }
   



我来回复

您尚未登录,请登录后再回复。点此登录或注册