ychen4_13 2020-04-30 15:39 采纳率: 25%
浏览 487
已结题

一元多项式加法和乘法的链表实现

02-线性结构2 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和。

输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。

输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0

我的答案是

#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode *PolyNomial;
struct PolyNode{
  int coef;
  int expon;
  PolyNomial link;
};
void Attach(int c,int e,PolyNomial* prear){
  PolyNomial P;
  P=(PolyNomial)malloc(sizeof(struct PolyNode));
  P->link=NULL;
  P->coef=c;
  P->expon=e;
  (*prear)->link=P;
  *prear=P;
}
PolyNomial Add(PolyNomial L1,PolyNomial L2){
  PolyNomial t1,t2,rear,p,front;
  p=(PolyNomial)malloc(sizeof(struct PolyNode));
  p->link=NULL;
  rear=p;
  front=rear;
  if(!L1||!L2)return NULL;
  t1=L1;
  t2=L2;
  while(t1!=NULL&&t2!=NULL){
    if(t1->expon==t2->expon){
      int sum=t1->coef+t2->coef;
      Attach(sum,t1->expon,&rear);
      t1=t1->link;
      t2=t2->link;
    }
    else if(t1->expon<t2->expon){
      Attach(t1->coef,t1->expon,&rear);
      t1=t1->link;
    }
    else{
      Attach(t2->coef,t2->expon,&rear);
      t2=t2->link;
    }
  }
  while(t1){
    Attach(t1->coef,t1->expon,&rear);
    t1=t1->link;
  }
  while(t2){
     Attach(t2->coef,t2->expon,&rear);
     t2=t2->link;
  }
  return front;
}
PolyNomial Multi(PolyNomial L1,PolyNomial L2){
  PolyNomial t1,t2,rear,p,front,t;
  int c,e;
  p=(PolyNomial)malloc(sizeof(struct PolyNode));
  p->link=NULL;
  rear=p;
  front=rear;
  t1=L1;
  t2=L2;
  while(t2){
    Attach(t1->coef*t2->coef,t1->expon+t2->expon,&rear);
  }
  t1=t1->link;
  while(t1){
    t2=L2;
    rear=p;
    while(t2){
      c=t1->coef*t2->coef;
      e=t1->expon+t2->expon;
      while(rear->link&&rear->link->expon>e){
        rear=rear->link;
      }
      if(rear->link&&rear->link->expon==e){
        if(rear->link->coef+c){
          rear->link->coef+=c;
        }
        else{
          t=rear->link;
          rear=rear->link;
          free(t);
        }
      }
      else{
        t=(PolyNomial)malloc(sizeof(struct PolyNode));
        t->coef=c;
        t->expon=e;
        t->link=rear->link;
        rear->link=t;
        rear=rear->link;
      }
      t2=t2->link;
    }
    t1=t1->link;
  }
  return front;
}
PolyNomial ReadPoly(){
  PolyNomial P,rear,t;
  P=(PolyNomial)malloc(sizeof(struct PolyNode));
  P->link=NULL;
  rear=P;
  int n,c,e;
  scanf("%d",&n);
  while(n--){
    scanf("%d %d",&c,&e);
    Attach(c,e,&rear);
  }
  t=P;
  P=P->link;
  free(t);
  return P;
}
void PrintPoly(PolyNomial P){
  printf("%d %d",P->coef,P->expon);
  P=P->link;
  while(P){
    printf(" %d %d",P->coef,P->expon);
  }  
}
int main(){
  PolyNomial L1,L2,m1,m2;
  L1=ReadPoly();
  L2=ReadPoly();
  m1=Multi(L1,L2);
  PrintPoly(m1);
  m2=Add(L1,L2);
  PrintPoly(m2);
}

编译后报错为

a.cpp: In function ‘PolyNode* ReadPoly()’:
a.cpp:105:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&n);
                 ^
a.cpp:107:25: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d",&c,&e);

求大神指点为何scanf说返回值被忽视

  • 写回答

1条回答

  • 502203305 2020-04-30 16:03
    关注

    编译的时候加一个-w就行了。

    评论

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿