數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及數(shù)電課程設(shè)計(jì)報(bào)告書-汽車尾燈_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及數(shù)電課程設(shè)計(jì)報(bào)告書-汽車尾燈_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及數(shù)電課程設(shè)計(jì)報(bào)告書-汽車尾燈_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及數(shù)電課程設(shè)計(jì)報(bào)告書-汽車尾燈_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及數(shù)電課程設(shè)計(jì)報(bào)告書-汽車尾燈_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

光信111景德鎮(zhèn)陶瓷學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)設(shè)計(jì)題目:1、通訊錄管理9、撲克牌游戲14、拓?fù)渑判虬嗉?jí):計(jì)算機(jī)科學(xué)與技術(shù)1班學(xué)生姓名:學(xué)號(hào):起止日期:指導(dǎo)教師:題目1、通訊錄管理1、問題描述通訊錄管理是一個(gè)比較實(shí)用的小型管理系統(tǒng),該系統(tǒng)用于對(duì)通訊人員的姓名、電話號(hào)碼的管理。該設(shè)計(jì)采用菜單作為應(yīng)用程序的主要界面,用控制語句來改變程序執(zhí)行的順序,控制語句是實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)。該設(shè)計(jì)的任務(wù)是利用一個(gè)簡(jiǎn)單實(shí)用的菜單,通過菜單項(xiàng)進(jìn)行選擇,實(shí)現(xiàn)和完成通訊錄管理中常用的幾個(gè)不同的功能。2、要求功能要求:建立通訊錄的鏈表;插入通訊錄信息;查詢通訊錄信息;刪除通訊錄信息;輸出通訊錄信息。規(guī)定:輸入通訊錄的信息:編號(hào)、姓名、性別、電話、地址界面要求:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。存儲(chǔ)結(jié)構(gòu):利用單鏈表存儲(chǔ)通訊錄信息,同時(shí)要求將通訊信息相關(guān)數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)文件中。(數(shù)據(jù)文件的數(shù)據(jù)讀寫方法等相關(guān)內(nèi)容在c語言程序設(shè)計(jì)的書上,請(qǐng)自學(xué)解決)請(qǐng)?jiān)谧詈蟮纳辖毁Y料中指明你用到的存儲(chǔ)結(jié)構(gòu);測(cè)試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、整體非法數(shù)據(jù);3、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試,以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫明。系統(tǒng)分析與概要設(shè)計(jì)根據(jù)問題描述和要求,系統(tǒng)要求能夠按姓名查找、增加、刪除和保存各學(xué)生的信息。確定程序應(yīng)該具備如下功能:“查詢學(xué)生信息”、“增加學(xué)生信息”、“修改學(xué)生信息”“刪除學(xué)生信息”、“數(shù)據(jù)存盤”基本模塊。系統(tǒng)可以將學(xué)生信息數(shù)據(jù)保存到磁盤文件student.txt,從而可以通過磁盤文件讀出學(xué)生數(shù)據(jù)信息,為了便于統(tǒng)計(jì)在生成學(xué)生信息時(shí)同時(shí)生成學(xué)生編號(hào),這樣每輸入一個(gè)學(xué)生信息編號(hào)順序加1,這樣也方便了管理員查詢學(xué)生信息。詳細(xì)設(shè)計(jì)和編碼數(shù)據(jù)類型定義根據(jù)系統(tǒng)要求,可以將姓名和郵編和聯(lián)系電話通訊地址定義為字符型。各模塊算法描述查詢學(xué)生信息:Que_name()輸入要查詢的學(xué)生姓名,比較名字與保存的信息是否相同,若相同則查找到,否則,沒查找到。增加學(xué)生信息:Add()輸入要添加的學(xué)生信息并保存。刪除學(xué)生信息:Del()輸入要?jiǎng)h除的學(xué)生姓名,若與數(shù)據(jù)相同則刪除,否則輸出查找不到該信息。修改學(xué)生信息:Mod()輸入要修改的學(xué)生姓名,輸入要修改的信息,并確認(rèn)。數(shù)據(jù)存盤:Sav()創(chuàng)建文件,將信息寫入文件。程序關(guān)鍵算法流程圖主函數(shù)流程(2)某操作算法流程Student::Add()(3)Student::Del()(4)Student::Mod()(5)Student::Que_name()Student::Sav()(7)Student::Load()三、調(diào)試結(jié)果運(yùn)行界面錄入信息界面查詢信息界面修改信息界面源代碼:#include<iostream>#include<string.h>#include<windows.h>usingnamespacestd;structstudent{charnum[20];charname[20];charaddress[50];charsex[20];chartelphone[20];}student[2000];//定義學(xué)生類結(jié)構(gòu)體voidMenu();//聲明菜單函數(shù)voidInput();//聲明錄入函數(shù)voidSav(int);//聲明保存函數(shù)intLoad();//聲明信息導(dǎo)入函數(shù)voidQue_name();//聲明按姓名查找函數(shù)voidDel();//聲明刪除函數(shù)voidMod();//聲明修改函數(shù)voidScan();//聲明瀏覽函信息數(shù)voidAdd();//聲明添加函數(shù)voidMenu()//菜單函數(shù){cout<<"\t*******歡迎來到景德鎮(zhèn)陶瓷學(xué)院學(xué)生通訊錄信息管理系統(tǒng)!*******"<<endl;cout<<"\t**請(qǐng)按要求正確錄入學(xué)生的通訊錄信息**"<<endl;cout<<"\t**1.錄入相關(guān)學(xué)生通訊錄信息**"<<endl;cout<<"\t**2.保存相關(guān)學(xué)生通訊錄信息**"<<endl;cout<<"\t**3.按姓名查找相關(guān)學(xué)生通訊錄信息**"<<endl;cout<<"\t**4.修改相關(guān)學(xué)生通訊錄信息**"<<endl;cout<<"\t**5.刪除相關(guān)學(xué)生通訊錄信息**"<<endl;cout<<"\t**6.添加相關(guān)學(xué)生通訊錄信息**"<<endl;cout<<"\t**7.退出該學(xué)生通訊錄信息系統(tǒng)**"<<endl;cout<<"\t*****************歡迎您的光臨**************************"<<endl;}voidmain()//主函數(shù)的實(shí)現(xiàn){intn;loop: Menu();//調(diào)用菜單函數(shù) cout<<"請(qǐng)輸入您所要進(jìn)行的操作過程的序號(hào)(1-7):"; cin>>n; system("cls");switch(n) { case1:cout<<"請(qǐng)輸入相關(guān)學(xué)生通訊信息:"<<endl;Input();system("cls");gotoloop; case2:cout<<"請(qǐng)保存相關(guān)學(xué)生通訊信息:"<<endl;Sav(n);gotoloop; case3:cout<<"按姓名查找相關(guān)學(xué)生通訊信息:"<<endl;Que_name();gotoloop; case4:cout<<"修改相關(guān)學(xué)生通訊信息:"<<endl;Mod();gotoloop; case5:cout<<"刪除相關(guān)學(xué)生通訊信息:"<<endl;Del();gotoloop; case6:cout<<"添加相關(guān)學(xué)生通訊信息:"<<endl;Add();gotoloop;//用goto語句調(diào)至指定行 default:break; }cout<<"\t\t\t*********歡迎您的使用!**********"<<endl;}voidInput()//學(xué)生通訊信息錄入函數(shù){inti,m;cout<<"請(qǐng)輸入您所要輸入的學(xué)生通訊信息的個(gè)數(shù)(1-2000):";cin>>m;for(i=0;i<m;i++){ cout<<"請(qǐng)輸入學(xué)生的編號(hào):"<<endl; cin>>student[i].num; cout<<"請(qǐng)輸入通訊錄中學(xué)生的姓名:"<<endl; cin>>student[i].name; cout<<"請(qǐng)輸入通訊錄中學(xué)生的性別:"<<endl; cin>>student[i].sex; cout<<"請(qǐng)輸入通訊錄中學(xué)生的電話號(hào)碼:"<<endl; cin>>student[i].telphone; cout<<"請(qǐng)輸入通訊錄學(xué)生的地址(格式如***省**市**縣**鄉(xiāng)):"<<endl; cin>>student[i].address; cout<<"該學(xué)生的通訊信息已經(jīng)輸入完畢,請(qǐng)繼續(xù)輸入下一個(gè)學(xué)生通訊信息!"<<endl;}}voidSav(intm)//如何寫入信息?保存通訊錄文件函數(shù){inti;FILE*fp;if((fp=fopen("E:\\student.dat","wb"))==NULL)//創(chuàng)建文件并判斷是否能打開{cout<<"該文件打開失敗。"<<endl;exit(0);}for(i=0;i<m;i++) //將內(nèi)存中學(xué)生通訊信息輸入到磁盤里去if(fwrite(&student[i],sizeof(structstudent),1,fp)!=1)//申請(qǐng)空間,寫入學(xué)生信息,為何有個(gè)1???{ cout<<"信息寫入失??!"<<endl;fclose(fp);}}voidQue_name()//按姓名查找函數(shù){charname1[10];inti,m;m=Load();cout<<"請(qǐng)輸入您要查詢學(xué)生通訊信息的名字"<<endl;cin>>name1;for(i=0;i<m;i++)if(strcmp(name1,student[i].name)==0) { cout<<"查找到該學(xué)生的通訊信息如下:"<<endl; Scan(); break; }else{ cout<<"抱歉,查無此人!"<<endl; return;}}voidScan(){inti,m;m=Load();//不明白這個(gè),把函數(shù)賦給m嗎?cout<<"輸出學(xué)生通訊信息如下:"<<endl;for(i=0;i<m;i++)cout<<"編號(hào):"<<student[i].num<<""<<"姓名:"<<student[i].name<<""<<"性別:"<<student[i].sex<<""<<"聯(lián)系電話:"<<student[i].telphone<<""<<"通訊地址:"<<student[i].address<<""<<endl;}intLoad()//導(dǎo)入函數(shù){FILE*fp;inti=0;if((fp=fopen("E:\\student.dat","rb"))==NULL){ cout<<"文件打開失??!"<<endl; exit(0);}else{ do { fread(&student[i],sizeof(structstudent),1,fp); i++; }while(feof(fp)==0);} return(i); fclose(fp);}voidDel()//刪除函數(shù){intm;inti,j,n,t,f;charname1[10]; m=Load();cout<<"查看學(xué)生的通訊信息如下:"<<endl;Scan();//調(diào)用瀏覽函數(shù)cout<<"請(qǐng)輸入您想刪除的通訊信息的名字:"<<endl; cin>>name1;for(f=1,i=0;f&&i<m;i++){ if(strcmp(student[i].name,name1)==0) { cout<<"查找到該學(xué)生的通訊信息如下:"<<endl; Scan(); cout<<"如果要?jiǎng)h除該生信息,請(qǐng)按1,否則按0"<<endl; cin>>n; if(n==1)//如果刪除,則其他的信息都向前移一行 { for(j=i;j<m-1;j++) { student[j]=student[j+1]; } f=0; } } }if(!f)m=m-1;//??? elsecout<<"抱歉!未找到該生信息。"<<endl; cout<<"輸出其他學(xué)生通訊信息如下:"<<endl; Scan();//調(diào)用瀏覽函數(shù) Sav(m);//調(diào)用保存函數(shù) cout<<"如果您想繼續(xù)刪除通訊信息,請(qǐng)按1,否則按0。"<<endl; cin>>t; switch(t) { case1:Del();break; case0:break; default:break; };}voidMod()//修改函數(shù){ charnum[20],tel[20],sex[20]; charname[20]; charaddress[50]; intb,c,i,n,t,f; intm=Load();//導(dǎo)入文件內(nèi)的信息 cout<<"該學(xué)生先前的通訊信息為:"<<endl; Scan();//調(diào)用瀏覽函數(shù) cout<<"請(qǐng)輸入您想要修改通訊信息的名字:"<<endl; cin>>name; for(f=1,i=0;f&&i<m;i++) { if(strcmp(student[i].name,name)==0) { cout<<"查找到該學(xué)生的通訊信息如下:"<<endl; Scan(); cout<<"確實(shí)要修改該生通訊信息請(qǐng)按1,否則按0"<<endl; cin>>n; if(n==1) { cout<<"請(qǐng)輸入您要修改的項(xiàng)目(1-編號(hào)2-姓名3-性別4-聯(lián)系電話5-通訊地址):"<<endl; cin>>c; if(c>6||c<1) cout<<"抱歉,您的輸入有誤,請(qǐng)從新輸入。"<<endl; } f=0; } } if(f==1)cout<<"抱歉,未找到此人!"<<endl; do { switch(c)//因?yàn)楫?dāng)找到第i個(gè)學(xué)生時(shí),for語句后i自加了1,所以下面的應(yīng)該把改后的信息賦值給第i-1個(gè)人 { case1:cout<<"將該生的編號(hào)改為:"; cin>>num; strcpy(student[i].num,num); break; case2:cout<<"將該生的姓名改為:"; cin>>name; strcpy(student[i].name,name); break; case3:cout<<"將該生的性別改為:"; cin>>sex; strcpy(student[i].sex,sex); break; case4:cout<<"將該生的聯(lián)系電話改為:"; cin>>tel; strcpy(student[i].telphone,tel); break; case5:cout<<"將該生的通訊地址改為:"; cin>>address; strcpy(student[i].address,address); break; } cout<<endl; cout<<"確認(rèn)您所修改的信息請(qǐng)按1,從新修改請(qǐng)按0:"<<endl; cin>>b; }while(b==0);Sav(m); cout<<"修改后所有信息如下;"<<endl; Scan(); cout<<"如果您想繼續(xù)修改請(qǐng)按1,否則按0:"<<endl; cin>>t; switch(t) { case1:Mod();break; case0:break; default:break; }}voidAdd()//添加函數(shù){ intn=Load(); inti,m; cout<<"請(qǐng)輸入您要添加的學(xué)生通訊信息的個(gè)數(shù):"<<endl; cin>>m; for(i=n;i<m+n;i++) { cout<<"請(qǐng)輸入該生的編號(hào):"; cin>>student[i].num; cout<<endl;; cout<<"請(qǐng)輸入該生的姓名:"; cin>>student[i].name; cout<<endl; cout<<"請(qǐng)輸入該生的性別:"; cin>>student[i].sex; cout<<endl; cout<<"請(qǐng)輸入該生的聯(lián)系電話:"; cin>>student[i].telphone; cout<<endl; cout<<"請(qǐng)輸入該生的通訊地址:"; cin>>student[i].address; cout<<endl; system("cls"); cout<<"該生的通訊信息添加完畢,請(qǐng)輸入您要添加的下一位學(xué)生的通訊信息!"<<endl; } Sav(m+n); cout<<"學(xué)生通訊信息添加完畢,查看信息如下:"<<endl; Scan();}題目9、撲克牌游戲需求分析1.1課程設(shè)計(jì)題目紙牌游戲:[問題描述]編號(hào)為1-52張牌,正面向上,從第2張開始,以2為基數(shù),是2的倍數(shù)的牌翻一次,直到最后一張牌;然后,從第3張開始,以3為基數(shù),是3的倍數(shù)的牌翻一次,直到最后一張牌;然后…從第4張開始,以4為基數(shù),是4的倍數(shù)的牌翻一次,直到最后一張牌;...再依次5的倍數(shù)的牌翻一次,6的,7的直到以52為基數(shù)的翻過,輸出:這時(shí)正面向上的牌有哪些?1.2課程設(shè)計(jì)目的及其任務(wù)1.2.1目的熟練掌握數(shù)據(jù)結(jié)構(gòu)這門課程,掌握經(jīng)性表、棧、隊(duì)列、串、數(shù)組、廣義表、樹和二叉樹以及圖等基本類型的數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用。進(jìn)一步熟悉抽象數(shù)據(jù)類型的定義和實(shí)現(xiàn)、如何利用數(shù)組的動(dòng)態(tài)分酚實(shí)現(xiàn)順序結(jié)構(gòu)、繼承的實(shí)現(xiàn)方式。學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、想念結(jié)構(gòu)及基相應(yīng)的算法并初步掌握算法的時(shí)間分析和空間分析的技術(shù)?;菊莆粘绦蛟O(shè)計(jì)的基本思路和方法。利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的程序設(shè)計(jì)問題各算法描述培養(yǎng)我們的數(shù)據(jù)抽象能力。1.2.2任務(wù)1、課程設(shè)計(jì)題目每組一題,每個(gè)學(xué)生必須獨(dú)立完成;2、對(duì)課題進(jìn)行功能分析,選擇合適的數(shù)據(jù)結(jié)構(gòu),并定義數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)體;3、根據(jù)程序所要完成的基本要求,設(shè)計(jì)出完整的算法;4、編程簡(jiǎn)練,程序功能齊全,能夠正確的運(yùn)行;5、每人提交一份報(bào)告,并按照?qǐng)?bào)告有固定的模板和要求書寫報(bào)告。在課程設(shè)計(jì)過程中要求重視課程設(shè)計(jì)環(huán)節(jié),用嚴(yán)謹(jǐn)、科學(xué)、踏實(shí)的工作態(tài)度對(duì)待課程設(shè)計(jì)的每一項(xiàng)任務(wù),按照課程設(shè)計(jì)的題目要求,獨(dú)立的完成各項(xiàng)任務(wù),按時(shí)到機(jī)房上機(jī),認(rèn)真編寫課程設(shè)計(jì)報(bào)告。1.3課程設(shè)計(jì)思想首先必須確定實(shí)現(xiàn)這個(gè)課程設(shè)計(jì)的主算法是使用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)還是棧又或是數(shù)組和廣義表。根據(jù)題目要求需要實(shí)現(xiàn)的功能有:1、數(shù)據(jù)錄入:輸入各種數(shù)據(jù);此處即創(chuàng)建鏈表的過程,調(diào)用一個(gè)成員函數(shù)負(fù)值。在此處還有一個(gè)方法實(shí)現(xiàn),即先輸入數(shù)據(jù),然后再調(diào)用構(gòu)造實(shí)現(xiàn)。2、數(shù)據(jù)統(tǒng)計(jì):存儲(chǔ)方式的選擇,是使用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)還是棧又或是數(shù)組和廣義表;遵守先定義后調(diào)用的原則;數(shù)組定義時(shí)注意下標(biāo)的起始值和上限;鏈表定義時(shí)注意結(jié)點(diǎn)中的項(xiàng);準(zhǔn)確運(yùn)用結(jié)點(diǎn)。3、數(shù)據(jù)輸出:按要求的格式打印調(diào)用do循環(huán)和for循環(huán)4、查找,修改,刪除:這三個(gè)功能的核心是尋找成員,先遍歷鏈表,然后尋找對(duì)應(yīng)的ID號(hào)來找到結(jié)點(diǎn),然后再對(duì)結(jié)點(diǎn)實(shí)行刪除,修改操作。1.4軟件運(yùn)行環(huán)境及開發(fā)工具軟件運(yùn)行的環(huán)境是WindowsXP開發(fā)工具是MicrosoftVisualC++6.0概要設(shè)計(jì)2.所用方法及其原理說明1.當(dāng)每個(gè)號(hào)碼每次遇到是某個(gè)數(shù)的倍數(shù)時(shí),都會(huì)相應(yīng)的翻一次,這樣,每張牌會(huì)翻的次數(shù)就各不一樣,可能很多次,也可能只有一兩次,結(jié)果就只是要輸出在經(jīng)過各個(gè)不同次數(shù)的翻牌后,正面向上的牌都有哪幾個(gè)。將所有的牌建立一個(gè)數(shù)組,運(yùn)用for的循環(huán)嵌套執(zhí)行以下操作:把52張牌初始化成正面朝上、控制基數(shù)和翻牌次數(shù),判斷最終的紙牌朝向并打印出結(jié)果,具體實(shí)現(xiàn)算法參看詳細(xì)設(shè)計(jì)。詳細(xì)設(shè)計(jì)3.詳細(xì)設(shè)計(jì)方案源代碼:#include<stdio.h>voidmain(){ inti,j,a[52]; for(i=2;i<=52;i++) for(j=i-1;j<52;j+=i) a[j]=!a[j];printf("正面向上的牌有:"); for(i=0;i<52;i++) if(a[i]) printf("%4d",i+1);}第四章調(diào)試和操作說明4.調(diào)試運(yùn)行后的菜單展示圖2調(diào)試圖第五章總結(jié)與體會(huì)5.1本文的主要工作1.這題的時(shí)間復(fù)雜度是T(n)=O(n2)。2.雖然本次程序的題目難度與其他問題相比不是很高,但仍有很多問題我們是很容易忽視的,其一:在理解題目的要求時(shí),注意翻牌的次數(shù)可能有多次;其二:for循環(huán)的嵌套使用在書寫時(shí)很容易漏掉大括弧。3.運(yùn)用更多的基礎(chǔ)算法,使得程序和算法思想得到更好的表現(xiàn)。5.2心得體會(huì)這個(gè)學(xué)期是我第一次接觸“課程設(shè)計(jì)”,在完成設(shè)計(jì)的過程中,我遇到了一系列的問題,能明顯感覺到自己在很多方面的不足,但另一方面,問題是要分析解決的,找出問題以便為完善學(xué)習(xí)計(jì)劃,改變學(xué)習(xí)內(nèi)容與方法提供實(shí)踐依據(jù)。通過這次課程設(shè)計(jì),加強(qiáng)了我們的動(dòng)手、思考和解決問題的能力。在設(shè)計(jì)過程中,經(jīng)常會(huì)遇到這樣那樣的情況,總覺得思路對(duì)著,可是就是行不通,所以耗費(fèi)時(shí)間比較多。在做課程設(shè)計(jì)的同時(shí),我對(duì)課本知識(shí)也得到了鞏固和加強(qiáng),由于課本上的東西太多,平時(shí)課間的學(xué)習(xí)并不能很好的理解和運(yùn)用各個(gè)知識(shí)點(diǎn)的功能,而且考試內(nèi)容有限,所以在這次課程設(shè)計(jì)過程中,我們了解了很多知識(shí)點(diǎn)的功能,并且對(duì)數(shù)據(jù)結(jié)構(gòu)有了更多的了解。在平時(shí)看課本的過程中,有些問題老是弄不明白,做完課程設(shè)計(jì),有些問題就迎刃而解了。而且還可以記住很多東西。通過動(dòng)手實(shí)踐讓我們映象深刻,知識(shí)來源于實(shí)踐。實(shí)踐是認(rèn)識(shí)的動(dòng)力和最終目的,也是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。所以這次課程設(shè)計(jì)對(duì)我們的幫助很大。題目14拓?fù)渑判?、問題描述拓?fù)渑判蚩膳袛郃OV網(wǎng)絡(luò)中是否存在回路,使的所有活動(dòng)可排成一個(gè)線性序列,使用每個(gè)活動(dòng)的所有前驅(qū)活動(dòng)都排在該活動(dòng)的前面。2、要求(1)在有向圖中選一個(gè)沒有前驅(qū)的頂點(diǎn),輸出;(2)從有向圖中刪除該頂點(diǎn)及其該頂點(diǎn)出發(fā)的所有邊;(3)重復(fù)以上兩個(gè)步驟,直至全部頂點(diǎn)輸出;注:輸出所有拓?fù)渑判蚩杉臃帧?、實(shí)驗(yàn)內(nèi)容:拓?fù)渑判?。任意給定一個(gè)有向圖,設(shè)計(jì)一個(gè)算法,對(duì)它進(jìn)行拓?fù)渑判?。拓?fù)渑判蛩惴ㄋ枷耄篴.在有向圖中任選一個(gè)沒有前趨的頂點(diǎn)輸出;b.從圖中刪除該頂點(diǎn)和所有以它為尾的??;c.重復(fù)上述a、b,直到全部頂點(diǎn)都已輸出,此時(shí),頂點(diǎn)輸出序列即為一個(gè)拓樸有序序列;或者直到圖中沒有無前趨的頂點(diǎn)為止,此情形表明有向圖中存在環(huán)。試驗(yàn)分析:在拓?fù)渑判虻倪^程之中,輸入入度為零(即沒有前趨)的頂點(diǎn),同時(shí)將該頂點(diǎn)的直接后繼的入度減1。、查鄰接表中入度為零的頂點(diǎn),并進(jìn)棧。(2)、當(dāng)棧為空時(shí),進(jìn)行拓?fù)渑判?。(a)、退棧,輸出棧頂元素V。(b)、在鄰接表中查找Vj的直接后繼Vk,將Vk的入度減一,并令入度減至零的頂點(diǎn)進(jìn)棧。、若??諘r(shí)輸出的頂點(diǎn)數(shù)不是N個(gè)則說明有向回路,否則拓?fù)渑判蚪Y(jié)束。為建立存放入度為零的頂點(diǎn)的棧,不需要另分配存儲(chǔ)單元,即可借入入度為零的數(shù)據(jù)域。一方面,入度為零的頂點(diǎn)序號(hào)即為表頭結(jié)點(diǎn)的序號(hào),另一方面,借用入度為零的數(shù)據(jù)域存放帶鏈棧的指針域(下一個(gè)入度的頂點(diǎn)號(hào))。源程序:#include<iostream>#include<stack>usingnamespacestd;#defineMAXV50stack<int>mystack;intindegree[MAXV];structnode{intadjvex;node*next;}AdjList[MAXV];voidCreate(nodeAdjList[],intn,intm)//鄰接表建表函數(shù),n代表頂點(diǎn)數(shù),m代表邊數(shù){inti;node*p;for(i=0;i<=n-1;i++){AdjList[i].adjvex=i;AdjList[i].next=NULL;}for(i=0;i<=m-1;i++){cout<<"請(qǐng)輸入第"<<i<<"條邊:";intu,v;cin>>u>>v;p=newnode;p->adjvex=v;p->next=AdjList[u].next;AdjList[u].next=p;}}voidprint(intn)//鄰接表打印函數(shù){inti;node*p;for(i=0;i<=n-1;i++){p=&AdjList[i];while(p!=NULL){cout<<p->adjvex<<'';p=p->next;}cout<<endl;}}voidTopSort(nodeAdjList[],intn){inti;node*p;memset(indegree,0,sizeof(indegree));for(i=0;i<=n-1;i++){p=AdjList[i].next;while(p!=NULL){indegree[p->adjvex]++;p=p->next;}}for(i=0;i<=n-1;i++){if(indegree[i]==0)mystack.push(i);}intcount=0;while(mystack.size()!=0){i=mystack.top();mystack.pop();cout<<i<<'';count++;for(p=AdjList[i].next;p!=NULL;p=p->next){intk=p->adjvex;indegree[k]--;if(indegree[k]==0)mystack.push(k);}}cout<<endl;if(count<n)cout<<"有回路"<<endl;}voidmain(){intn;intm;cout<<"請(qǐng)輸入頂點(diǎn)數(shù)及邊數(shù):";cin>>n>>m;Create(AdjList,n,m);cout<<"輸入的鄰接表為:"<<endl;print(n);cout<<"拓?fù)渑判蚪Y(jié)果為:"<<endl;TopSort(AdjList,n);}運(yùn)行界面:當(dāng)輸入如下圖時(shí),運(yùn)行結(jié)果如下:實(shí)驗(yàn)心得:通過本次上機(jī)實(shí)驗(yàn),熟知了圖的儲(chǔ)存結(jié)構(gòu),熟練和掌握了圖的深度優(yōu)先和廣度優(yōu)先搜索方法。掌握了AOV網(wǎng)和拓?fù)渑判蛩惴?、AOE網(wǎng)和關(guān)鍵路徑。對(duì)圖的認(rèn)識(shí)更一步加深了。光電子元器件認(rèn)知與實(shí)踐(三)數(shù)字系統(tǒng)與邏輯設(shè)計(jì)課程設(shè)計(jì)題目名稱:汽車尾燈姓名:學(xué)號(hào):班級(jí):光信淮海工學(xué)院理學(xué)院光信息系目錄第一章:系統(tǒng)概述。。。。。。。。。。。。。。。(3)第二章:?jiǎn)卧娐吩O(shè)計(jì)與分析。。。。。(5)第三章:電路的安裝與調(diào)試。。。。。。(12)第四章:結(jié)束語。。。。。。。。。。。。。。。(13)附件:元器件清單。。。。。。。。。。。。。。。(14)參考文獻(xiàn)。。。。。。。。。。。。。。。。。。。。。。。(14)第一章:系統(tǒng)概述a.課程設(shè)計(jì)目的及基本要求1、鞏固和加強(qiáng)數(shù)字系統(tǒng)與邏輯設(shè)計(jì)課程的理論知識(shí)。

2、掌握電子電路的一般的設(shè)計(jì)方法,了解電子產(chǎn)品研制開發(fā)過程。

3、提高電子電路實(shí)驗(yàn)技能及儀器使用能力。

4、掌握電子電路安裝和調(diào)試的方法及故障排除方法。

5、學(xué)會(huì)撰寫課程設(shè)計(jì)總結(jié)報(bào)告。

6、通過查閱手冊(cè)和文獻(xiàn)資料,培養(yǎng)同學(xué)們獨(dú)立分析問題和解決問題的能力。

7、培養(yǎng)創(chuàng)新能力和創(chuàng)新思維。b.設(shè)計(jì)題目選擇及題目要求選題:汽車尾燈設(shè)計(jì)要求:(1)、用6個(gè)發(fā)光二極管模擬汽車尾燈,即左尾燈(L1-L3)3個(gè)發(fā)光二極管;右尾燈(R1-R3)3個(gè)發(fā)光二極管。(2)、用兩個(gè)開關(guān)分別控制左轉(zhuǎn)彎尾燈顯示和右轉(zhuǎn)彎尾燈顯示。(3)、當(dāng)左轉(zhuǎn)彎開關(guān)KL打開時(shí),左轉(zhuǎn)彎尾燈顯示的3個(gè)發(fā)光二極管按圖4所示規(guī)律亮滅顯示。同樣,當(dāng)右轉(zhuǎn)彎開關(guān)KR被打開時(shí),右轉(zhuǎn)彎尾燈與左轉(zhuǎn)彎燈相同規(guī)律亮滅顯示,但方向相反。圖為:左轉(zhuǎn)彎顯示規(guī)律圖c.設(shè)計(jì)思路(1)汽車尾燈顯示狀態(tài)與汽車運(yùn)行狀態(tài)的關(guān)系首先要設(shè)置2個(gè)狀態(tài)控制變量,來區(qū)分汽車尾燈的4種不同的顯示模式。下面用開關(guān)KL、KR進(jìn)行顯示模式控制,當(dāng)開關(guān)KL.KR為00時(shí),汽車正常行駛;為01表示右轉(zhuǎn)彎;為10表示左轉(zhuǎn)彎;11表示臨時(shí)剎車。分析汽車尾燈顯示狀態(tài)與汽車運(yùn)行狀態(tài)的關(guān)系詳見下表3-1。表3-1汽車尾燈顯示狀態(tài)與汽車運(yùn)行狀態(tài)的關(guān)系控制變量左側(cè)的3個(gè)指示燈右側(cè)的3個(gè)指示燈汽車的行駛狀態(tài)KLKRL1L2L3R1R2R300全部熄滅狀態(tài)全部熄滅狀態(tài)正向行駛01全部熄滅狀態(tài)按R1、R2、R3順序點(diǎn)亮右轉(zhuǎn)彎行駛10按L1、L2、L3順序點(diǎn)亮全部熄滅狀態(tài)左轉(zhuǎn)彎行駛11左右兩側(cè)指示燈在時(shí)鐘脈沖CP作用下同時(shí)閃爍臨時(shí)剎車(2)汽車尾燈控制器功能描述當(dāng)汽車左、右轉(zhuǎn)彎行駛時(shí),3個(gè)指示燈根據(jù)轉(zhuǎn)彎方向循環(huán)順序點(diǎn)亮,所以可以用一個(gè)三進(jìn)制數(shù)器的狀態(tài)控制譯碼器電路順序輸出高電平,按要求順序點(diǎn)亮左、右尾燈。設(shè)三進(jìn)制計(jì)數(shù)器的狀態(tài)用Q0、Q1表示。設(shè)燈亮為1,燈滅為0.其功能見表3-2。由上述汽車尾燈顯示狀態(tài)與汽車運(yùn)行狀態(tài)的關(guān)系可知,汽車正常運(yùn)行時(shí),燈全滅;汽車左轉(zhuǎn)時(shí),L1、L2、L3循環(huán)亮;汽車右轉(zhuǎn)時(shí),R1、R2、R3循環(huán)亮;緊急剎車時(shí),不論Q1Q0什么狀態(tài),有脈沖來時(shí)燈就全亮。表3-2汽車尾燈控制器的邏輯功能表控制變量三進(jìn)制計(jì)數(shù)器狀態(tài)汽車尾指示燈KLKRQ1Q0L1L2L3R1R2R300//000000010000010001000010100000011000001000010100001010000011//CPCPCPCPCPCP(3)汽車尾燈控制器的結(jié)構(gòu)框圖根據(jù)上述的狀態(tài)關(guān)系和邏輯功能,分析得出汽車尾燈控制器的總體結(jié)構(gòu)框圖,整個(gè)電路可由模式控制電路、信號(hào)發(fā)生電路555、譯碼器與顯示驅(qū)動(dòng)電路(74LS138)、尾燈狀態(tài)顯示器四部分組成,如圖3-1。控控制變量模式控制電路模式控制電路KLKR顯示驅(qū)動(dòng)電路譯碼電路尾燈狀態(tài)顯示電路信號(hào)發(fā)生電路555圖3-1汽車尾燈控制器的結(jié)構(gòu)框圖第二章:?jiǎn)卧娐吩O(shè)計(jì)與分析(1).信號(hào)發(fā)生電路555555原理與結(jié)構(gòu)頻率f(2).譯碼器與顯示驅(qū)動(dòng)電路譯碼器與顯示驅(qū)動(dòng)電路的功能是在模式控制電路輸出和信號(hào)發(fā)生器555狀態(tài)的作用下,提供6個(gè)尾燈控制信號(hào)。(當(dāng)譯碼器驅(qū)動(dòng)電路輸出地控制信號(hào)為低電平時(shí),相應(yīng)指示燈點(diǎn)亮)74LS138譯碼器:74LS138為3線-8線譯碼器,共有54/74S138和54/74LS138兩種線路結(jié)構(gòu)型式,其74LS138工作原理如下:

當(dāng)一個(gè)選通端(G1)為高電平,另兩個(gè)選通端(/(G2A)和/(G2B))為

低電平時(shí),可將地址端(A、B、C)的二進(jìn)制編碼在一個(gè)對(duì)應(yīng)的輸出端以低

電平譯出。

74LS138的作用:

利用G1、/(G2A)和/(G2B)可級(jí)聯(lián)擴(kuò)展成24線譯碼器;若外接一個(gè)反

相器還可級(jí)聯(lián)擴(kuò)展成32線譯碼器。

若將選通端中的一個(gè)作為數(shù)據(jù)輸入端時(shí),74LS138還可作數(shù)據(jù)分配器用與非門組成的3線-8線譯碼器74LS138

74ls138譯碼器內(nèi)部電路3線-8線譯碼器74LS138的功能表

74ls138功能表無論從邏輯圖還是功能表我們都可以看到74LS138的八個(gè)輸出管腳,任何時(shí)刻要么全為高電平1—芯片處于不工作狀態(tài),要么只有一個(gè)為低電平0,其余7個(gè)輸出管腳全為高電平1。如果出現(xiàn)兩個(gè)輸出管腳在同一個(gè)時(shí)間為0的情況,說明該芯片已經(jīng)損壞。當(dāng)附加控制門的輸出為高電平(S=1)時(shí),可由邏輯圖寫出

74ls138邏輯圖由上式可以看出,在同一個(gè)時(shí)間又是這三個(gè)變量的全部最小項(xiàng)的譯碼輸出,所以也把這種譯碼器叫做最小項(xiàng)譯碼器譯碼器與顯示驅(qū)動(dòng)電路可以由3-8線譯碼器74LS138、6個(gè)與非門和6個(gè)反相器構(gòu)成。譯碼器74LS138的輸入端A0、A1、A2分別接S1、Q1、Q0。當(dāng)G=F=1、S1=0時(shí),對(duì)應(yīng)計(jì)數(shù)器狀態(tài)Q1Q0為00、01、10,譯碼器輸出Y0,Y1,Y2,依次為0,使得與指示燈D1、D2、D3對(duì)應(yīng)的反向器輸出依次為低電平,從而使指示燈RD1-RD2-RD3依次點(diǎn)亮,示意汽車右轉(zhuǎn)彎;當(dāng)G=F=1、S1=1時(shí),對(duì)應(yīng)計(jì)數(shù)器狀態(tài)Q1Q0為00、01、10,譯碼器輸出Y4,Y5,Y6,依次為0,使得與指示燈D1、D2、D3對(duì)應(yīng)的反向器輸出依次為低電平,從而使指示燈D1-D2-D3依次點(diǎn)亮,示意汽車左轉(zhuǎn)彎;當(dāng)G=0,F(xiàn)=CP時(shí),所有指示燈隨CP的頻率閃爍,示意汽車臨時(shí)剎車。圖4-2譯碼器與顯示驅(qū)動(dòng)電路(3)尾燈狀態(tài)顯示電路尾燈狀態(tài)顯示電路可由6個(gè)發(fā)光二極管和6個(gè)200歐電阻組成。當(dāng)6個(gè)反相器的輸出為低電平時(shí),相應(yīng)發(fā)光二極管被點(diǎn)亮。(如圖4-3所示)圖4-3尾燈狀態(tài)顯示電路(4)模式控制電路由于譯碼器與顯示驅(qū)動(dòng)電路的使能控制信號(hào)為G和F,故G與譯碼器74LS138的使能端G1相連接,F(xiàn)與顯示驅(qū)動(dòng)電路中與非門的一個(gè)輸入端相連接。由總體邏輯功能可知,G和F與開關(guān)控制變量KL、KR,以及脈沖CP之間的關(guān)系,見表4-2。表4-2使能控制信號(hào)與模式控制變量、時(shí)鐘脈沖的關(guān)系模式控制使能控制時(shí)鐘脈沖電路工作狀態(tài)S1S0GFCP0001/汽車正常行駛;譯碼器不工作,汽車尾燈全部熄滅;0111/汽車向右轉(zhuǎn)彎;譯碼器此時(shí)工作,右側(cè)尾燈依次循環(huán)點(diǎn)亮;1011/汽車向左轉(zhuǎn)彎;譯碼器此時(shí)工作,左側(cè)尾燈依次循環(huán)點(diǎn)亮;110CPCP汽車臨時(shí)剎車;譯碼器不工作,左右側(cè)尾燈在時(shí)鐘脈沖CP作用下閃爍;根據(jù)表4-2所示,可以求出使能控制信號(hào)G和F的邏輯表達(dá)式為:(1)G=·S0+S1·=S1⊕S0(2)F=·+·S0+S1·+S1·S0·CP=(+S0)+S1·+S1·S0·CP=++S1·S0·CP=+S1·S0·CP=+CP再根據(jù)所求的邏輯表達(dá)式,畫出模式控制電路圖,圖4-4(5).總電路圖設(shè)計(jì)及實(shí)驗(yàn)實(shí)物圖在完成各個(gè)模塊的功能設(shè)計(jì)后,畫出各個(gè)模塊的電路圖,即可得到汽車尾燈控制器的完整邏輯電路圖,如圖5-1。圖5-1汽車尾燈控制器的邏輯電路圖第三

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論