日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

五、一元多项式相加

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 五、一元多项式相加 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

五、一元多項式相加

文章目錄

  • 五、一元多項式相加
    • 題目描述
    • 解題思路
    • 上機代碼

題目描述

編寫一元多項式加法運算程序。要求用線性鏈表存儲一元多項式(參照課本)。該程序有以下幾個功能:

1、多項式求和

  • 輸入:輸入三個多項式,建立三個多項式鏈表Pa、Pb、Pc

(提示:調用CreatePolyn(polynomial &P,int m)。

  • 輸出:顯示三個輸入多項式Pa、Pb、Pc、和多項式Pa+Pb、多項式Pa+Pb+Pc

(提示:調用AddPolyn(polynomial &Pa, polynomial Pb), 調用PrintPolyn(polynomial P))。

0、退出

輸入

根據所選功能的不同,輸入格式要求如下所示(第一個數據是功能選擇編號,參見測試用例):

  • 1

    • 多項式A包含的項數,以指數遞增的順序輸入多項式A各項的系數(整數)、指數(整數)
    • 多項式B包含的項數,以指數遞增的順序輸入多項式B各項的系數(整數)、指數(整數)
    • 多項式C包含的項數,以指數遞增的順序輸入多項式C各項的系數(整數)、指數(整數)
  • 0

    • 操作終止,退出。

輸出

對應一組輸入,輸出一次操作的結果(參見測試用例)。

  • 1

    多項式輸出格式:以指數遞增的順序輸出: <系數,指數>,<系數,指數>,<系數,指數>,參見測試用例。零多項式的輸出格式為<0,0>

  • 0

    無輸出

測試輸入期待的輸出時間限制內存限制額外進程
測試用例 11
2
1 1 2 2
2
1 1 2 2
2
1 1 2 2
<1,1>,<2,2>
<1,1>,<2,2>
<1,1>,<2,2>
<2,1>,<4,2>
< 3,1>,<6,2>
1秒1024KB0
測試用例 21
2
6 3 8 6
2
3 4 4 8
3
1 1 5 5 9 9
<6,3>,<8,6>
< 3,4>,<4,8>
<1,1>,<5,5>,<9,9>
<6,3>,< 3,4>,<8,6>,<4,8>
<1,1>,<6,3>,< 3,4>,<5,5>,<8,6>,<4,8>,<9,9>
1秒1024KB0
測試用例 31
2
1 1 2 2
2
-1 1 -2 2
2
1 1 2 2
<1,1>,<2,2>
<-1,1>,<-2,2>
<1,1>,<2,2>
<0,0>
<1,1>,<2,2>
1秒1024KB0

解題思路

教材上的解法挺好,就是顯得比較麻煩,需要調用的函數較多。這里我們采用鏈表的方式進行求解,實現三個函數即可:

  • 構造多項式create()
  • 多項式相加add()
  • 打印多項式print()

其中多項式相加是核心,因為輸入是按指數遞增的順序,所以我們只需要分三種情況進行討論,直接求和就好。若某一個鏈表較長,還需要單獨遍歷后續結點。

還有一個要注意的點就是,零多項式的輸出是<0,0>,對于零多項式也需要建立結點

上機代碼

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct node {int ax, ex;//系數、指數struct node *next; }LinkNode, *LinkList;LinkList create(int);//構造多項式 LinkList add(LinkList, LinkList);//多項式相加 void print(LinkList);//打印多項式int main() {int T = 1;scanf("%d", &T);//0為假,1為真if(T){LinkList head1, head2, head3, p;//構造多項式int n=0;scanf("%d", &n);head1 = create(n);print(head1);scanf("%d", &n);head2 = create(n);print(head2);scanf("%d", &n);head3 = create(n);print(head3);//多項式相加并輸出p = add(head1, head2);print(p);p = add(p, head3);print(p);} return 0; }LinkList create(int n) {LinkList head, q;int ax=0, ex=0;//初始化頭結點head = (LinkList)malloc(sizeof(LinkNode));head->next=NULL;q = head;while(n--){scanf("%d%d", &ax, &ex);//尾插法建立鏈表LinkList p = (LinkList)malloc(sizeof(LinkNode));p->ax = ax;p->ex = ex;p->next = NULL;q->next = p;q = p;}//如果沒有輸入則置0if(q == head){LinkList p = (LinkList)malloc(sizeof(LinkNode));p->ax = 0;p->ex = 0;p->next = NULL;q->next = p;q = p;}return head; }LinkList add(LinkList head1, LinkList head2) {/* 鏈表 head3 = head1 + head2 *///初始化頭結點LinkList head3, ans;head3 = (LinkList)malloc(sizeof(LinkNode));head3->next = NULL;ans = head3;LinkList p, q;p = head1->next;q= head2->next;/* 因為輸入按指數遞增的順序,直接開始求和即可, 分為三種情況討論:1. p指數小于q2. p指數大于q3. p指數等于q*/while(p != NULL && q != NULL){if(p->ex < q->ex)//p指數小于q{if(p->ax)//系數不為0才進行操作{//尾插法LinkList s = (LinkList)malloc(sizeof(LinkNode));s->ax = p->ax;s->ex = p->ex;s->next = NULL;ans->next = s;ans = s;}p = p->next;}else if(p->ex > q->ex)//p指數大于q{if(q->ax){LinkList s = (LinkList)malloc(sizeof(LinkNode));s->ax = q->ax;s->ex = q->ex;s->next = NULL;ans->next = s;ans = s;}q = q->next;}else//p指數等于q{if(p->ax + q->ax)//系數求和不為0才進行操作{LinkList s = (LinkList)malloc(sizeof(LinkNode));s->ax = p->ax + q->ax;s->ex = p->ex;s->next = NULL;ans->next = s;ans = s;}p = p->next;q = q->next;}}//如果某一個鏈表較長,則需要單獨遍歷while(p != NULL){if(p->ax){LinkList s = (LinkList)malloc(sizeof(LinkNode));s->ax = p->ax;s->ex = p->ex;s->next = NULL;ans->next = s;ans = s;}p = p->next;}while(q != NULL){if(q->ax){LinkList s = (LinkList)malloc(sizeof(LinkNode));s->ax = q->ax;s->ex = q->ex;s->next = NULL;ans->next = s;ans = s;}q = q->next;}//如果求和的結果為0則置0if(ans == head3){LinkList s = (LinkList)malloc(sizeof(LinkNode));s->ax = 0;s->ex = 0;s->next = NULL;ans->next = s;ans = s;}return head3; }void print(LinkList p) {p = p->next;//越過頭結點while(p->next != NULL){printf("<%d,%d>,", p->ax, p->ex);p = p->next;}printf("<%d,%d>\n", p->ax, p->ex);//最后一個結點 }

總結

以上是生活随笔為你收集整理的五、一元多项式相加的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。