A. C++設計:一元多項式相加
#include<iostream.h>
#include<malloc.h>
#define len sizeof(LNode)
typedef struct Lnode             //結點結構聲明
{       int nf;                  // 多項式系數
	int   ne;                  //多項式冪指數
	struct LNode *next;
 }LNode;
typedef LNode *Pol;
LNode *creat(void)              //創建多項式函數
{ LNode *head,*q;
  LNode *n;
  head=q=n=(LNode *)malloc(len);
  q->next=NULL;
  do{n=(LNode *)malloc(len);
       cin>>n->ne>>n->nf;
       q->next=n;
       q=n;}while(n->nf!=0||n->ne!=0);
    q->next=NULL;
   return head;}
 
LNode *output(LNode *head)  //輸出多項式的函數
{LNode *p;
  p=head->next;int n=0;
  if(p->nf==0&&p->ne==0) {cout<<"0";return 0;}
  else do{if(p->nf!=0)
	    {if(n==0)
	      {if(p->ne==0) {cout<<p->nf;break;}
	      else{cout<<p->nf<<"X"<<p->ne;n++;p=p->next;}}
	     else {if(p->ne==0) {if(p->nf<0)cout<<p->nf;else cout<<"+"<<p->nf;break;}
		   else if(p->nf<0) {cout<<p->nf<<"X"<<p->ne;p=p->next;}
		       else {cout<<"+"<<p->nf<<"X"<<p->ne;p=p->next;}}}
	  else p=p->next;}while(p->nf!=0||p->ne!=0);
if(n==0&&p->nf==0&&p->ne==0) {cout<<"0";return 0;}
 return 0;}
LNode * add(Pol &Pa,Pol &Pb)//兩個多項式相加的函數
{LNode *p1,*p2,*p,*pr,*p0;
p1=Pa->next;p2=Pb->next;
p0=pr=Pa;
while(p1->next!=NULL||p2->next!=NULL)
{if(p1->ne>p2->ne)
 {pr=p1;p1=p1->next;}
   else if(p1->ne==p2->ne)
        {p1->nf=p1->nf+p2->nf;p2=p2->next;}
          else {pr->next=p2;p2=p2->next; pr=pr->next;pr->next=p1;}
  if(p1->ne==0&&p2->next==NULL) break;}
p1->next=p2;
return p0;
}
void main()//主函數
{char y;
for(;;){Pol p1,p2,p3;
cout<<"input ha"<<endl;
  p1=creat();      //建立多項式HA
cout<<"input hb"<<endl;
  p2=creat();      //建立多項式HB
  cout<<"ha=";*output(p1);cout<<endl;//輸出多項式HA
  cout<<"hb=";*output(p2);cout<<endl; //輸出多項式HB
  p3=add(p1,p2);  //多項式HA與HB相加
  cout<<"ha+hb=";*output(p3);cout<<endl; 輸出多項式HC
 cout<<"ARE YOU CONTINUE?(Y|N)"<<endl;
 cin>>y;
if(y=='n') break;}
B. 「一元多項式的表示和相加」數據結構,相關疑問
不會的,因為每個鏈表每個節點都是一個指針結構
DelFirst()函數是刪除當前鏈表元素。
舉個例子
鏈表節點的定義:
struct node
{
  int val;
  node *next;
};
int DeleteElement(node **head, node *deleteMe)
{
    node *elem = *head;
    if (deleteMe == *head)
    {
        *head = elem -> next;
        free(deleteMe);
        return 1;
    }
    while (elem != NULL)
    {
        if (elem -> next == deleteMe)//不要誤寫為elem
        {
            elem -> next = deleteMe -> next;   //這里連接鏈表,鏈表不會斷開
            free(deleteMe);
            return 1;
        }
        elem = elem -> next;
    }
    return 0;
}
C. 一元多項式的相加
#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
typedef struct student
{
int coef;
int expn;
struct student *next;
}
plinknode;
plinknode *creat(void)
{
plinknode *head,*p1,*p2,*p3,*p4;
int m,n;
printf("gongyoujiedianshu:");
scanf("%d",&m);
p3=(plinknode *)malloc(sizeof(plinknode));
p3->coef=0;
p3->expn=-1;
p4=p3;
head=p3;
for(n=1;n<=m;n++)
{
p3=(plinknode *)malloc(sizeof(plinknode));
printf("shu,xishu:");
scanf("%d%d",&p3->coef,&p3->expn);
if(p4->expn<p3->expn)
{
p4->next=p3;
p3->next=NULL;
p4=p4->next;
}
else
{
p1=head;p2=p1->next;
while(p2)
{
if(p2->expn==p3->expn)
{
p2->coef=p2->coef+p3->coef;
free(p3);
if(p2->coef==0)
{
p1->next=p2->next;
free(p2);
if(p2->next==NULL)
{
p4=p1;
}
}
break;
}
if(p2->expn>p3->expn)
{
p1->next=p3;
p3->next=p2;
break;
}
p1=p1->next;
p2=p2->next;
}
}
}
return (head);
}
void print(plinknode *p) 
{
plinknode *head;
head=p;
printf("shuchude shi:");
do
{
printf("%d%d\n",head->coef,head->expn);
head=head->next;
}while(head!=NULL);
}
plinknode *add(plinknode *a,plinknode *b)
{
plinknode *head,*p1,*p2,*p3,*p4;
p1=a;
head=a;
p3=b->next;
do
{
p2=p1->next;
if(p2->expn>p3->expn)
{
p1->next=p3;
p4=p3->next;
p3->next=p2;
p3=p4;
p1=p1->next;
}
else if(p2->expn==p3->expn)
{
p2->coef=p3->coef+p2->coef;
if(p2->coef==0)
{
p1->next==p2->next;
free(p2);
p4=p3->next;
free(p3);
p3=p4;
}
else
{
p1=p1->next;
p4=p3->next;
free(p3);
p3=p4;
}
}
else
p1=p1->next;
}while(p1->next!=NULL&&p3!=NULL);
if(p3!=NULL)
{
p2->next=p3;
}
return (head);
}
void main()
{
plinknode *h1,*h2,*h3;
h1=creat();
print(h1);
h2=creat();
print(h2);
h3=add(h1,h2);
print(h3);
}
可以運行,希望對你有幫助
D. 3. 一元多項式的表示和相加(鏈表,建立,相加,輸出)
用鏈表的網上有,給你個鏈接,但是正確性我不能保證:
http://..com/question/80603134.html
再給你一個用數組的程序,這個我已在win-tc下調試通過。 
/* 
本題的一個完整的c程序如下,在win-tc和Dev-c++下調試通過。 
需要說明的是這里的m,n表示x的冪分別是m-1次和n-1次, 
同時p[]和q[]的各系數是從x^(m-1)和x^(n-1)到x^0前的系數, 
比如px=3x^3+2x+1,qx=x^2-11x+3,那麼m=4,n=3,px和qx的系數分別為 
3,0,2,1和1,-11,3 
*/ 
/*多項式加法程序*/ 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#define MAX 50 
void npadd(double p[],int m,double q[],int n,double s[]) 
{ 
int i,j; 
for(i=0;i<m-n;i++) 
s[i]=p[i]; /*計算各項系數*/ 
for (i=m-n,j=0; i<=m-1; i++,j++) 
s[i]=p[i]+q[j]; /*計算各項系數*/ 
return; 
} 
double compute(double s[],int k,double x) /*計算所給多項式的值*/ 
{ 
int i; 
double multip = 1,sum = 0; 
for (i=0;i<k-1;i++) 
multip = multip * x; /*先求出x的最高次項的值*/ 
for (i=0;i<=k-1;i++) 
{ 
sum = sum + s[i] * multip; /*依次從高到低求出相對應次項的值*/ 
if (x!=0) 
multip = multip / x; 
} 
return sum; 
} 
int main() 
{ 
int i,j,m,n; 
double px[MAX],qx[MAX],rx[MAX],x; 
system("cls"); 
for(i=0;i<MAX;i++) 
rx[i]=0; 
puts("Please input two polynomials one by one"); 
puts("P(x)=Pm-1*x^(m-1)+Pm-2*x^(m-2)+...+P1*x+P0"); 
puts("Q(x)=Qn-1*x^(n-1)+Qn-2*x^(n-2)+...+Q1*x+Q0"); 
printf("\nPlease input m (>=1): "); 
scanf("%d",&m); 
printf("Please input P%d, ... P0 one by one:\n",m-1); 
for(i=0;i<m;i++) 
scanf("%lf",&px[i]); 
printf("\nPlease input n (1=<n<=m): ");/* 為簡化程序設冪次數低的後輸入 */ 
scanf("%d",&n); 
printf("Please input Q%d, ... Q0 one by one:\n",n-1); 
for(i=0;i<n;i++) 
scanf("%lf",&qx[i]); 
npadd(px,m,qx,n,rx); 
printf("\nThe addition of two polynomials R(x) is :\n"); 
for (i=m,j=0;i>=1;i--) /*逐行逐項列印出結果多項式*/ 
{ 
printf(" (%f*x^%d) ",rx[m-i],i-1); 
if(i-1>0) 
printf(" + "); 
else 
printf(" . "); 
if(j==2) 
{ 
printf("\n"); 
j=0; 
} 
else 
j++; 
} 
printf("\n"); 
printf("Input the value of x: "); 
scanf("%lf",&x); 
printf("\nThe value of the R(%f) is: %13.7f\n",x,compute(rx,m,x)); 
system("pause"); 
return 0; 
} 
用數組表示的相乘的地址如下: 
http://..com/question/76281392.html
E. 數據結構 一元多項式求導問題
你的測試數據為什麼是0 -1 -1啊?怎麼是三個參數啊?不是應該就兩個么?一個是系數一個是冪啊!
那這樣呢?
==============================================
#include <stdio.h>
#include <malloc.h>
typedef struct polynode
{
  int c;
  int e;
  struct polynode *next;
} poly;
poly *creatpoly()
{
  poly *p,  *q,  *h;
  q = NULL, h = NULL;
  int c;
  int e;
  while (e!=-1)
  {
    scanf("%d%d", &c, &e);          /*將scanf位置改變下*/
    h = (poly*)malloc(sizeof(poly));
    h->c = c;
    h->e = e;
    h->next = NULL;
    if (q == NULL)
      q = h;
    else
      p->next = h;
    p = h;
  }
  return q;
}
poly *qiu(poly *p)
{
  poly *s;
  s = p;
  while (p)
  {
    p->c = (p->c)*(p->e);
    p->e = (p->e) - 1;
    p = p->next;
  }
  return s;
}
void print(poly *p)
{
  int i = 0;
  if (p->e ==  - 1)
  {
    printf("0");
    i++;
  }
  {
    while (p->next != NULL)
    {
      if (p->c != 0)
      {
        printf("%d %d ", p->c, p->e);
        i++;
      }
      else
        ;
      p = p->next;
    }
    if (p->next == NULL)
    {
      if (p->c != 0 && p->e > -1)        /*加上約束條件p->e>-1*/
      {
        printf("%d %d ", p->c, p->e);
        i++;
      }
      else
        ;
    }
    if (i == 0)
      printf("0");
    printf("\n");
  }
}
int main()
{
  poly *d,  *h;
  d = creatpoly();
  h = qiu(d);
  print(h);
  getchar();
  getchar();
  return 0;
}
F. 數據結構,一元多項式的求和問題。
我寫的代碼寫成了兩個文件了,
這個是  多項式加法list.h
#include<malloc.h>
typedef struct node
{
   int coef;
   int exp;
   struct node *next;
}listnode;
void creat(listnode *&L)
{
   listnode *p,*q;
   int coef,exp;
   L=(listnode*)malloc(sizeof(listnode));
   p=L;
 
   while(scanf("%d%d",&coef,&exp)==2&&exp>=0)
   {
     q=(listnode*)malloc(sizeof(listnode));
	q->coef=coef;
	q->exp=exp;
	p->next=q;
	p=q;
   }
   p->next=NULL;
}
void print(listnode *L)
{
	listnode *p;
	p=L->next;
   while(p!=NULL)
   {
     if(p->coef!=0)
	{
       printf("[ %d %d ] ",p->coef,p->exp);
	}
	p=p->next;
   }
   printf("\n");
}
void hebing(listnode*&L1,listnode *&L2)
{
   listnode *temp=L1;
   while(temp->next!=NULL)
   {
     temp=temp->next;
   }
   if(L2->next!=NULL)
   {
     temp->next=L2->next;
   }
}
void destroy(listnode *&L)
{
  listnode *p=L,*q=L->next;
  while(q!=NULL)
  {
    free(p);
    p=q;
	q=p->next;
  }
  free(p);
}
void sortadd(listnode *&L)
{
   listnode *p,*q,*pre;
   p=L->next->next;
   L->next->next=NULL;
   while(p!=NULL)
   {
      q=p->next;
	 pre=L;
	 while( pre->next!=NULL && pre->next->exp>p->exp )
	 {
         pre=pre->next;
	 }
      if(pre->next!=NULL&&pre->next->exp==p->exp)
	 {
         pre->next->coef+=p->coef;
		free(p);
         p=q;
	 }
	 else
	 {
         p->next=pre->next;
		pre->next=p;
		p=q;
	 }
   }
}
還有個   多項式加法main
#include<stdio.h>
#include<malloc.h>
#include "list.h"
int main()
{
  listnode *L1=NULL;
  listnode *L2=NULL;
  int i,n;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
   creat(L1);
   creat(L2);
   hebing(L1,L2);
   sortadd(L1);
   print(L1);
 }
  return 0;
}
望採納謝謝
