一元多項式計算器 C 實現

2021-10-06 01:59:47 字數 3230 閱讀 9118

1、任務描述

設有一元多項式am(x)和bn(x),程式設計實現多項式am(x)和bn(x)的加法、減法和乘法運算。其中多項式描述為:

am(x)=a0+a1x1+a2x2+a3x3+….+amxm;

bn(x)=b0+b1x1+b2x2+b3x3+….+bnxn。

2、主要資料型別與變數

使用到的標頭檔案

#include 

#include

//c++的基本函式庫

#include

#include

//隨機時間生成測試資料使用

using namespace std;

多項式節點定義

typedef struct polynode *polynomial;

//該節點指標型別

struct polynode

;3、演算法或程式模組

函式介面的定義

/**函式介面定義**/

polynomial readpoly()

;//讀入多項式

void

attach

( int c, int e, polynomial *prear )

;//連線節點

polynomial add

( polynomial p1

, polynomial p2);

//加法計算

polynomial mult

( polynomial p1

, polynomial p2);

//乘法計算

polynomial createpolynomial()

;//建立節點型別的空間,初始化用

polynomial readsubpoly()

;//減法計算

void

fallprintpoly

( polynomial p);

//按指數降序輸出多項式

void

upprintpoly

( polynomial p);

//按指數公升序序輸出多項式

void

reverselist

(polynomial p);

//翻轉無頭鍊錶 ,不同順序輸出使用

polynomial readpolyrandom()

;//隨機生成測試資料

核心函式解釋

該函式重複使用率極高,所以用乙個函式來構造,方便後面的程式直接呼叫返回乙個有空間的多項式節點

/** * 建立節點並分配記憶體空間

* @return polynomial

*/polynomial createpolynomial()

}/**

* 隨機生成多項式

* @return 返回乙個polynomial型別的鍊錶

*/polynomial readpolyrandom()

t=p;

p=p-

>link;

free

(t);

//刪除臨時生成的頭結點

cout<<

"---生成的多項式為---"

);returnp;

}翻轉無頭鍊錶,為了逆序輸出,這裡要注意翻轉鍊錶本身,還不是返回乙個鍊錶,所以要傳多項式位址作為引數

/** * 翻轉鍊錶

* @param *p 為指標,因為要修改記憶體中此鍊錶的順序,所以要傳引用,而不是傳值

*/void

reverselist

(polynomial *p)

*p= reversp-

>link;

//指向已翻轉鍊錶的第乙個資料

}加法:兩個多項式從頭同時比較,如果指數相等,就相加係數,且係數不為零就加入到要返回的鍊錶p上,兩個節點同時後移。

如果指數大的,就插入鍊錶,且該大的節點後移一位。否則相反節點進行同樣操作。

polynomial add

( polynomial p1

, polynomial p2

) t1=t1-

>link; t2=t2-

>link;

}else

if(t1-

>expon > t2-

>expon)

else

}while

(t1)

while

(t2)

returnp-

>link;

//返回多項式的第乙個非零項

}減法:因為有了加法的定義,所以只需要在讀入的時候處理一下節點係數的符號就可完成減法的功能。

/** * 減法讀入,為了實現減法

* @return 返回多項式的減數

*/polynomial readsubpoly()

t=p;

p=p-

>link;

free

(t);

//刪除臨時生成的頭結點

returnp;

}乘法:首先要在迴圈外初十結果多項式

轉換為加法計算,指數相加,係數相乘,然後將結果通過attach函式連線到要返回鍊錶的尾部。

將p1當前項

(c1i,e1i)乘p2當前項(c2i,e2i)

,並插入到結果多項式

因為有點長,展示這個是核心的**

while

(t1)

//判斷兩個指數相同時,係數不為0的話,就相加,否則鍊錶往後移動

if(rear-

>link && rear-

>link-

>expon == e)

else

}else

t2 = t2-

>link;

} t1 = t1-

>link;

}主程式main函式的定義

int main()

}}三、測試

1、方案

主程式進來的介面

通過選擇4通過隨機函式輸入多項式,進行運算a=

912,3

10,88

b=812,610,

88,9

6,44

,12,

10通過選擇3手動輸入生成多項式,相減3a

=46 ,7

5, 422

b=76, 4

42、結果

結果正確

多項式相減:

答案正確

一元多項式加法計算器

include include typedef struct polynode polynode,polylist 輸入資料,邊輸入邊排序進鍊表 void inputdataandsortingdata polylist polynomial,int n 初始化多項式鍊錶 void init pol...

一元稀疏多項式計算器

實驗 一元稀疏多項式計算器 一 實驗目的 1.了解線性表的鏈式儲存結構,熟練掌握鍊錶。2.了解作為鍊錶的多項式存貯方式。3.熟悉掌握多項式加法的演算法。二 實驗原理 順序儲存的線性表有一些弱點,其一,插入與刪除元素需要大量移動元素 其二,預先分配儲存空間時必須按最大的空間來分配。其三,表長難以擴充。...

一元稀疏多項式計算器(加減)

思路 1.首先是建立鍊錶,再儲存資料。2.進行多項式的運算。通過每一項的比較,判斷指數是否相等,相等就進行合併,不相等就不操作並找到下一項。這道題主要是考察了鍊錶的操作,估計很多人都會被繞暈了,不知道指標指向了 我已開始也敗在了指向問題上,在加法操作中,把pa,pb鍊錶記憶體的資料元素全都改變了,又...