C程序设计-Stern Brocot树路径查找器

C程序设计-Stern Brocot树路径查找器,c,path,while-loop,tree,finder,C,Path,While Loop,Tree,Finder,我正在学习C编程语言,在写树中所需元素的完整路径时遇到困难。 它只写出路径的第一个数字。 我已经把它设置为在左转时写出0,在右转时写出1。不管我选择什么数字,它可以是第3级或第15级,它仍然只写第一个数字 以下是while循环: while ((p1+p2!=p) && (q1+q2)!=q) { if ((p1+p2)/(q1+q2)<p/q) { printf("1 "); p1+=p2; q1+=q2;

我正在学习C编程语言,在写树中所需元素的完整路径时遇到困难。 它只写出路径的第一个数字。 我已经把它设置为在左转时写出0,在右转时写出1。不管我选择什么数字,它可以是第3级或第15级,它仍然只写第一个数字

以下是while循环:

while ((p1+p2!=p) && (q1+q2)!=q) {
    if ((p1+p2)/(q1+q2)<p/q) {
        printf("1 ");
        p1+=p2;
        q1+=q2;
    } else if (((p1+p2)/(q1+q2)>p/q)) {
        printf("0 ");
        p2+=p1;
        q2+=q1;
    }
}
while((p1+p2!=p)和&(q1+q2)!=q){
如果((p1+p2)/(q1+q2)p/q)){
printf(“0”);
p2+=p1;
q2+=q1;
}
}

因为您没有显示使用您正在使用的类型,所以我假设它们是整数。您在if语句中犯了一个错误,其中除法被四舍五入到最接近的整数,并且丢失了小数位数。一个快速修复方法是强制代码执行浮点除法,方法是将整数转换为双精度

int p = 3 ;
int q = 5 ;

int p1 = 0 ;
int p2 = 1 ;

int q1 = 1 ;
int q2 = 0 ;

while( p1+p2 != p  && q1+q2 != q )
{
    if (( p1+p2 )/( double )(q1+q2 ) < p/( double )q) 
    {
        printf("1 ");
        p1+=p2;
        q1+=q2;
    } 
    else if( ( p1+p2 ) / ( double )( q1+q2 ) > p/( double )q ) 
    {
        printf("0 ");
        p2+=p1;
        q2+=q1;
    }
}
int p=3;
int q=5;
int p1=0;
int p2=1;
int q1=1;
int q2=0;
而(p1+p2!=p&&q1+q2!=q)
{
如果((p1+p2)/(双)(q1+q2)

p/(双倍)q) { printf(“0”); p2+=p1; q2+=q1; } }


现在代码正确地打印出0,1,0。即左、右、左,以达到树中的3/5。

因为您没有显示使用您正在使用的类型,所以我假设它们是整数。您在if语句中犯了一个错误,其中除法被四舍五入到最接近的整数,并且丢失了小数位数。一个快速修复方法是强制代码执行浮点除法,方法是将整数转换为双精度

int p = 3 ;
int q = 5 ;

int p1 = 0 ;
int p2 = 1 ;

int q1 = 1 ;
int q2 = 0 ;

while( p1+p2 != p  && q1+q2 != q )
{
    if (( p1+p2 )/( double )(q1+q2 ) < p/( double )q) 
    {
        printf("1 ");
        p1+=p2;
        q1+=q2;
    } 
    else if( ( p1+p2 ) / ( double )( q1+q2 ) > p/( double )q ) 
    {
        printf("0 ");
        p2+=p1;
        q2+=q1;
    }
}
int p=3;
int q=5;
int p1=0;
int p2=1;
int q1=1;
int q2=0;
而(p1+p2!=p&&q1+q2!=q)
{
如果((p1+p2)/(双)(q1+q2)

p/(双倍)q) { printf(“0”); p2+=p1; q2+=q1; } }


现在代码正确地打印出0,1,0。即左、右、左,以达到树中的3/5。

我忘记添加:初始p1和p2是数字,q1和q2是分母。p1/q1,p2/q2。初始值:p1=q2=0和p2=q1=1。p/q是我们正在寻找的给定分数,您正在进行整数比较。我不确定这是否是你想要的。另外,你能给我们看一下代码的其余部分吗?我忘了添加:初始p1和p2是数字,q1和q2是分母。p1/q1,p2/q2。初始值:p1=q2=0和p2=q1=1。p/q是我们正在寻找的给定分数,您正在进行整数比较。我不确定这是否是你想要的。另外,你能给我们看一下其余的代码吗?