




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 一元多項式相加 實驗報告 一元多項式的相加 一 實驗內(nèi)容根據(jù)所學(xué)的數(shù)據(jù)結(jié)構(gòu)中線性結(jié)構(gòu)(線性表)的邏輯特性和物理特性及相關(guān)算法,應(yīng)用于求解一個具體的實際問題-兩個多項式相加二 需求分析1掌握線性結(jié)構(gòu)的邏輯特性和物理特性。2建立一元多項式。3將一元多項式輸入,并存儲在內(nèi)存中,并按照指數(shù)降序排列輸出多項式。4能夠完成兩個多項式的加減運算,并輸出結(jié)果。三 概要設(shè)計1 本程序所用到的抽象數(shù)據(jù)類型: typedef OrderedLinkList polynomial; / 用帶表頭結(jié)點的有序鏈表表示多項式結(jié)點的數(shù)據(jù)元素類型定義為:typedef struct / 項的表示 f
2、loat coef; / 系數(shù) int expn; / 指數(shù) term, ElemType; Void AddPolyn(polynomail&Pa,polynomail&Pb) Position GetHead() Position NextPos(LinkList L,Link p) Elem GetCurElem(Link p) int cmp(term a term b) Status SetCurElem(Link&p, ElemType e) Status DelFirst(Link h, Link &q) Status ListEmpty(Link
3、List L) Status Append(LinkList&L, Link S) FreeNode()2 存儲結(jié)構(gòu)一元多項式的表示在計算機內(nèi)用鏈表來實現(xiàn),同時為了節(jié)省存儲空間,只存儲其中非零的項,鏈表中的每個節(jié)點存放多項式的系數(shù)非零項。它包含三個域,分別存放多項式的系數(shù),指數(shù),以及指向下一個項的指針。序數(shù)coef指數(shù)exp指針域next創(chuàng)建一元多項式鏈表,對運算中可能出現(xiàn)的各種情況進(jìn)行分析,實現(xiàn)一元多項式的相加相減操作。3 模塊劃分a) 主程序;2)初始化單鏈表;3)建立單鏈表; 4)相加多項式4 主程序流程圖開始申請結(jié)點空間輸入多項式各項的系數(shù)X,指數(shù)Y輸出已輸出的多項式合并同類項
4、結(jié)束是否輸入正確 否四 詳細(xì)設(shè)計根據(jù)一元多項式相加的運算規(guī)則:對于兩個一元多項式中所有指數(shù)相同的項,對應(yīng)系數(shù)相加,若其和不為零,則構(gòu)成“和多項式”中的一項,對于兩個一元多項式中所有指數(shù)不相同的項,則分別復(fù)抄到“和多項式”中去。核心算法PolyAdd是把分別由pa和pb所指的兩個多項式相加,結(jié)果為pa所指的多項式。運算規(guī)則如下:相加時,首先設(shè)兩個指針變量qa和qb分別從多項式的首項開始掃描(見圖2-5-1),比較qa和qb所指結(jié)點指數(shù)域的值,可能出現(xiàn)下列三種情況之一:(1)qa->exp大于qb->exp,則qa繼續(xù)向后掃描。(2)qa->exp等于qb->exp,則將其
5、系數(shù)相加。若相加結(jié)果不為零,將結(jié)果放入qa->coef中,并刪除qb所指結(jié)點,否則同時刪除qa和qb所指結(jié)點。然后qa、qb繼續(xù)向后掃描。(3)qa->exp小于qb->exp,則將qb所指結(jié)點插入qa所指結(jié)點之前,然后qa、qb繼續(xù)向后掃描。掃描過程一直進(jìn)行到qa或qb有一個為空為止,然后將有剩余結(jié)點的鏈表接在結(jié)果表上。所得pa指向的鏈表即為兩個多項式之和。五 源程序代碼#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define NULL 0typedef struct
6、NODE float coef; /系數(shù) int expn; /指數(shù) struct NODE *next; NODE;NODE *Creat(int n);void print(NODE *head);NODE *AddPolyn(NODE *head1, NODE *head2);NODE *Delfirst(NODE *head, NODE *q);void InsertBefore(NODE *p1, NODE *p2);int compare(int a, int b);main() NODE *head1, *head2, *head3; int n1, n2; printf(&qu
7、ot;請輸入你需要的多項數(shù)的數(shù)目 n1 : "); scanf("%d", &n1); head1 = Creat(n1); printf("第一個多項式的顯示 : n"); print(head1); printf("n請輸入你需要的多項數(shù)的數(shù)目 n2 : "); scanf("%d", &n2); head2 = Creat(n2); printf("n第二個多項式的顯示 : n"); print(head2); head3 = AddPolyn(head1, he
8、ad2); printf("n合并后的多項式的顯示 : n"); print(head3); printf("n");/*創(chuàng)建鏈表*/NODE *Creat(int n) NODE *current, *previous, *head; int i; head = (NODE *)malloc(sizeof(NODE); /*創(chuàng)建頭結(jié)點*/ previous = head; for(i = 0; i < n; i+) current = (NODE *)malloc(sizeof(NODE); printf("請輸入系數(shù)和指數(shù) : &qu
9、ot;); scanf("%f%d", ¤t->coef, ¤t->expn); previous->next = current; previous = current; previous->next = NULL; return head;/*一元多項式的想加,總體考慮,可分qa的指數(shù)比qb小,或等于pb(如果系數(shù)相加等于0和不等于0),或大于pb里面由InsertBefore和Delfirst兩個小模塊組成一部分*/NODE *AddPolyn(NODE *head1, NODE *head2) NODE
10、 *ha, *hb, *qa, *qb; int a, b; float sum; ha = head1; /*ha和hb指向頭結(jié)點*/ hb = head2; qa = ha->next; /*qa和qb指向頭結(jié)點的下一個結(jié)點*/ qb = hb->next; while(qa && qb) /*qa和qb均非空*/ a = qa->expn; b = qb->expn; switch(compare(a, b) case -1 : /*qa->expn < qb->expn*/ ha = qa; qa = qa->next;
11、break; case 0 : sum = qa->coef + qb->coef; /*系數(shù)的和*/ if(sum != 0.0) /*如果不是0.0*/ qa->coef = sum; /*改變系數(shù)*/ ha = qa; else free(Delfirst(ha, qa); free(Delfirst(hb, qb); qa = ha->next; qb = hb->next; /*qb釋放后要重新賦值*/ break; case 1 : /*如果qa-> expn > qb -> expn*/ Delfirst(hb, qb); Inse
12、rtBefore(ha, qb); /*把qb插入到ha下一個結(jié)點之前*/ qb = hb->next; ha = ha->next; break; if(qb) ha->next = qb; /*插入剩余的pb*/ free(head2); return head1; /*比較*/int compare(int a, int b) if(a < b) return -1; else if(a > b) return 1; else return 0;/*刪除結(jié)點q*/NODE *Delfirst(NODE *p1, NODE *q) p1 -> next
13、= q -> next; return (q); /*插入結(jié)點,引入結(jié)點p,可以讓p插入到p2和p1之間*/void InsertBefore(NODE *p1, NODE *p2) NODE *p; p = p1->next; p1->next = p2; p2->next = p;/*打印,為了美觀程序分開打印*/void print(NODE *head) NODE *current; current = head->next; while(current->next != NULL) printf("%0.f * x%d + ", current->coef, current->expn); current = current -> next; printf("%0.f * x%d", current->coef, current->expn); 六 調(diào)試分析如圖第八行,如果直接一次性輸完兩項的次數(shù)和項數(shù),還是會顯示“請輸入系數(shù)和指數(shù)”糾正辦法:輸入時輸完一項的系數(shù)和指數(shù),按回車后繼續(xù)輸入。七 測試結(jié)果輸入一個二次三項式X2+3X+1,一個三次四項式2X3+4X2+X+1輸出如圖:八 心得體會首先,我的C+學(xué)的不是很好,因此做這樣一個課程設(shè)計感覺有點吃力,還好我不斷的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玉林市福綿區(qū)特崗教師招聘筆試真題2024
- 昆明市公安局呈貢分局勤務(wù)輔警招聘筆試真題2024
- 石大學(xué)前兒童保育學(xué)課件1-2呼吸系統(tǒng)
- 生物打印再生組織-洞察闡釋
- 對數(shù)函數(shù)及其性質(zhì)(第一課時)教學(xué)設(shè)計教學(xué)設(shè)計
- 2025至2030年中國電力系統(tǒng)接線裝置行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國玻璃專用金剛石鋸片行業(yè)投資前景及策略咨詢報告
- 第二節(jié)發(fā)生在肺內(nèi)的氣體交換教學(xué)設(shè)計
- 人工智能+教育論文
- 2025至2030年中國滾柱式單向超越離合器行業(yè)投資前景及策略咨詢報告
- 走進(jìn)西方音樂學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 國家開放大學(xué)電大《生產(chǎn)管理》2024-2024期末試題及答案試卷號
- “搶10”游戲(教學(xué)設(shè)計)-2024-2025學(xué)年一年級上冊數(shù)學(xué)蘇教版
- 農(nóng)村建房的鄰居協(xié)議書模板
- 服裝技能大賽理論試題庫題
- 浙江省杭州市上城區(qū)2023-2024學(xué)年八年級下學(xué)期期末科學(xué)試題(解析版)
- JGJ196-2010建筑施工塔式起重機安裝、使用、拆卸安全技術(shù)規(guī)程
- 浙江省杭州市濱江區(qū)2023-2024學(xué)年八年級下學(xué)期期末科學(xué)試題(解析版)
- 大學(xué)武術(shù)智慧樹知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 國家開放大學(xué)2022《土木工程力學(xué)(本)》形考作業(yè)1-5參考答案
- 河南省許昌市2023-2024學(xué)年高一下學(xué)期期末考試生物試題(無答案)
評論
0/150
提交評論