版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、福建農(nóng)林大學(xué)計算機(jī)與信息學(xué)院(程序設(shè)計類課程)實驗報告課程名稱:姓 名:系:專 業(yè):年 級:學(xué) 號:指導(dǎo)教師:職 稱:福建農(nóng)林大學(xué)計算機(jī)與信息學(xué)院實驗報告系: 計算機(jī) 專業(yè): 計算機(jī)科學(xué)與技術(shù) 年級: 姓名: 學(xué)號: 實驗室號_ 計算機(jī)號 實驗一 線性表及其應(yīng)用(多項式相加、相乘)一、 實驗?zāi)康暮鸵?、 熟悉tc的運(yùn)行環(huán)境,并可以熟練的使用tc;2、掌握鏈表存儲的方法以及基本操作;3、掌握內(nèi)存的動態(tài)分配和釋放方法;4、熟悉C語言程序的基本格式與規(guī)范。二、 實驗內(nèi)容和原理1、實驗內(nèi)容:設(shè)計一個一元多項式的簡單計算程序,其基本功能有:(1)輸入并建立多項式;(2)輸出多項式;(3)多項式的相加減
2、;(4)多項式的相乘。利用單鏈表實現(xiàn)。2、實驗原理:將兩多項式存入鏈表lianbiao1、lianbiao2,用pointer1掃描lianbiao1,pointer2掃描lianbiao2,結(jié)果保存在lianbiao3中(用pointer3來創(chuàng)建lianbiao3)三、 實驗環(huán)境硬件:(1)學(xué)生用微機(jī)(2)多媒體實驗教室(3)局域網(wǎng)環(huán)境軟件:(1)Windows XP中文操作系統(tǒng) (2)Turbo C 3.0四、 算法描述及實驗步驟1、描述1. 定義創(chuàng)建鏈表的函數(shù),然后創(chuàng)建三個鏈表,一個用于存放結(jié)果。2. 定義多項式相加的函數(shù)實現(xiàn)多項式的相加功能,定義多項式的相乘功能。3. 定義打印鏈表和釋
3、放鏈表的函數(shù)。4. 最后在主函數(shù)里面調(diào)用這些函數(shù),實現(xiàn)多項式的相加和相乘。例子:A(X)=3X+7X6-9X9B(X)=2X-3+7-3X+8X3+X5(1)執(zhí)行加法操作,輸出“l(fā)ianbiao1+lianbiao2:(2,-3) (7,0) (8,5) (1,5) (7,6) (-9,9)”(2)執(zhí)行乘法操作,輸出“l(fā)ianbiao1*lianbiao2:(6,-2) (21,1) (-9,2) (14,3) (55,6) (3,6) (-21,7) (-63,9) (27,10) (56,11) (7,11) (-72,14) (-9,14)”2、框圖3、代碼(注釋)#include &q
4、uot;stdio.h" /* 輸入輸出函數(shù)的頭文件 */#include "alloc.h" /* alloc.h是動態(tài)分配內(nèi)存空間頭文件 */typedef struct node/* 定義節(jié)點(diǎn),包含兩個數(shù)據(jù)域(c和e)和一個指針域(*next)*/int c,e;/*c是指多項式的系數(shù), e是項的指數(shù)*/struct node *next;/* 定義next為指向下一個結(jié)點(diǎn)的指針*/Pn;/*定義Pn類型*/Pn *create()/*創(chuàng)建鏈表*/Pn *pointer,*lianbiao;int n;lianbiao=malloc(sizeof(Pn);/
5、*用malloc動態(tài)分配函數(shù)給鏈表分配內(nèi)存空間*/printf("n:");/*提示用戶輸入多項式的項數(shù)*/scanf("%d",&n);/*接收用戶輸入的多項式的項數(shù)*/pointer=lianbiao;while(n)/*對n進(jìn)行判斷,當(dāng)n不為零時執(zhí)行while循環(huán)語句*/pointer->next=malloc(sizeof(Pn);/*為鏈表新的節(jié)點(diǎn)申請空間*/pointer=pointer->next;/*將pointer下移*/printf("c e:");scanf("%d %d"
6、,&pointer->c,&pointer->e);/*將系數(shù)c,指數(shù)e存入鏈表中的新節(jié)點(diǎn)*/n-;/*沒當(dāng)輸入一項時,項數(shù)n就減一*/pointer->next=NULL;/*如果pointer指向的下一個結(jié)點(diǎn)的指針域為空,說明鏈表已經(jīng)創(chuàng)建好了*/return lianbiao; void OUT(Pn *lianbiao)/*打印輸出鏈表*/Pn *pointer=lianbiao->next;while(pointer)/*打印出當(dāng)前的結(jié)點(diǎn)系數(shù)c和指數(shù)e, 直到鏈表為空*/printf("(%d,%d) ",pointer-&g
7、t;c,pointer->e);/*打印出多項式系數(shù)c和指數(shù)e*/pointer=pointer->next;/*打印出當(dāng)前結(jié)點(diǎn)后,將指針移到下一個節(jié)點(diǎn)*/printf("n");/*用n換行*/void Free(Pn *lianbiao)/*釋放鏈表空間*/Pn *pointer=lianbiao;/*將pointer指向頭節(jié)點(diǎn)*/while(pointer)/*釋放鏈表中的結(jié)點(diǎn),直到pointer鏈表為空時推出循體*/lianbiao=lianbiao->next;/*刪除當(dāng)前節(jié)點(diǎn)*/free(pointer);/*釋放當(dāng)前結(jié)點(diǎn)的空間*/pointe
8、r=lianbiao;/* 當(dāng)pointer指向頭結(jié)點(diǎn)指針時結(jié)束循環(huán)*/Pn *add(Pn *lianbiao1,Pn *lianbiao2)/*多項式相加*/Pn *lianbiao3,*pointer3,*pointer1=lianbiao1->next,*pointer2=lianbiao2->next;/*建立新的鏈表lianbiao3,用于存放lianbiao1與lianbiao2相加后的結(jié)果*/int c,e;/*這里的c為多項式相加后的系數(shù),而e為結(jié)點(diǎn)相加后的指數(shù)*/pointer3=lianbiao3=malloc(sizeof(Pn);/*用malloc為lia
9、nbiao3申請空間*/lianbiao3->next=NULL;while(pointer1|pointer2) /*當(dāng)pointer1或pointer2不為空時,分成3種情況*/if(pointer1&&(pointer2=NULL|pointer1->e<pointer2->e)/*第一種是當(dāng)pointer1不空并且pointer2為空,或者pointer1所指的指數(shù)e小于pointer2所指的指數(shù)e時*/c=pointer1->c;/*將pointer1當(dāng)前所指結(jié)點(diǎn)的系數(shù)c賦值給c*/e=pointer1->e;/*將pointer1
10、當(dāng)前所指結(jié)點(diǎn)的系數(shù)e賦值給e*/pointer1=pointer1->next;/*將pointer1移到下一結(jié)點(diǎn)*/else if(pointer2&&(pointer1=NULL|pointer2->e<pointer1->e) /*第二種是當(dāng)pointer2不空且pointer1為空或者pointer2所指的指數(shù)e小于pointer1所指的指數(shù)e時*/c=pointer2->c;e=pointer2->e;pointer2=pointer2->next;else /*第三種是當(dāng)pointer1、pointer2都不為空且point
11、er1的指數(shù)e等于pointer2的指數(shù)e時*/c=pointer1->c+pointer2->c;/*將pointer1與pointer2所指的系數(shù)相加*/e=pointer1->e;pointer1=pointer1->next;/*將pointer1下移*/pointer2=pointer2->next;/*將pointer2下移*/if(c)pointer3->next=malloc(sizeof(Pn);/*申請新結(jié)點(diǎn)的空間*/pointer3=pointer3->next;/*pointer3下移*/pointer3->c=c;/*把
12、系數(shù)c放入新結(jié)點(diǎn)*/pointer3->e=e;/*把指數(shù)e放入新結(jié)點(diǎn)*/pointer3->next=NULL;/*當(dāng)所指的指針為NULL時,鏈表結(jié)束*/return lianbiao3;/* 返回兩個多項式相加的結(jié)果lianbiao3 */Pn *mx1(Pn *pointer1,Pn *lianbiao2) /*多項式相乘*/Pn *lianbiao3,*pointer3,*pointer2=lianbiao2->next;/*定義鏈表lianbiao3 */pointer3=lianbiao3=malloc(sizeof(Pn);/*為lianbiao3申請空間, 并
13、將pointer3指向lianbiao3*/lianbiao3->next=NULL;while(pointer2)/* 當(dāng)pointer2不為空時, 執(zhí)行while循環(huán)*/pointer3->next=malloc(sizeof(Pn);/*為新創(chuàng)結(jié)點(diǎn)申請空間*/pointer3=pointer3->next;/*將pointer3指向新結(jié)點(diǎn)*/pointer3->c=pointer1->c*pointer2->c;/*將pointer1的系數(shù)乘以pointer2->c*/pointer3->e=pointer1->e+pointer2-
14、>e;/*將pointer1的指數(shù)乘以pointer2->e*/pointer2=pointer2->next;/*pointer2下移*/pointer3->next=NULL;return lianbiao3;/*將結(jié)果lianbiao3返回*/Pn *mxm(Pn *lianbiao1,Pn *lianbiao2)/*多項式相乘*/Pn *lianbiao3,*pointer1=lianbiao1->next,*htemp;lianbiao3=malloc(sizeof(Pn);lianbiao3->next=NULL;while(pointer1)/
15、*當(dāng)pointer1不為空,執(zhí)行while循環(huán)*/htemp=mx1(pointer1,lianbiao2);/*將相乘結(jié)果放到鏈表htemp*/lianbiao3=add(lianbiao3,htemp);/*將htemp中的多項式加上lianbiao3中的多項式*/pointer1=pointer1->next;Free(htemp);/*釋放鏈表htemp*/return lianbiao3;/*返回結(jié)果lianbiao3 */main()Pn *lianbiao1,*lianbiao2,*lianbiao3; /*定義三個鏈表lianbiao1,lianbiao2,lianbia
16、o3*/clrscr();printf("Create lianbiao1n");lianbiao1=create(); /*創(chuàng)建鏈表lianbiao1*/printf("nPrintf lianbiao1n");OUT(lianbiao1);/*打印出鏈表lianbiao1*/printf("nCreate lianbiao2n");lianbiao2=create();/*創(chuàng)建鏈表lianbiao2*/printf("nPrintf lianbiao2n");OUT(lianbiao2); /*打印出鏈表lia
17、nbiao2*/printf("nlianbiao1+lianbiao2:");lianbiao3=add(lianbiao1,lianbiao2);/*把lianbiao1和lianbiao2相加的結(jié)果賦給lianbiao3*/OUT(lianbiao3);/*打印出lianbiao3*/Free(lianbiao3);/*釋放lianbiao3 */printf("nlianbiao1*lianbiao2:");lianbiao3=mxm(lianbiao1,lianbiao2);/*把lianbiao1和lianbiao2相乘的結(jié)果賦給lianbi
18、ao3*/OUT(lianbiao3);/*輸出lianbiao3*/Free(lianbiao1);/*釋放lianbiao1*/Free(lianbiao2);Free(lianbiao3);getch();五、 調(diào)試過程#include "malloc.h"語句出錯, 多了一個m,后來改為#include "alloc.h", 就編譯通過了。六、 實驗結(jié)果測試數(shù)據(jù)(1):取兩項多項式為: 9+3x取一項多項式為: 2X-3實驗結(jié)果(1):這兩個項式相加結(jié)果為:lianbiao1+lianbiao2: 2X-3+9+3X這兩個項式相乘結(jié)果為:lianbiao1*lianbiao2: 18X-3+6X-2 實驗截圖(1):測試數(shù)據(jù)(2):取三項多項式為:(3,1) (7,6) (-9,9)取五項多項式為:(2,-3) (7,0) (-3,1) (8,5) (1,5)實驗結(jié)果(2):這兩個項式相加:lianbiao1+lianbiao2:(2,-3)(7,0) (8,5) (1,5) (7,6)(-9,9)這兩個項式相乘:lianbiao1*lianbiao2:(6,-2) (21,1) (-9,2) (14,3) (55,6) (3,6) (-21,7) (-63,9) (27,10) (56,11) (7,11) (-72,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024智能交通系統(tǒng)集成與道路養(yǎng)護(hù)合同
- 2024污染源在線監(jiān)測系統(tǒng)運(yùn)維與環(huán)保風(fēng)險評估服務(wù)協(xié)議3篇
- 《燈火閱讀理解分析》課件
- 2025年內(nèi)蒙古航旅租賃有限公司招聘筆試參考題庫含答案解析
- 二零二五年度物聯(lián)網(wǎng)技術(shù)研發(fā)與應(yīng)用合同3篇
- 2025年湖北省新華書店有限公司招聘筆試參考題庫含答案解析
- 二零二五年度礦石運(yùn)輸合同運(yùn)輸工具租賃與維修服務(wù)協(xié)議3篇
- 2025年中國石油長慶油田分公司招聘筆試參考題庫含答案解析
- 2024版簡易樹木買賣合同范本
- 二零二五年度股票質(zhì)押投資管理合同示范文本3篇
- 磁致伸縮液位傳感器KYDM-路線設(shè)置使用
- (完整版)建筑業(yè)10項新技術(shù)(2017年最新版)
- 收割機(jī)轉(zhuǎn)讓協(xié)議
- 中學(xué)歷史教育中的德育狀況調(diào)查問卷
- 煤礦煤業(yè)掘進(jìn)工作面班組安全確認(rèn)工作記錄表 模板
- 第8期監(jiān)理月報(江蘇版)
- 建筑工程質(zhì)量管理體系文件
- 乙丙橡膠電力電纜絕緣一步法硅烷交聯(lián)工藝
- 中止施工安全監(jiān)督申請書(范例)
- 世界各國標(biāo)準(zhǔn)鋼號對照表
- 大樹移植方案
評論
0/150
提交評論