重慶大學(xué)本科學(xué)生課程設(shè)計(jì)任務(wù)書(shū)——長(zhǎng)整數(shù)運(yùn)算
《重慶大學(xué)本科學(xué)生課程設(shè)計(jì)任務(wù)書(shū)——長(zhǎng)整數(shù)運(yùn)算》由會(huì)員分享,可在線閱讀,更多相關(guān)《重慶大學(xué)本科學(xué)生課程設(shè)計(jì)任務(wù)書(shū)——長(zhǎng)整數(shù)運(yùn)算(17頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 方案設(shè)計(jì)重慶大學(xué)本科學(xué)生課程設(shè)計(jì)任務(wù)書(shū)課程設(shè)計(jì)題目 長(zhǎng)整數(shù)運(yùn)算學(xué)院 軟件學(xué)院 專業(yè) 軟件工程 年級(jí) 16 級(jí)已知參數(shù)和設(shè)計(jì)要求:[問(wèn)題描述]設(shè)計(jì)一個(gè)程序?qū)崿F(xiàn)兩個(gè)任意長(zhǎng)的整數(shù)求和運(yùn)算。學(xué)生應(yīng)完成的工作:[基本要求]利用雙項(xiàng)循環(huán)鏈表實(shí)現(xiàn)長(zhǎng)整數(shù)的存儲(chǔ),每個(gè)結(jié)點(diǎn)含一個(gè)整型變量。任何整型變量的范圍是- (2 15-1)~(2 15-1) 。輸入和輸出形式:按中國(guó)對(duì)于長(zhǎng)整數(shù)的表示習(xí)慣,每四位一組,組間用逗號(hào)隔開(kāi)。[測(cè)試數(shù)據(jù)](1) 0;0;應(yīng)輸出“0” 。(2) -2345,6789;-7654,3211;應(yīng)輸出“-1,0000,0000” 。(3) -9999,9999;1,0000,0000,0000 ;應(yīng)輸出“9999,0000,0001” 。(4) 1,0001,000;-1,0001,0001 ;應(yīng)輸出“0” 。(5) 1,0001,0001;-1,0001,0000 ;應(yīng)輸出“1” 。目前資料收集情況(含指定參考資料):1. Robert L. Kruse 編. Data Structures and Program Design in C++. 高等教育出版社,2001.2. 嚴(yán)蔚敏編. 數(shù)據(jù)結(jié)構(gòu). 清華大學(xué)出版社,2000.3. 李春葆編. 數(shù)據(jù)結(jié)構(gòu)教程. 清華大學(xué)出版社,2002.4. Clifford A.Shaffer 著. 張銘,劉曉丹等譯. 數(shù)據(jù)結(jié)構(gòu)與算法分析(第三版).電子工業(yè)出版社,2013.10.課程設(shè)計(jì)的工作計(jì)劃:第 1~4 天 完成方案設(shè)計(jì)與程序框圖 第 4~10 天 編寫程序代碼第 10~15 天 程序調(diào)試分析和結(jié)果第 15~20 天 課程設(shè)計(jì)報(bào)告和總結(jié)任務(wù)下達(dá)日期 2017 年 12 月 15 日完成日期 2018 年 1 月 12 日指導(dǎo)教師 文俊浩 (簽名) 學(xué) 生 陳勇 (簽名)說(shuō)明:1、學(xué)院、專業(yè)、年級(jí)均填全稱,如:光電工程學(xué)院、測(cè)控技術(shù)、2003。2、本表除簽名外均可采用計(jì)算機(jī)打印。本表不夠,可另附頁(yè),但應(yīng)在頁(yè)腳添加頁(yè)碼。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 方案設(shè)計(jì)1.方案設(shè)計(jì)1.1 問(wèn)題描述利用雙項(xiàng)循環(huán)鏈表實(shí)現(xiàn)長(zhǎng)整數(shù)的存儲(chǔ),每個(gè)結(jié)點(diǎn)含一個(gè)整型變量。任何整型變量的范圍是- ( 215-1) ~(2 15-1) 。輸入和輸出形式:按中國(guó)對(duì)于長(zhǎng)整數(shù)的表示習(xí)慣,每四位一組,組間用逗號(hào)隔開(kāi)。1.2 需求分析核心問(wèn)題:長(zhǎng)整形數(shù)的進(jìn)行拆分再加減數(shù)據(jù)模型(邏輯結(jié)構(gòu)):類似匯編的帶進(jìn)位加法和帶進(jìn)位減法存儲(chǔ)結(jié)構(gòu):循環(huán)鏈表,字符數(shù)組核心算法:字符數(shù)組提取數(shù)字,鏈表的加減輸入數(shù)據(jù):兩個(gè)長(zhǎng)整形數(shù)字輸出數(shù)據(jù):加減結(jié)果通過(guò)以上分析,該程序具有可行性。1.3 運(yùn)行環(huán)境硬件開(kāi)發(fā)環(huán)境:PC 機(jī)軟件開(kāi)發(fā)環(huán)境:VS2015操作系統(tǒng)環(huán)境 Window 1.4 概要設(shè)計(jì)整個(gè)設(shè)計(jì)的流程圖數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 方案設(shè)計(jì)主函數(shù)輸入數(shù)據(jù) 存入鏈表 判斷運(yùn)算輸出運(yùn)算圖 1.1數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 算法設(shè)計(jì)2.算法設(shè)計(jì)2.1 算法設(shè)計(jì)思想用兩個(gè)字符數(shù)組儲(chǔ)存輸入的字符串,再將字符串中的每個(gè) 4 位整數(shù)轉(zhuǎn)入成鏈表的關(guān)鍵節(jié)點(diǎn)分別儲(chǔ)存到兩個(gè)鏈表中,這樣就讓長(zhǎng)整數(shù)分割開(kāi)來(lái),使得儲(chǔ)存成為現(xiàn)實(shí),然后再分別把兩個(gè)鏈表的節(jié)點(diǎn)相加儲(chǔ)存到另一個(gè)鏈表中,用 flag 來(lái)判斷有無(wú)進(jìn)位與借位,有進(jìn)位flag 置為 1,無(wú)進(jìn)位 flag 置為-1,最后將結(jié)果鏈表按照要求的格式輸出即可2.2 算法設(shè)計(jì)的對(duì)應(yīng)方式如 1,1111,4444,5555,3334,0000,0001 與 1,0000,2321,9000,5555,0000 相加圖 2長(zhǎng)整數(shù) 1 1111 4444 5555 3334 0000 0001長(zhǎng)整數(shù) 1 0000 2321 9000 5555 0000flag 0 0 0 1(有進(jìn)位)0 0 0相加1 1112 4444 7877 2334 5555 0001數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 詳細(xì)設(shè)計(jì)3.詳細(xì)設(shè)計(jì)3.1 設(shè)計(jì)思想用字符數(shù)組來(lái)存儲(chǔ)輸入的數(shù),用循環(huán)鏈表的儲(chǔ)存整數(shù)的節(jié)點(diǎn),以及計(jì)算的結(jié)果。用鏈表的好處可以節(jié)約空間,它可以隨著數(shù)據(jù)的長(zhǎng)短來(lái)調(diào)整大小,同時(shí),雙向循環(huán)鏈表也方便了查找和刪除。3.2 設(shè)計(jì)關(guān)鍵算法節(jié)點(diǎn)類:public:E element; // Value for this nodeLink* next; // Point to next node in listLink*prev; //Pointer to previous node// ConstructorsLink(const E& it, Link* prevp,Link*nextval){element = it; next = nextval;prev = prevp;}Link(Link*prevp = NULL,Link* nextval = NULL) { next = nextval; prev = prevp; }雙向循環(huán)鏈表類:template class DoubleLList {private:Link* head; // Pointer to list headerLink* tail; // Pointer to last elementLink* curr; // Access to current elementint cnt; // Size of listpublic:void init() { // Intialization helper methodcurr = tail = head = new Link(0,NULL,NULL);tail->next = head;head->prev = tail;數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 詳細(xì)設(shè)計(jì)cnt = 1;}void removeall() { // Return link nodes to free storewhile (head != tail) {curr = head;head = head->next;delete curr;}delete head;}//DoubleLList() { init(); } // ConstructorDoubleLList(const E&it) //constructor{curr = tail = head = new Link(it, NULL, NULL);tail->next = head;head->prev = tail;cnt = 0;}DoubleLList() //Constructor,make the head element with 0{curr = tail = head = new Link(0, NULL, NULL);head->next = head->prev = head;cnt = 1;}// Destructor~DoubleLList() {removeall(); }void clear() { removeall(); init(); } // Clear list// Insert "it" at current positionvoid insert(const E&it) {curr->next = curr->next->prev = new Link(it, curr, curr->next);if (tail == head){tail = curr->next;}cnt++;}數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 詳細(xì)設(shè)計(jì)void append(const E& it) { // Append "it" to listif (cnt == 1) //當(dāng)節(jié)點(diǎn)為1的時(shí)候{head->next=head->prev=tail = new Link(it, head, head);}elsetail=head->prev = tail->next = new Link(it, tail, head);cnt++;}輸入:void input(char *a, char *b) //輸入字符串{cout > a;cout > b;}轉(zhuǎn)化:(將輸入的輸入轉(zhuǎn)化到鏈表中)//將儲(chǔ)存在字符串?dāng)?shù)組中的整數(shù)轉(zhuǎn)化到鏈表中void charTransformList(DoubleLList &L1, char a[]){int temp=0, r,count,flag=0 ; //temp用于存儲(chǔ)中間每個(gè)4位整數(shù),r用于表示在4位整數(shù)的哪個(gè)位上,count用于表示a的字符串長(zhǎng)度,flag=0表示整數(shù),1表示負(fù)數(shù)count = strlen(a);if (a[0] == '-')flag = 1;for (int i = count - 1, j = 0; i >= 0+flag; i--, j++){int m = j / 5; //m用于記錄第幾個(gè)數(shù)r = j % 5;if (r == 4){continue;}else if (r!=4&&(a[i] '9')) { //當(dāng)輸入格式錯(cuò)誤的時(shí)候,退出cout strlen(b)&&a[0] == '-'&&b[0] != '-'))return -1;else if(a[0]=='-'&&b[0]!='-'&&strlen(a)-1==strlen(b)) //當(dāng)兩整數(shù)長(zhǎng)度相同,符號(hào)相反時(shí){for (int i = 0; i b[i]) {return -1;break;}if (a[i+1] b[i + 1]) {return 1;break;}if (a[i] strlen(b) || a[0] != '-'&&strlen(a) > strlen(b) - 1) //當(dāng)?shù)谝粋€(gè)整數(shù)絕對(duì)值長(zhǎng)度大于第二個(gè)整數(shù)絕對(duì)值長(zhǎng)度,返回truereturn 1;else if (a[0] == '-'&&strlen(a) - 1 b[i]) {return 1;break;}if (a[i + 1] b[i + 1]) {return 1;break;}if (a[i] &L1, DoubleLList&L2, DoubleLList&L3, char charArray1[100], char charArray2[100]){int flag = 0, temp; //保存是否有進(jìn)位或則是借位,進(jìn)位為1,未進(jìn)位為0,借位為-1;temp用為暫時(shí)存儲(chǔ)鏈表相加的結(jié)果cout = 10000) //處理進(jìn)位{flag = 1;temp = temp - 10000;}L3.append(temp);if ((i == (L1.length() - 2)) && flag == 1) //當(dāng)最后有進(jìn)位的時(shí)候L3.append(1);}}else if (L1.length() > L2.length()) //當(dāng)L1的長(zhǎng)度大于L2的長(zhǎng)度{L1.moveToStart();L2.moveToStart();for (int i = 0; i = 10000){flag = 1;temp -= 10000;}L3.append(temp);if ((i == L1.length() - 2) && flag == 1) //當(dāng)最后有進(jìn)位的時(shí)候L3.append(1);}}else //當(dāng)L2的長(zhǎng)度大于L1的長(zhǎng)度{L1.moveToStart();L2.moveToStart();for (int i = 0; i = 10000){flag = 1;temp -= 10000;}L3.append(temp);if ((i == L2.length() - 2) && flag == 1) //當(dāng)最后有進(jìn)位的時(shí)候L3.append(1);}}}else //當(dāng)符號(hào)不相同時(shí){if (aboluteValue(charArray1, charArray2) == 0) //如果兩個(gè)整數(shù)絕對(duì)值大小相等,結(jié)果為0L3.append(0);else if (aboluteValue(charArray1, charArray2) > 0) //如果第一個(gè)整數(shù)絕對(duì)值大于數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 詳細(xì)設(shè)計(jì)第二個(gè)整數(shù)的絕對(duì)值{L1.moveToStart();L2.moveToStart();for (int i = 0; i = L2.getValue()){temp = L1.getValue() - L2.getValue() + flag;flag = 0; //沒(méi)有借位}else{temp = L1.getValue() + 10000 - L2.getValue();flag = -1; //有借位}}else{if (L1.getValue() + flag >= 0){temp = L1.getValue() + flag;flag = 0; //沒(méi)有借位}else{temp = L1.getValue() + flag + 10000;flag = -1; //有借位}}L3.append(temp);}}//第二個(gè)整數(shù)大于第一個(gè)整數(shù)絕對(duì)值的時(shí)候else{L1.moveToStart();L2.moveToStart();for (int i = 0; i = L1.getValue()){temp = L2.getValue() - L1.getValue() + flag;flag = 0; //沒(méi)有借位}else{temp = L2.getValue()+flag + 10000 - L1.getValue();flag = -1; //有借位}}else //L1中整數(shù)遍歷完后,只剩下L2的整數(shù){if (L2.getValue() + flag >= 0){temp = L2.getValue() + flag;flag = 0; //沒(méi)有借位}else{temp = L2.getValue() + flag + 10000;flag = -1; //有借位}}L3.append(temp);}}}}輸出:void resultPrint(DoubleLListL3,int flag) //L3存儲(chǔ)了相加的結(jié)果,flag儲(chǔ)存了結(jié)果的正負(fù),結(jié)果顯示到屏幕上{if(flag=1000){cout = 100){cout = 10){cout << "00" << L3.getValue();}else{cout << "000" << L3.getValue();}}cout << endl;}數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 調(diào)試分析4.調(diào)試分析_ 圖 6數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 參考文獻(xiàn)5.總結(jié)通過(guò)半個(gè)多月的學(xué)習(xí)和實(shí)踐,解決實(shí)際問(wèn)題,讓我對(duì)鏈表有了更深的了解,對(duì)數(shù)據(jù)結(jié)構(gòu)產(chǎn)生了濃厚的興趣,同時(shí)也讓我提高了解決實(shí)際問(wèn)題的能力。我們要不斷的通過(guò)上機(jī)來(lái)提高自己的學(xué)習(xí)水平,在上機(jī)的同時(shí)改正了自己對(duì)某些算法的錯(cuò)誤使用,使自己在通過(guò)程序解決問(wèn)題時(shí)抓住關(guān)鍵算法,有了算法設(shè)計(jì)思想和流程圖,并用 C++語(yǔ)言描繪出關(guān)鍵算法。以前我對(duì)數(shù)據(jù)結(jié)構(gòu)(C++語(yǔ)言描述)的一些標(biāo)準(zhǔn)庫(kù)函數(shù)不太了解,還有對(duì)函數(shù)調(diào)用的正確使用不夠熟悉,還有對(duì) C 語(yǔ)言中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過(guò)實(shí)踐,使我在這幾個(gè)方面的認(rèn)識(shí)有所提高。讓自己有一定的能力去改正一些常見(jiàn)的錯(cuò)誤語(yǔ)法,很高興這半個(gè)多月的學(xué)習(xí)讓我對(duì)數(shù)據(jù)結(jié)構(gòu)(C++語(yǔ)言描述)有了新的認(rèn)識(shí),所以后在學(xué)習(xí)過(guò)程中,我會(huì)更加注視實(shí)踐操作,使自己便好地學(xué)好計(jì)算機(jī)。在這次課程設(shè)計(jì)的實(shí)驗(yàn)中,我收獲了許多知識(shí),通過(guò)查找大量資料,請(qǐng)教老師,以及不懈的努力,也培養(yǎng)了獨(dú)立思考、動(dòng)手操作的能力。我也學(xué)會(huì)了許多學(xué)習(xí)和解決實(shí)際問(wèn)題的方法,讓我受益匪淺。時(shí)間的緊缺成為一個(gè)很大的問(wèn)題。也希望老師可以為我們知道一下以后的發(fā)展方向。如果可以讓每個(gè)人都有動(dòng)手焊接以及參與其他的各個(gè)流程,有專門的知道就更好了。課程設(shè)計(jì)對(duì)我來(lái)說(shuō),趣味性強(qiáng),不僅鍛煉能力,而且可以學(xué)到很多東西,在與老師和同學(xué)的交流過(guò)程中,互動(dòng)學(xué)習(xí),將知識(shí)融會(huì)貫通,也增強(qiáng)了我和同學(xué)之間的團(tuán)隊(duì)合作的能力。讓我們知道只要努力,集中精力解決問(wèn)題,一定會(huì)有收獲的,過(guò)程也是很重要的。在這次課程設(shè)計(jì)中我們要學(xué)會(huì)利用時(shí)間,在規(guī)定的時(shí)間內(nèi)完成我們的任務(wù),要逐漸養(yǎng)成用 C++語(yǔ)言編寫程序的良好習(xí)慣。這些對(duì)我來(lái)說(shuō)都是一種鍛煉,一個(gè)知識(shí)積累的過(guò)程,一種能力的提高。要打好基礎(chǔ),才能用更好的辦法,更簡(jiǎn)潔明了的程序解決實(shí)際問(wèn)題,只有這樣才能進(jìn)一步的取得更好的成績(jī)。我們會(huì)更加努力,努力的去彌補(bǔ)自己的缺點(diǎn),發(fā)展自己的優(yōu)點(diǎn),去充實(shí)自己,只有在了解了自己的長(zhǎng)短之后,我們會(huì)更加珍惜擁有的,更加努力的去完善它,增進(jìn)它。參考文獻(xiàn)《數(shù)據(jù)結(jié)構(gòu)與算法分析第三版》 (C++)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 參考文獻(xiàn)17- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
10 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 重慶大學(xué) 本科 學(xué)生 課程設(shè)計(jì) 任務(wù)書(shū) 整數(shù) 運(yùn)算
鏈接地址:http://appdesigncorp.com/p-359775.html