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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)