版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計 報 告</p><p> 課程名稱 數(shù)據(jù) 結(jié)構(gòu) </p><p> 題 目 長整數(shù)運算 </p><p> 學(xué)生姓名 </p><p> 班級/學(xué)號 </p&
2、gt;<p><b> 需求分析</b></p><p> 設(shè)計一個實現(xiàn)任意長的整數(shù)間進(jìn)行四則運算的程序,要求完成長整數(shù)的加運算和減運算。長整數(shù)的長度沒有限制,可以是任意長。正確處理好運算之后的進(jìn)位和借位。</p><p> 輸入:[-]**,****,****;[-]*,****,****,**** //[-]表示“-”可選</
3、p><p> 輸出:**,****,****,****是否繼續(xù)計算(Y/N):</p><p> 功能:能正確進(jìn)行相關(guān)數(shù)據(jù)的加減運算</p><p><b> 測試數(shù)據(jù):</b></p><p><b> 0;0;輸出“0”</b></p><p> 2345,6789
4、;7654,3211;輸出“1,0000,0000”</p><p> 1,0000,0000,0000;-9999,9999;輸出“9999,0000,0001”</p><p> 1,0001,00001;-1,0001,0000;輸出“0”</p><p><b> 自選數(shù)據(jù) </b></p><p><
5、;b> 概要設(shè)計</b></p><p> 使用雙向循環(huán)鏈表實現(xiàn)長整數(shù)的運算及存儲,構(gòu)造雙向循環(huán)鏈表,創(chuàng)建雙向循環(huán)鏈表表示兩個整數(shù)</p><p> 設(shè)計兩整數(shù)相加的函數(shù)Add(),addtwo(),其中Add()調(diào)用addtwo()函數(shù),addtwo()具體實現(xiàn)兩個整數(shù)的加減操作,進(jìn)位及借位問題;設(shè)計顯示函數(shù)Display()及主函數(shù)main()</p>
6、;<p><b> 詳細(xì)設(shè)計</b></p><p><b> 數(shù)據(jù)結(jié)構(gòu)設(shè)計</b></p><p><b> 雙向循環(huán)鏈表的構(gòu)造</b></p><p> typedef struct LinkNode{</p><p> int data;
7、 //記錄每個節(jié)點的整數(shù)(小于)</p><p> LinkNode *next, *pre; //記錄下一個節(jié)點的地址和前一個節(jié)點的地址</p><p> }linklist;</p><p> 創(chuàng)建兩個長整數(shù)的鏈表</p><p><b> 偽算法 </b></p>&
8、lt;p> void Creat(char a[]) //引入字符串,創(chuàng)立兩個鏈表,分別表示兩個整數(shù)</p><p><b> {</b></p><p> int 記錄字符串i;記錄加數(shù)節(jié)點數(shù)j;記錄被加數(shù)節(jié)點數(shù)s;標(biāo)記字符串中的‘-’號</p><p> 記錄字符串中的字符轉(zhuǎn)化為整數(shù)的值k,
9、使每個節(jié)點記錄位l</p><p> while(指針?biāo)覆皇恰埃弧?被加數(shù)字符數(shù)m自動加1 //m記錄字符串中被加數(shù)的字符數(shù)</p><p> n=m; </p><p> while(執(zhí)政沒有指到結(jié)尾處) 總字符串n位數(shù)自動加1; //n記錄字符串的總字符數(shù)<
10、;/p><p><b> if被加數(shù)不是負(fù)數(shù)</b></p><p><b> {</b></p><p> head0->data=(-1); //記錄整數(shù)符號</p><p><b> w=1;</b></p><p>
11、;<b> }</b></p><p> else {head0->data=1;}</p><p> for(i=m-1;i>=w;i--) </p><p><b> {</b></p><p> If指針?biāo)笧閿?shù)字,而不是“,”
12、 //把字符轉(zhuǎn)化為整數(shù)</p><p><b> {</b></p><p> k+=(a[i]-'0')*sum(l); //sum()計算的乘方</p><p><b> l++;</b></p><p><b> }</b>&l
13、t;/p><p> if(a[i]==','||i==w)</p><p><b> {</b></p><p> 把整數(shù)存到雙向循環(huán)鏈表中</p><p> s++; //節(jié)點數(shù)加</p><p> k=0;
14、 //重新初始化k和l</p><p> l=0; </p><p><b> }</b></p><p><b> }</b></p><p> head0->pre->data
15、*=s; //存儲整數(shù)符號和節(jié)點數(shù)</p><p><b> }</b></p><p><b> 調(diào)試分析</b></p><p> 調(diào)試過程中,連續(xù)輸入數(shù)字運算,速度會明顯變慢,發(fā)現(xiàn)在初始化鏈表及運算后沒有釋放鏈表,造成系統(tǒng)資源浪費,經(jīng)改造后自愛后面添加了析構(gòu)函數(shù)</p&
16、gt;<p><b> 算法的時空分析</b></p><p> 創(chuàng)建整數(shù)鏈表有三個循環(huán),次數(shù)都為n。時間復(fù)雜度和空間復(fù)雜都都為O(n)</p><p><b> 使用說明和測試結(jié)果</b></p><p> 1、使用說明:用戶按照屏幕所顯示的提示來正確輸入數(shù)字</p><p>
17、; 其中[-]表示“-”為可選,從右至左每四位數(shù)字一個“,”</p><p><b> 2、測試結(jié)果:</b></p><p><b> 心得體會</b></p><p> 通過此實驗,加深了我對鏈表的基本操作,對雙向鏈表及循環(huán)鏈表的操作及實際運用有了很深的體會,在處理數(shù)字的進(jìn)位借位時有了進(jìn)一步的提高。</p
18、><p><b> 附錄</b></p><p><b> 鏈表的創(chuàng)建:</b></p><p> #include<stdio.h></p><p> #include<math.h></p><p> #include<stdlib.h
19、></p><p> typedef struct LinkNode{</p><p> int data; //記錄每個節(jié)點的整數(shù)(小于)</p><p> LinkNode *next, *pre; //記錄下一個節(jié)點的地址和前一個節(jié)點的地址</p><p> }linklist
20、;</p><p> linklist *head0;</p><p> linklist *head1; //head0,head1分別記錄兩個整數(shù)鏈表的頭指針</p><p> linklist *currptr;</p><p> linklist *result; //result記錄結(jié)果鏈表的頭指針
21、</p><p> void Creat(char a[]){ //引入字符串,創(chuàng)立兩個鏈表,分別表示兩個整數(shù)</p><p> int i=0,j=0,m=0,n=0,k=0,l=0,s=0,w=0; </p><p> //i記錄字符串,j記錄加數(shù)節(jié)點數(shù);s記錄被加數(shù)節(jié)點數(shù);w標(biāo)記字符串中的‘-’號</p>
22、;<p> //k記錄字符串中的字符轉(zhuǎn)化為整數(shù)的值,l使每個節(jié)點記錄位</p><p> while(a[m]!=';') m++; //m記錄字符串中被加數(shù)的字符數(shù)</p><p> n=m; </p><p> while(a[n]!='\
23、0') n++; //n記錄字符串的總字符數(shù)</p><p> if(a[0]=='-'){</p><p> head0->data=(-1); //記錄整數(shù)符號</p><p><b> w=1;</b></p><p><b>
24、}</b></p><p> else {head0->data=1;}</p><p> for(i=m-1;i>=w;i--){</p><p> if(a[i]!=',') { //把字符轉(zhuǎn)化為整數(shù)</p><p> k+=(a[i]-'0'
25、)*sum(l); //sum()計算的乘方</p><p><b> l++;</b></p><p><b> }</b></p><p> if(a[i]==','||i==w){</p><p> currptr=(linklist *)malloc(siz
26、eof(linklist)); //把整數(shù)存到雙向循環(huán)鏈表中</p><p> currptr->data=k;</p><p> currptr->next=head0;</p><p> currptr->pre=head0->pre;</p><p> head0->pre->
27、;next=currptr;</p><p> head0->pre=currptr;</p><p> head0=currptr;</p><p> s++; //節(jié)點數(shù)加</p><p> k=0; //重新初始
28、化k和l</p><p> l=0; </p><p><b> }</b></p><p><b> }</b></p><p> head0->pre->data*=s; //存儲整數(shù)符
29、號和節(jié)點數(shù)</p><p><b> }</b></p><p><b> 測試函數(shù):</b></p><p> void main() //主函數(shù)</p><p><b> {</b></p><p>
30、char ch[20];//鏈表對象</p><p> char Yes_No;</p><p> LinkList() ;</p><p> LinkList1();</p><p> printf("|輸入兩個任意長的整數(shù)。 |\n");</p><p><b&
31、gt; do{</b></p><p> printf("|輸入形式為:[-]**,****,****;[-]*,****,****,****|\n");</p><p> printf("|即符號+數(shù),每位加一個',',兩個數(shù)之間用';'隔開|\n");</p><p>
32、printf("|請輸入你要計算的兩個數(shù): \n");</p><p> scanf("%s",&ch); //輸入任意長字符串</p><p> LinkList() ; </p><p>
33、; Creat(ch); //把字符串轉(zhuǎn)化為整數(shù),并存到鏈表中//調(diào)用轉(zhuǎn)化函數(shù)</p><p> Add(); //實現(xiàn)兩個整數(shù)相加//調(diào)用add()加法運算函數(shù)</p><p> Display(); //輸出結(jié)果//調(diào)用輸出函數(shù)&l
34、t;/p><p> printf("\n\n是否繼續(xù)計算(Y/N):"); //詢問是否繼續(xù)計算</p><p> getchar();</p><p> Yes_No=getchar();</p><p> } while(Yes_No=='y'||Yes_No==
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-長整數(shù)運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--大整數(shù)的運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--長整數(shù)的四則運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---長整數(shù)的代數(shù)計算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-一元多項式加減運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-一元多項式加減運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 稀疏矩陣的運算
- 任意長整數(shù)加法運算-課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--文章編輯集合運算
- 數(shù)據(jù)結(jié)構(gòu)-任意長整數(shù)加法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--稀疏矩陣運算器
- 數(shù)據(jù)結(jié)構(gòu)----集合運算課程設(shè)計報告(c++)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計集合的交并差運算
- 課程設(shè)計 長整數(shù)四則運算
- 課程設(shè)計 長整數(shù)四則運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--廣義表運算的驗算設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計一元多項式的加減法運算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
評論
0/150
提交評論