2016-05-11 21 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]); 
} 

打印B爲檢查程序輸入該塊LOL。 有人能幫我解決這個請...

+0

調試器.................. –

+0

無關:在SO空間來相當便宜,使用起來 – 4386427

+1

@ 4386427 Spacesareincriiticalshortage.Usetabswheneverpossible 。 Together-可以通過這個困難時間進行創建;-) – 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 - Answer updated – 4386427