版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課 程 設(shè) 計(jì) 報(bào) 告</p><p> 課程名稱(chēng) 數(shù)據(jù) 結(jié)構(gòu) </p><p> 題 目 長(zhǎng)整數(shù)運(yùn)算 </p><p> 學(xué)生姓名 </p><p> 班級(jí)/學(xué)號(hào) </p&
2、gt;<p><b> 需求分析</b></p><p> 設(shè)計(jì)一個(gè)實(shí)現(xiàn)任意長(zhǎng)的整數(shù)間進(jìn)行四則運(yùn)算的程序,要求完成長(zhǎng)整數(shù)的加運(yùn)算和減運(yùn)算。長(zhǎng)整數(shù)的長(zhǎng)度沒(méi)有限制,可以是任意長(zhǎng)。正確處理好運(yùn)算之后的進(jìn)位和借位。</p><p> 輸入:[-]**,****,****;[-]*,****,****,**** //[-]表示“-”可選</
3、p><p> 輸出:**,****,****,****是否繼續(xù)計(jì)算(Y/N):</p><p> 功能:能正確進(jìn)行相關(guān)數(shù)據(jù)的加減運(yùn)算</p><p><b> 測(cè)試數(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è)計(jì)</b></p><p> 使用雙向循環(huán)鏈表實(shí)現(xiàn)長(zhǎng)整數(shù)的運(yùn)算及存儲(chǔ),構(gòu)造雙向循環(huán)鏈表,創(chuàng)建雙向循環(huán)鏈表表示兩個(gè)整數(shù)</p><p> 設(shè)計(jì)兩整數(shù)相加的函數(shù)Add(),addtwo(),其中Add()調(diào)用addtwo()函數(shù),addtwo()具體實(shí)現(xiàn)兩個(gè)整數(shù)的加減操作,進(jìn)位及借位問(wèn)題;設(shè)計(jì)顯示函數(shù)Display()及主函數(shù)main()</p>
6、;<p><b> 詳細(xì)設(shè)計(jì)</b></p><p><b> 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p><b> 雙向循環(huán)鏈表的構(gòu)造</b></p><p> typedef struct LinkNode{</p><p> int data;
7、 //記錄每個(gè)節(jié)點(diǎn)的整數(shù)(小于)</p><p> LinkNode *next, *pre; //記錄下一個(gè)節(jié)點(diǎn)的地址和前一個(gè)節(jié)點(diǎn)的地址</p><p> }linklist;</p><p> 創(chuàng)建兩個(gè)長(zhǎng)整數(shù)的鏈表</p><p><b> 偽算法 </b></p>&
8、lt;p> void Creat(char a[]) //引入字符串,創(chuàng)立兩個(gè)鏈表,分別表示兩個(gè)整數(shù)</p><p><b> {</b></p><p> int 記錄字符串i;記錄加數(shù)節(jié)點(diǎn)數(shù)j;記錄被加數(shù)節(jié)點(diǎn)數(shù)s;標(biāo)記字符串中的‘-’號(hào)</p><p> 記錄字符串中的字符轉(zhuǎn)化為整數(shù)的值k,
9、使每個(gè)節(jié)點(diǎn)記錄位l</p><p> while(指針?biāo)覆皇恰?;?被加數(shù)字符數(shù)m自動(dòng)加1 //m記錄字符串中被加數(shù)的字符數(shù)</p><p> n=m; </p><p> while(執(zhí)政沒(méi)有指到結(jié)尾處) 總字符串n位數(shù)自動(dòng)加1; //n記錄字符串的總字符數(shù)<
10、;/p><p><b> if被加數(shù)不是負(fù)數(shù)</b></p><p><b> {</b></p><p> head0->data=(-1); //記錄整數(shù)符號(hào)</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()計(jì)算的乘方</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é)點(diǎn)數(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; //存儲(chǔ)整數(shù)符號(hào)和節(jié)點(diǎn)數(shù)</p><p><b> }</b></p><p><b> 調(diào)試分析</b></p><p> 調(diào)試過(guò)程中,連續(xù)輸入數(shù)字運(yùn)算,速度會(huì)明顯變慢,發(fā)現(xiàn)在初始化鏈表及運(yùn)算后沒(méi)有釋放鏈表,造成系統(tǒng)資源浪費(fèi),經(jīng)改造后自愛(ài)后面添加了析構(gòu)函數(shù)</p&
16、gt;<p><b> 算法的時(shí)空分析</b></p><p> 創(chuàng)建整數(shù)鏈表有三個(gè)循環(huán),次數(shù)都為n。時(shí)間復(fù)雜度和空間復(fù)雜都都為O(n)</p><p><b> 使用說(shuō)明和測(cè)試結(jié)果</b></p><p> 1、使用說(shuō)明:用戶按照屏幕所顯示的提示來(lái)正確輸入數(shù)字</p><p>
17、; 其中[-]表示“-”為可選,從右至左每四位數(shù)字一個(gè)“,”</p><p><b> 2、測(cè)試結(jié)果:</b></p><p><b> 心得體會(huì)</b></p><p> 通過(guò)此實(shí)驗(yàn),加深了我對(duì)鏈表的基本操作,對(duì)雙向鏈表及循環(huán)鏈表的操作及實(shí)際運(yùn)用有了很深的體會(huì),在處理數(shù)字的進(jìn)位借位時(shí)有了進(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; //記錄每個(gè)節(jié)點(diǎn)的整數(shù)(小于)</p><p> LinkNode *next, *pre; //記錄下一個(gè)節(jié)點(diǎn)的地址和前一個(gè)節(jié)點(diǎn)的地址</p><p> }linklist
20、;</p><p> linklist *head0;</p><p> linklist *head1; //head0,head1分別記錄兩個(gè)整數(shù)鏈表的頭指針</p><p> linklist *currptr;</p><p> linklist *result; //result記錄結(jié)果鏈表的頭指針
21、</p><p> void Creat(char a[]){ //引入字符串,創(chuàng)立兩個(gè)鏈表,分別表示兩個(gè)整數(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é)點(diǎn)數(shù);s記錄被加數(shù)節(jié)點(diǎn)數(shù);w標(biāo)記字符串中的‘-’號(hào)</p>
22、;<p> //k記錄字符串中的字符轉(zhuǎn)化為整數(shù)的值,l使每個(gè)節(jié)點(diǎn)記錄位</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ù)符號(hào)</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()計(jì)算的乘方</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é)點(diǎn)數(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; //存儲(chǔ)整數(shù)符
29、號(hào)和節(jié)點(diǎn)數(shù)</p><p><b> }</b></p><p><b> 測(cè)試函數(shù):</b></p><p> void main() //主函數(shù)</p><p><b> {</b></p><p>
30、char ch[20];//鏈表對(duì)象</p><p> char Yes_No;</p><p> LinkList() ;</p><p> LinkList1();</p><p> printf("|輸入兩個(gè)任意長(zhǎng)的整數(shù)。 |\n");</p><p><b&
31、gt; do{</b></p><p> printf("|輸入形式為:[-]**,****,****;[-]*,****,****,****|\n");</p><p> printf("|即符號(hào)+數(shù),每位加一個(gè)',',兩個(gè)數(shù)之間用';'隔開(kāi)|\n");</p><p>
32、printf("|請(qǐng)輸入你要計(jì)算的兩個(gè)數(shù): \n");</p><p> scanf("%s",&ch); //輸入任意長(zhǎng)字符串</p><p> LinkList() ; </p><p>
33、; Creat(ch); //把字符串轉(zhuǎn)化為整數(shù),并存到鏈表中//調(diào)用轉(zhuǎn)化函數(shù)</p><p> Add(); //實(shí)現(xiàn)兩個(gè)整數(shù)相加//調(diào)用add()加法運(yùn)算函數(shù)</p><p> Display(); //輸出結(jié)果//調(diào)用輸出函數(shù)&l
34、t;/p><p> printf("\n\n是否繼續(xù)計(jì)算(Y/N):"); //詢問(wèn)是否繼續(xù)計(jì)算</p><p> getchar();</p><p> Yes_No=getchar();</p><p> } while(Yes_No=='y'||Yes_No==
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-長(zhǎng)整數(shù)運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--大整數(shù)的運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--長(zhǎng)整數(shù)的四則運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---長(zhǎng)整數(shù)的代數(shù)計(jì)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-一元多項(xiàng)式加減運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-一元多項(xiàng)式加減運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-- 稀疏矩陣的運(yùn)算
- 任意長(zhǎng)整數(shù)加法運(yùn)算-課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文章編輯集合運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)-任意長(zhǎng)整數(shù)加法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--稀疏矩陣運(yùn)算器
- 數(shù)據(jù)結(jié)構(gòu)----集合運(yùn)算課程設(shè)計(jì)報(bào)告(c++)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)集合的交并差運(yùn)算
- 課程設(shè)計(jì) 長(zhǎng)整數(shù)四則運(yùn)算
- 課程設(shè)計(jì) 長(zhǎng)整數(shù)四則運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--廣義表運(yùn)算的驗(yàn)算設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)一元多項(xiàng)式的加減法運(yùn)算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論