長整數(shù)的代數(shù)計(jì)算----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第1頁
長整數(shù)的代數(shù)計(jì)算----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第2頁
長整數(shù)的代數(shù)計(jì)算----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第3頁
長整數(shù)的代數(shù)計(jì)算----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第4頁
長整數(shù)的代數(shù)計(jì)算----數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、沈陽航空航天大學(xué)課課 程程 設(shè)設(shè) 計(jì)計(jì) 報(bào)報(bào) 告告課程設(shè)計(jì)名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)課程設(shè)計(jì)題目: 長整數(shù)的代數(shù)計(jì)算長整數(shù)的代數(shù)計(jì)算院(系):計(jì)算機(jī)學(xué)院專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí): 學(xué) 號(hào): 姓 名: 指導(dǎo)教師: 沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 I 目目 錄錄1 題目介紹和功能要求題目介紹和功能要求.11.1 題目介紹 .11.2 功能要求 .11.3 基本功能 .12 系統(tǒng)功能模塊結(jié)構(gòu)圖系統(tǒng)功能模塊結(jié)構(gòu)圖.22.1 系統(tǒng)功能結(jié)構(gòu)框圖.22.2 系統(tǒng)主要模塊的功能說明.23 使用的數(shù)據(jù)結(jié)構(gòu)的描述使用的數(shù)據(jù)結(jié)構(gòu)的描述.43.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) .43.2 數(shù)據(jù)結(jié)構(gòu)用法說明 .44

2、函數(shù)的描述函數(shù)的描述.54.1 主要函數(shù)設(shè)計(jì).54.2 主要函數(shù)流程圖.65 程序測試和運(yùn)行的結(jié)果程序測試和運(yùn)行的結(jié)果.115.1 程序測試.115.2 運(yùn)行結(jié)果.126 參考文獻(xiàn)參考文獻(xiàn).14附附 錄(關(guān)鍵部分程序清單)錄(關(guān)鍵部分程序清單).15沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 1 1 題目介紹和功能要求1.1 題目介紹題目介紹 設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)完成長整數(shù)的表示和存儲(chǔ),并編寫算法來實(shí)現(xiàn)兩個(gè)長整數(shù)的加、減、乘、除等基本代數(shù)運(yùn)算。1.2 功能要求功能要求1) 長整數(shù)長度在一百位以上。2) 實(shí)現(xiàn)兩長整數(shù)在同余代數(shù)下的加、減、乘、除操作。即實(shí)現(xiàn)算法來求解a+b mod n,a-b mod n,a*b mo

3、d n,ab mod n。3)輸入輸出均在文件中。 (選作)1.3 基本功能基本功能1.jiafa();將一百位以上的長整數(shù)進(jìn)行加法運(yùn)算,計(jì)算出和。2.jianfa();將一百位以上的長整數(shù)進(jìn)行減法運(yùn)算,計(jì)算出差。3.chenfa();將一百位以上的長整數(shù)進(jìn)行乘法運(yùn)算,計(jì)算出積。4.chufa(); 將一百位以上的長整數(shù)進(jìn)行除法運(yùn)算,計(jì)算出商和余數(shù)。沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 2 2 系統(tǒng)功能模塊結(jié)構(gòu)圖2.1 系統(tǒng)功能結(jié)構(gòu)框圖系統(tǒng)功能結(jié)構(gòu)框圖主模塊輸入模塊減法模塊加法模塊乘法模塊除法模塊輸出模塊圖圖 2.12.1 系統(tǒng)功能結(jié)構(gòu)框圖系統(tǒng)功能結(jié)構(gòu)框圖2.2 系統(tǒng)主要模塊的功能說明系統(tǒng)主要模塊的功

4、能說明1. 主模塊kongzhi();沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 3 控制輸入模塊、加法模塊、減法模塊、乘法模塊、除法模塊、輸出模塊的循環(huán)使用。2. 輸入模塊shuru();將輸入的兩組長整數(shù)分別通過轉(zhuǎn)換將其轉(zhuǎn)換成所需要的形式存儲(chǔ)到兩個(gè)鏈表(opr1、opr2)中保存起來。3. 加法模塊 jiafa();將鏈表 opr1、opr2 中的數(shù)據(jù)進(jìn)行加法運(yùn)算,并且二者的將加和保存到鏈表 oprr 中。4. 減法模塊 jianfa();將鏈表 opr1、opr2 中的數(shù)據(jù)進(jìn)行減法運(yùn)算,并且將二者的差保存到鏈表oprr 中。5. 乘法模塊 chengfa();將鏈表 opr1、opr2 中的數(shù)據(jù)進(jìn)行乘

5、法運(yùn)算,并且將二者的乘積保存到鏈表 oprr 中。6. 除法模塊 chufa();將鏈表 opr1、opr2 中的數(shù)據(jù)進(jìn)行加法運(yùn)算,并且將二者的商和余數(shù)分別保存到鏈表 quti、remand 中。7. 輸出模塊 shuchu(); 將鏈表 oprr、quti、remand 中的數(shù)據(jù)保存到字符數(shù)組中,并且將字符數(shù)組中的數(shù)據(jù)輸出到屏幕上。沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 4 3 使用的數(shù)據(jù)結(jié)構(gòu)的描述3.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)將輸入的兩個(gè)長整數(shù)首先保持到字符數(shù)組中,然后將字符數(shù)組中的字符轉(zhuǎn)換每四個(gè)一組,利用雙向循環(huán)鏈表來實(shí)現(xiàn)每一組字符的存儲(chǔ),并且高位在前、低位在后。每個(gè)結(jié)點(diǎn)中只存儲(chǔ)四位十進(jìn)制數(shù)字,

6、即不超過 9999 的非負(fù)整數(shù)。利用兩個(gè)雙向循環(huán)鏈表分別保持了兩個(gè)非負(fù)長整數(shù)。加法:由低位的結(jié)點(diǎn)開始相加,加和大于 9999 時(shí),加和除以一萬取余數(shù)保存到新的雙向循環(huán)鏈表結(jié)點(diǎn)中,并且加和除以一萬取整數(shù)作為進(jìn)位加到下兩個(gè)結(jié)點(diǎn)相加中,依次循環(huán)相加;減法:同加法有些相似,保證第一個(gè)長整數(shù)不小于于第二個(gè)長整數(shù),結(jié)點(diǎn)相減,不能相減就相前一結(jié)點(diǎn)借位,差保存到新的雙向循環(huán)鏈表結(jié)點(diǎn)中,依次循環(huán);乘法:由低位的結(jié)點(diǎn)開始相乘,乘積大于 9999 時(shí),乘積除以一萬取余數(shù)保存到新的雙向循環(huán)鏈表結(jié)點(diǎn)中,并且乘積除以一萬取整數(shù)作為進(jìn)位加到下兩個(gè)結(jié)點(diǎn)乘積中,依次循環(huán)相乘;除法:開辟兩個(gè)新的鏈表,保存商數(shù)和差。用第一個(gè)長整數(shù)

7、循環(huán)減去第二個(gè)長整數(shù),沒減一次計(jì)數(shù)加一,計(jì)數(shù)保存到商數(shù)鏈表中。直到差小于第二個(gè)長整數(shù)停止循環(huán),最后的計(jì)數(shù)為商值,差值為余數(shù)。選擇該數(shù)據(jù)結(jié)構(gòu)來完成長整數(shù)的加減乘除運(yùn)算是因?yàn)橐獙﹂L整數(shù)進(jìn)行運(yùn)算,需要對長整數(shù)進(jìn)行存儲(chǔ),所以選擇用鏈表對長整數(shù)存儲(chǔ),又由于存儲(chǔ)的順序是從左到右,而運(yùn)算的順序則是從右到左,這樣位了操作方便選擇循環(huán)鏈表,在運(yùn)算過程中有進(jìn)位和借位的操作,所以最終選擇雙向循環(huán)鏈表的數(shù)據(jù)結(jié)構(gòu)。3.2 數(shù)據(jù)結(jié)構(gòu)用法說明數(shù)據(jù)結(jié)構(gòu)用法說明輸入的兩個(gè)長整數(shù)必須為非負(fù)長整數(shù)。加法計(jì)算時(shí)只要保證兩個(gè)數(shù)都為非負(fù)數(shù)即可,減法、乘法、除法時(shí)需要保證第一個(gè)長整數(shù)大于第二個(gè)長整數(shù)。同時(shí)乘法、除法計(jì)算時(shí)第二個(gè)數(shù)不能為零,

8、并且輸入的數(shù)一定要合法,最高位不能為零,否則程序會(huì)提示輸入有誤。沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 5 4 函數(shù)的描述4.1主要函數(shù)設(shè)計(jì)主要函數(shù)設(shè)計(jì)1. shuru ();作用作用:將輸入的兩個(gè)長整數(shù)分別保存到兩個(gè)鏈表中。2. jiafa();作用作用:將兩個(gè)長整數(shù)進(jìn)行加法運(yùn)算,計(jì)算出二者的和。3. jianfa();作用作用:將兩個(gè)長整數(shù)進(jìn)行減法運(yùn)算,計(jì)算出二者的差。4. chengfa ();作用作用:將兩個(gè)長整數(shù)進(jìn)行乘法運(yùn)算,計(jì)算出二者的積。5. chufa(); 作用作用: 將兩個(gè)長整數(shù)進(jìn)行除法運(yùn)算,計(jì)算出二者的商和余數(shù)。6. shuchu();作用作用: 將保存到鏈表中的計(jì)算結(jié)果輸出。沈陽

9、航空航天大學(xué)課程設(shè)計(jì)報(bào)告 6 4.2 主要函數(shù)流程圖主要函數(shù)流程圖1. kongzhi():開始判斷ch輸入ch調(diào)用加法函數(shù)調(diào)用減法函數(shù)調(diào)用乘法函數(shù)調(diào)用除法函數(shù)退出程序結(jié)束輸出和輸出差輸出積輸出商12345 圖圖 4.2.14.2.1 控制函數(shù)流程圖控制函數(shù)流程圖 沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 7 2. jiafa(); 開始NodeList p1=opr1,p2=opr2,p3=oprr;將鏈表opr1、opr2中的對應(yīng)結(jié)點(diǎn)中數(shù)據(jù)加和并加上進(jìn)位移動(dòng)指針p1、p2判斷指針p1,p2是否指向頭指針若p1沒有指向頭指針和除以一萬取整保存為進(jìn)位和保存到鏈表oprr中和大于一萬是否有進(jìn)位和除以一萬取余

10、保存到鏈表oprr中將鏈表opr1、opr2中的對應(yīng)結(jié)點(diǎn)中數(shù)據(jù)加和若p2沒有指向頭指針將opr1中剩余結(jié)點(diǎn)數(shù)據(jù)保存到oprr中將opr2中剩余結(jié)點(diǎn)數(shù)據(jù)保存到oprr中結(jié)束YNYNYNYNNY 圖圖 4.2.24.2.2 加法函數(shù)流程圖加法函數(shù)流程圖 沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 8 3. jianfa();開始NodeList p1=opr1,p2=opr2,p3=oprr;將鏈表opr1、opr2中的對應(yīng)結(jié)點(diǎn)中數(shù)據(jù)作差并減去1移動(dòng)指針p1、p2判斷指針p2是否指向頭指針若p1沒有指向頭指針差保存到鏈表oprr中是否有借位將鏈表opr1中結(jié)點(diǎn)數(shù)據(jù)加上一萬后減去opr2中的對應(yīng)結(jié)點(diǎn)中數(shù)據(jù)將opr

11、1中剩余結(jié)點(diǎn)數(shù)據(jù)保存到oprr中結(jié)束YNNYNY判斷鏈表opr1中結(jié)點(diǎn)的數(shù)據(jù)大于opr2中對應(yīng)結(jié)點(diǎn)的數(shù)據(jù)將鏈表opr1、opr2中的對應(yīng)結(jié)點(diǎn)中數(shù)據(jù)作差YN 圖圖 4.2.34.2.3 減法函數(shù)流程圖減法函數(shù)流程圖沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 9 4、chengfa();開始NodeList p1=opr1,p2=opr2,p3=oprr;將鏈表opr1、opr2中的結(jié)點(diǎn)中數(shù)據(jù)相乘并加上進(jìn)位移動(dòng)指針p1若p1沒有指向頭指針和除以一萬取整保存為進(jìn)位積保存到鏈表oprr中和大于一萬是否有進(jìn)位積除以一萬取余保存到鏈表oprr中將鏈表opr1、opr2中的結(jié)點(diǎn)中數(shù)據(jù)相乘若p2沒有指向頭指針結(jié)束YNYNY

12、NYNNY是否有進(jìn)位保存進(jìn)位進(jìn)位為零移動(dòng)指針p2圖圖 4.2.44.2.4 乘法函數(shù)流程圖乘法函數(shù)流程圖沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 10 5、chufa(); 開始NodeList P1=opr1,p2=opr2,quti,remand;將鏈表opr1結(jié)點(diǎn)中數(shù)據(jù)加一萬后減去opr2結(jié)點(diǎn)數(shù)據(jù)并減借位移動(dòng)指針p2鏈表remand中數(shù)據(jù)是否大于鏈表opr2中數(shù)據(jù)是否需要借位差保存到鏈表remand中將鏈表opr1、opr2中的結(jié)點(diǎn)中數(shù)據(jù)相減若p2沒有指向頭指針結(jié)束YNYNYN計(jì)數(shù)加一并將計(jì)數(shù)保存到鏈表quti圖圖 4.2.54.2.5 除法函數(shù)流程圖除法函數(shù)流程圖沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 11

13、 5 程序測試和運(yùn)行的結(jié)果5.1 程序測試程序測試1、程序開始菜單: 圖圖 5.1.15.1.1 菜單圖菜單圖 2、程序退出:圖圖 5.1.25.1.2 退出程序圖退出程序圖沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 12 5.2 運(yùn)行結(jié)果運(yùn)行結(jié)果1、加法運(yùn)算:圖圖 5.2.15.2.1 除法運(yùn)算圖除法運(yùn)算圖2、減法運(yùn)算:圖圖 5.2.25.2.2 除法運(yùn)算圖除法運(yùn)算圖沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 13 3、乘法運(yùn)算:圖圖 5.2.35.2.3 除法運(yùn)算圖除法運(yùn)算圖4、除法運(yùn)算:圖圖 5.2.45.2.4 除法運(yùn)算圖除法運(yùn)算圖沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 14 6 參考文獻(xiàn)1譚浩強(qiáng)著. C 程序設(shè)計(jì)( 第三

14、版). 北京: 清華大學(xué)出版社,20052嚴(yán)蔚敏 吳偉明.數(shù)據(jù)結(jié)構(gòu)(C 語言版).北京:清華大學(xué)出版社,20073 王裕明.數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì).北京:清華大學(xué)出版社,20104 譚浩強(qiáng).C 語言程序設(shè)計(jì)M.北京:清華大學(xué)出版社,20055 王敬華 林萍 張清國.C 語言程序設(shè)計(jì)教程M.北京:清華大學(xué)出版社,2005沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 15 附 錄(關(guān)鍵部分程序清單)#include stdafx.h#include#include#include#include#define LEN sizeof(struct Node)#define MAX 1000#define OK 1#de

15、fine ERROR 0#define OVERFLOW -1#define TRUE 1#define FALSE 0typedef int Status;typedef struct Node int data;struct Node *prior,*next;Node,*NodeList;int axp(int a,int k) /求指數(shù)函數(shù)值int r=1;if(k=0)return 1;for(;k0;k-)r=r*a;return r;Status zhuanhuan(char str,NodeList &oprh) /輸入轉(zhuǎn)換函數(shù)/將字符串形式的操作數(shù)轉(zhuǎn)換成所需的類型No

16、deList p;int i,k,buffer;k=buffer=0;oprh=(NodeList)malloc(LEN);oprh-next=oprh;oprh-prior=oprh;for(i=strlen(str)-1;i=0;i-)if(i!=0 | (str0!=- & str0!=+)&(stri9 | strinext-prior=p; p-prior=oprh; p-next=oprh-next; oprh-next=p; p-data=buffer; buffer=k=0;return OK;Status shuru(NodeList &opr1,No

17、deList &opr2,char str)/輸入函數(shù)int flag=OK; printf(nn 請輸入第一個(gè)操作數(shù):n);scanf(%s,str);getchar();flag=zhuanhuan(str,opr1); while(!flag) printf(整數(shù)輸入有誤,請重新輸入:n); scanf(%s,str);getchar(); flag=zhuanhuan(str,opr1);printf(nn 請輸入第二個(gè)操作數(shù):n);scanf(%s,str);getchar();flag=zhuanhuan(str,opr2); while(!flag) printf(整數(shù)輸

18、入有誤,請重新輸入:n);沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 17 scanf(%s,str);getchar(); flag=zhuanhuan(str,opr2);return OK;/輸出函數(shù)Status shuchu(NodeList oprr,char str)Status initbuf(char str);NodeList p;int i,j,num4;if(!oprr)return ERROR;p=oprr;i=j=0;initbuf(str);p=p-next;if(p-next=oprr & p-data=0)/若要輸出的數(shù)為 0 則執(zhí)行stri+=0;else whil

19、e(p!=oprr) num0=p-data/1000; num1=(p-data-num0*1000)/100; num2=(p-data-num0*1000-num1*100)/10; num3=p-data-num0*1000-num1*100-num2*10; while(jnext; j=0;stri=0;printf(%s,str);printf(n);return OK;Status initbuf(char str)/緩沖區(qū)部分初始化函數(shù)沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 18 int i;for(i=0;iprior;p2=opr2-prior;while(p1-prior!=op

20、r1 & p2-prior!=opr2)p1=p1-prior;p2=p2-prior;if(p1-prior!=opr1)return 1;if(p2-prior!=opr2)return -1;return 0;int length(NodeList oprr) /求鏈表長度int count=0;NodeList p=oprr-next;while(p!=oprr)count+;p=p-next;return count;Status Creat(NodeList &oprr,int len) /生成指定長度鏈表NodeList p;oprr=(NodeList)mall

21、oc(LEN);p=oprr;while(len0)p-next=(NodeList)malloc(LEN);p-next-data=?;p-next-prior=p;沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 19 p=p-next;len-;p-next=oprr;oprr-prior=p;return OK;int compare(NodeList opr1,NodeList opr2) /比較 opr1、opr2 絕對值的大小NodeList p1,p2;p1=opr1-next;p2=opr2-next;if(cmplinklen(opr1,opr2)=1)/opr1 比較長return 1; e

22、lse if(cmplinklen(opr1,opr2)=-1)/opr2 比較長return -1; else/長度相等的情況 while(p1-data=p2-data & p1-next!=opr1) p1=p1-next; p2=p2-next;if(p1-datap2-data)return 1;else if(p1-datadata)return -1;else return 0;/-初始化鏈表函數(shù)-Status init(NodeList &oppr)oppr=NULL;return OK;/=加法模塊=Status jiafa(NodeList opr1,Nod

23、eList opr2,NodeList &oprr)/本算法實(shí)現(xiàn) A,B 相加的操作int CF,buffer; NodeList p1,p2,p3;oprr=(NodeList)malloc(LEN);沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 20 oprr-next=oprr;oprr-prior=oprr;p1=opr1-prior;p2=opr2-prior;CF=buffer=0;while(p1!=opr1 & p2!=opr2)buffer=p1-data+p2-data+CF;CF=buffer/10000;/若 buffer 的值大于 9999 則產(chǎn)生進(jìn)位,賦給 CF/將

24、新建結(jié)點(diǎn)插入到頭結(jié)點(diǎn)之后 p3=(NodeList)malloc(LEN); oprr-next-prior=p3; p3-prior=oprr;p3-next=oprr-next;oprr-next=p3;p3-data=buffer%10000;/應(yīng)該將 buffer 的第四位賦給 p3-data /.p1=p1-prior;p2=p2-prior;while(p1!=opr1)/處理 opr1 鏈的剩余部分buffer=p1-data+CF;CF=buffer/10000;/若 buffer 的值大于 9999 則產(chǎn)生進(jìn)位,賦給 CF/將新建結(jié)點(diǎn)插入到頭結(jié)點(diǎn)之后p3=(NodeList)

25、malloc(LEN); oprr-next-prior=p3; p3-prior=oprr;p3-next=oprr-next;oprr-next=p3;p3-data=buffer%10000;/.p1=p1-prior;while(p2!=opr2)/處理 opr2 鏈的剩余部分buffer=p2-data+CF;CF=buffer/10000;/若 buffer 的值大于 9999 則產(chǎn)生進(jìn)位,賦給 CF/將新建結(jié)點(diǎn)插入到頭結(jié)點(diǎn)之后p3=(NodeList)malloc(LEN); oprr-next-prior=p3; p3-prior=oprr;p3-next=oprr-next;

26、沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 21 oprr-next=p3;p3-data=buffer%10000;p2=p2-prior;if(CF)p3=(NodeList)malloc(LEN); oprr-next-prior=p3; p3-prior=oprr;p3-next=oprr-next;oprr-next=p3;p3-data=CF;return OK;/=減法基本操作=Status jianfa(NodeList opr1,NodeList opr2,NodeList &oprr)/本算法實(shí)現(xiàn) A,B 相減的操作 /將 A 鏈分成與 B 鏈長相等的底位部分,和剩余的高位部分,

27、并做相應(yīng)處理。int CF,buffer,flag;NodeList p1,p2,p3,qh,qt,qq;oprr=(NodeList)malloc(LEN); oprr-next=oprr;oprr-prior=oprr;p1=opr1-prior;p2=opr2-prior;CF=buffer=flag=0;while(p2!=opr2)/opr2 鏈的長度小于等于 opr1 鏈的if(p1-datadata+CF)buffer=10000+p1-data-(p2-data+CF);CF=1;elsebuffer=p1-data-(p2-data+CF);CF=0;p3=(NodeList

28、)malloc(LEN); oprr-next-prior=p3; p3-prior=oprr;p3-next=oprr-next;沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 22 oprr-next=p3; p3-data=buffer; p1=p1-prior;p2=p2-prior;while(p1!=opr1)/處理 opr1 鏈?zhǔn)O碌牟糠謎f(p1-datadata-CF;CF=1;elsebuffer=p1-data-CF;CF=0;p3=(NodeList)malloc(LEN); oprr-next-prior=p3; p3-prior=oprr;p3-next=oprr-next;oprr

29、-next=p3; p3-data=buffer;p1=p1-prior;/處理鏈表開頭結(jié)點(diǎn)值為 0 的無意義情況,若鏈表本身表示 0,則不做如下處理 p3=oprr-next;while(p3-data=0 & p3-next!=oprr)p3=p3-next;flag=1;if(flag)qh=oprr-next;/保存無用結(jié)點(diǎn)的頭尾指針 qt=p3-prior;/為釋放做準(zhǔn)備 oprr-next=p3;/重接 next 鏈 p3-prior=oprr;/重接 prior 鏈qt-next=NULL; while(qh!=NULL)/釋放無用結(jié)點(diǎn) qq=qh; qh=qh-next

30、;沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 23 free(qq);return OK;/=乘法模塊=Status chengfa(NodeList opr1,NodeList opr2,NodeList &oprr)NodeList ph1,ph2,pt1,pt2,p3,pt3,qq;int len,CF;long buffer;ph1=opr1;pt1=ph1-prior;ph2=opr2;pt2=ph2-prior;len=length(opr1)+length(opr2);Creat(oprr,len);qq=oprr-next;while(qq!=oprr)qq-data=0;qq=qq

31、-next;buffer=CF=0;p3=oprr-prior;while(pt2!=ph2)pt1=ph1-prior;pt3=p3;while(pt1!=ph1)buffer=pt1-data*pt2-data+pt3-data+CF;CF=(int)buffer/10000;pt3-data=(int)buffer%10000;pt1=pt1-prior;pt3=pt3-prior;pt3-data=CF;CF=0;pt2=pt2-prior;p3=p3-prior; return OK;沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 24 /=除法模塊=/除法子函數(shù)int chufa_zi(NodeLi

32、st &opr1,NodeList opr2)NodeList p1,p2,qh,qt,qq;int count,CF,buffer,flag;count=0;while(compare(opr1,opr2)!=-1)/opr2 鏈長CF=buffer=0;p1=opr1-prior; p2=opr2-prior;while(p2!=opr2) if(p1-datadata+CF) buffer=10000+p1-data-(p2-data+CF); CF=1; else buffer=p1-data-(p2-data+CF); CF=0; p1-data=buffer;p1=p1-p

33、rior;p2=p2-prior; if(p1!=opr1)/處理 opr1 鏈?zhǔn)O碌牟糠輇uffer=p1-data-CF;p1-data=buffer; /清頭 0flag=0; p1=opr1-next; while(p1-data=0 & p1-next!=opr1) p1=p1-next; flag=1; if(flag)沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 25 qh=opr1-next;/保存無用結(jié)點(diǎn)的頭尾指針 qt=p1-prior;/為釋放做準(zhǔn)備 opr1-next=p1;/重接 next 鏈 p1-prior=opr1;/重接 prior 鏈 qt-next=NULL; w

34、hile(qh!=NULL)/釋放無用結(jié)點(diǎn) qq=qh; qh=qh-next; free(qq);count+;return count;/除法函數(shù)Status chufa(NodeList opr1,NodeList opr2,NodeList &quti,NodeList &remand)/quti 為商數(shù)鏈,remand 為余數(shù)鏈int len_quti,len_reman,buffer;NodeList q1,q2,pq;if(compare(opr1,opr2)=-1)/除數(shù)比被除數(shù)大Creat(quti,1);quti-next-data=0;quti-next-

35、next=quti;quti-prior=quti-next;remand=opr1;elselen_quti=length(opr1)-length(opr2); len_reman=length(opr2); Creat(quti,len_quti+1);/開辟商數(shù)鏈 Creat(remand,len_reman);/開辟余數(shù)鏈q1=opr1-next;q2=remand-next;/q2 指向余數(shù)鏈 remand 的下一結(jié)點(diǎn)/初始化 remand 鏈while(q2!=remand)q2-data=q1-data;q1=q1-next;沈陽航空航天大學(xué)課程設(shè)計(jì)報(bào)告 26 q2=q2-ne

36、xt;pq=quti-next;q1=q1-prior;/指針退回一步while(q1!=opr1)buffer=chufa_zi(remand,opr2);pq-data=buffer;if(q1-next!=opr1)remand-prior-next=(NodeList)malloc(LEN);remand-prior-next-next=remand;remand-prior-next-prior=remand-prior;remand-prior=remand-prior-next;remand-prior-data=q1-next-data;if(remand-next-data=0 & remand-next-next!=remand)remand-next-next-prior=remand;remand-next=remand-next-next;q1=q1-next;pq=pq-next;pq=quti-prior;while(pq-data=?)pq=pq-prior;pq-next=quti;quti-prior=pq;return OK;/=主操作模塊=Status kongzhi()NodeList opr1,opr2,oprr,quti,remand;char str

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論