2016-05-11 3 views
1

Я не уверен, если бы я был глупым, но все же ... Я хочу разработать программу, используя связанный список, где я мог бы добавить до 5 полиномов. Код, который я мог придумать это ..N-многочленное добавление не работает

struct node 
{ 
    int exp,coeff; 
    struct node *next; 
} *start[5]={NULL}; 

void read() 
{ 
    struct node *current,*newnode; 
    int n,i,max,j; 
    printf("How many poly?"); 
    scanf("%d",&n); 
    for(i=0;i<n;i++) 
    { 
     printf("\nDetails of poly %d\n",i); 
     printf("Max degree:"); 
     scanf("%d",&max); 
     for(j=max;j>=0;j--) 
     { 
      newnode=(struct node *)malloc(sizeof(newnode)); 
      printf("\nEnter coeff of %d:",j); 
      scanf("%d",&newnode->coeff); 
      newnode->exp=j; 
      if(start[i]==NULL) 
      { 
       printf("a%d",start[i]); 
       start[i]=newnode; 
       newnode->next=NULL; 
       printf("%d,%d",start[i],start[i]->next); 
      } 
      else if(start[i]->next==NULL) 
      { 
       printf("b"); 
       start[i]->next=newnode; 
       newnode->next=NULL; 
       printf("%d",start[i]); 
      } 
      else 
      { 
       printf("c"); 
       current=start[i]; 
       while(current->next!=NULL) 
        current=current->next; 
       current->next=newnode; 
       newnode->next=NULL; 
       printf("%d",start[i]); 
      } 
     } 
    } 
} 

void sum() 
{ 
    struct node *curr1,*curr2,*tmp; 
    int i,co,ex; 
    curr1=start[0]; 
    while(curr1!=NULL) 
    { 
     for(i=1;i<5;i++) 
     { 
      co=0; 
      if(curr1==start[i]) 
       tmp=start[i]; 
      else 
       tmp=tmp->next; 
      curr2=tmp; 
      if(curr1->exp==curr2->exp) 
      { 
       if(co==0) 
        co=co+curr1->coeff+curr2->coeff; 
       else 
        co=co+curr2->coeff; 
       ex=curr1->exp; 
       break; 
      } 
      else if(curr1->exp>curr2->exp) 
      { 
       ex=curr1->exp; 
       if(co==0) 
        co=co+curr1->coeff; 
       else 
        break; 
      } 
      else 
      { 
       ex=curr2->exp; 
       if(co==0) 
        co=co+curr2->coeff; 
       else 
        break; 
      } 
     } 
     printf("%dX^%d",co,ex); 
     curr1=curr1->next; 
    } 
} 

int main() 
{ 
    read(); 
    printf("result:\n"); 
    sum(); 
    getch(); 
    return 0; 
} 

Но на выполнении только первый полином становится read.ie, «я» цикл работы только один раз. Я попытался проверить свою функцию чтения и обратите внимание на второе условие не было working.ie, это одно:

else if(start[i]->next==NULL)  
{ 
    printf("b"); 
    start[i]->next=newnode; 
    newnode->next=NULL; 
    printf("%d",start[i]); 
} 

, что печать б было проверить, если программа вошел в этот блок LOL. Кто-то помочь мне с этим, пожалуйста ...

+0

Debugger .................. –

+0

Unrelated: В SO пространства приходят довольно дешево, использовать их – 4386427

+1

@ 4386427 Spacesareincriiticalshortage.Usetabswheneverpossible , Togetherwecanmakeitththisdifficulttime. ;-) – chux

ответ

1

Эта часть

newnode=(struct node *)malloc(sizeof(newnode)); // This will allocate space for 
               // a pointer to struct node 

должен быть

newnode=(struct node *)malloc(sizeof(struct node)); // This will allocate space for 
                // a struct node 

или лучше, как было предложено @chux

newnode = malloc(sizeof *newnode);   // This will allocate space for 
              // whatever newnode points to. In 
              // this case a struct node 

Не уверен, что он делает разница, но я бы изменил:

start[5]={NULL}; 

в

start[5]={NULL, NULL, NULL, NULL, NULL}; 
+1

Рекомендуем 'newnode = malloc (sizeof * newnode);' – chux

+0

@chux - ответ обновлен – 4386427

Смежные вопросы