代码未编译

时间:2011-02-14 17:18:23

标签: c data-structures

#include<stdio.h>
#include<math.h>
void insert(int *,int);

int main(int argc, char argv[])
{
    int tree[1000];

    memset(tree,'\0',1000);
    int i=1;

    while (!argv[i])
    {   
        insert(tree,atoi(argv[i]));
    }
    int depth=0;
    printf("Enter depth");
    scanf("%d",&depth);

    int x=pow(2,depth);
    int y=2x-1;
    int count=0;
    for(;x<=y;x++)
    {
        if((tree[x]!=NULL) && (tree[2x+1]==NULL) && (tree[2x]==NULL))
        {
            count++;
        }
    }

    printf("Number of leaf nodes is %d", count);
}

void insert(int *tree,int gmail)
{
    int i=1;

    if(tree[i]==NULL)
    {
        tree[i]=gmail;
    }
    else
    {
        if(gmail>tree[i])
        {
            insert(tree[2i+1],gmail);
        }
        else
            insert(tree[2i],gmail);
    }
}

6 个答案:

答案 0 :(得分:4)

你不能只写这个:

insert(tree[2i+1],gmail);

您需要明确提供乘法运算,即:[2*i+1][2*i]

另外,由于tree[2*i0]int,而不是int*,您需要它的地址:

insert(&(tree[2*i+1]),gmail);

insert(&(tree[2*i]),gmail);

或者,您可以使用:

insert(tree + (2*i), gmail);

另一个错误是pow来电。 pow返回一个double值,而不是int,因此您需要转换回int:

 int x = (int) pow(2.0, depth);

答案 1 :(得分:1)

一旦你开始编译,你就想解决这个问题:

while (!argv[i])
{   
    insert(tree,atoi(argv[i]));
}

这将是1)根本不执行,或2)给出无限循环。另外,if (!argv[1])相当于if (argv[i] == NULL),所以如果只有没有值可供读取,那么你正试图读取一个值。

答案 2 :(得分:1)

#include<stdio.h> 
#include<math.h> 
void insert(int *,int); 
int main(int argc, char argv[]) 
{
   int tree[1000];    
   memset(tree,'\0',1000);    
   int i=1;      
   while (!argv[i])     
   {    
       insert(tree,atoi(argv[i]));   
   }    
   int depth=0;  
   printf("Enter depth");  
   scanf("%d",&depth);     
   int x=pow(2.0,depth); 
   int y=2*x-1;    
   int count=0;
   for(;x<=y;x++)
   {
       if((tree[x]!=NULL) && (tree[2*x+1]==NULL) && (tree[2*x]==NULL))   
       {
           count++;   
       }
   }
   printf("Number of leaf nodes is %d", count);

}

void insert(int *tree,int gmail)
{
   int i=1;
   if(tree[i]==NULL)
   {
       tree[i]=gmail;    
   }
   else 
   {
      if(gmail>tree[i])     
      {
          insert(tree,tree[2*i+1]);     
      }
      else
          insert(tree,tree[2*i]);   
  }

}

这段代码有效,只在我的编译器中memset函数无法识别 这个功能是什么?

答案 3 :(得分:0)

看起来您正在使用2i2x作为数组的下标。这与您使用它的方式无效。尝试将2i2 * i的{​​{1}}替换为2x

答案 4 :(得分:0)

2i+1无效。试试(2*i) + 1

答案 5 :(得分:0)

2i2x不是有效的表达式,您应该2*i2*x

下次发布不编译的行和一些解释时,它会更容易阅读..