c語言與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)完整版_第1頁
c語言與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)完整版_第2頁
c語言與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)完整版_第3頁
c語言與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)完整版_第4頁
c語言與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)完整版_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Harbin Institute of TechnologyC語言與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書劉梅索瑩田文龍哈工大電子與信息工程學(xué)院電子工程系實(shí)驗(yàn)1實(shí)驗(yàn)平臺一、實(shí)驗(yàn)?zāi)康? .掌握Microsoft Visual C+集成環(huán)境的使用方法。2 .掌握C程序在Microsoft Visual C+開發(fā)環(huán)境中的編輯、編譯、鏈接和運(yùn)行全過程二、實(shí)驗(yàn)內(nèi)容1)啟動 Microsoft Visual C+開發(fā)環(huán)境雙擊桌面應(yīng)用程序圖標(biāo) 駛或云兄“開始”菜單程序組中的Microsoft VisualC+應(yīng)用程序,啟動VC+如圖所小圖VC+初始界面2)建立C源程序文件國,打開文本文件編輯界面如下圖方法1:單機(jī)工具欄的“新建

2、文本文件”按鈕所示圖文本文件編輯界面方法2:執(zhí)行“文件”- “新建”命令,在“文件”選項(xiàng)卡下選擇C+ SourceFile文件類型,然后輸入C源程序文件名和保存文職,如圖 所示,然后單擊 “確定”按鈕,打開源程序文件編輯界面,如圖所示。注意:輸入C源程序文件名時必須帶上擴(kuò)展“ .c”,否則默認(rèn)創(chuàng)建的是擴(kuò)展 名為“.cpp”的C+戎件。3)編輯源文件方法1:在如圖所示的文本文件編輯界面中輸入源程序代碼,如圖所示。方法2:在如圖所示的C源程序文件編輯界面中編輯源程序代碼,如圖所示。圖新建文件圖C源程序文件編輯界面圖文本文件編輯界面編輯源文件圖C源程序編輯界面編輯源文件4)保存源文件源文件編輯結(jié)束后

3、,執(zhí)行“文件”- “保存”命令保存文件,文本文件編輯界面中編輯的源文件保存時必須在文件名后加上擴(kuò)展名“.c”,否則保存的是擴(kuò)展名為txt的文本文件,不能編譯運(yùn)行。5)組件文件執(zhí)行“組建”- “組建”命令或直接按F7功能鍵或單機(jī)工具欄Build按鈕, 可以對源文件進(jìn)行 編譯、鏈 接而不運(yùn)行改程序。當(dāng)然 也可以先執(zhí) 行“組 建”,“編譯”(快捷鍵Ctrl+F7 )命令編譯文件,再執(zhí)行“組建”- “組建” (快捷鍵F7)命令鏈接文件。由于VC+有工作區(qū)的要求,所以組建時,系統(tǒng)提示需要建立工作區(qū),如圖所 示。單機(jī)“是”按鈕,系統(tǒng)會自動建立工作區(qū),組建后的結(jié)果如圖所示。圖提示建立工作區(qū)IIk四二 。n

4、HI1 uh |* .-J I i d 1A_J J 11可 . C5 * !1rXi。二 ascwplf * Win32 DKiug MLiatelHg.FXdHplF.nr B vrFDr() -I wrn&ni:(f)bl (Mf T試上 映件再職 工德文薛呼到莒,的R工 整7IIU4bp Iff - lie ram-f t Ti C+圖組建源程序結(jié)果注意:圖下方的“組建”信息窗口中的內(nèi)容說明了組建的結(jié)果,必須保證錯誤(error(s)數(shù)為0才能運(yùn)行程序。6)運(yùn)行文件執(zhí)行“組建”-“執(zhí)行”命令或直接按Ctrl+F5 鍵或單機(jī)工具欄BuildExecute 按鈕,可以運(yùn)行程序,結(jié)果顯示在用

5、戶輸出窗口中,如圖所示圖用戶輸出窗口注意:如果要編輯下一個C源程序,由于新建的文件不會自動加入工作區(qū), 因此需要先關(guān)閉當(dāng)前工作區(qū)。方法是執(zhí)行“文件”- “關(guān)閉工作空間”命令,或 者關(guān)閉后重新啟動VC+再按照上述方法建立、編輯新的 C源文件,讓VC+自 動建立工作區(qū)。7)運(yùn)行“加法”程序在VC+環(huán)境中建立并編輯實(shí)現(xiàn)加法運(yùn)算的源程序, 然后組建該文件,結(jié)果如 圖所示。運(yùn)行該文件,并按要求輸入數(shù)據(jù),得到運(yùn)行結(jié)果。圖VC+環(huán)境下組建“加法”程序后的界面實(shí)驗(yàn) 2 順序結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?. 掌握上機(jī)運(yùn)行C程序的全過程。2. 掌握各種格式說明符的使用方法。3. 掌握格式輸入輸出函數(shù)scanf() 和

6、 printf() 的用法。4. 熟悉字符輸入輸出函數(shù)getchar() 和 putchar() 的用法。二、實(shí)驗(yàn)內(nèi)容1. 格式說明符的使用。創(chuàng)建并編輯輸入輸出各個類型數(shù)據(jù)的程序,分析各個格式說明符的作用。2 .編寫“輸入輸出字符”程序,功能如下:使用 getchar()函數(shù)接收一個字符, 用printf() 函數(shù)顯示;使用scanf()函數(shù)接收一個字符,用putchar()函數(shù)顯示。3 .編寫“求三角形面積”程序,功能如下:輸入三角形三邊長,求三角形的面積。已知三角形的三邊長a、b、c,則該三角形的面積公式為:090km其中,s (a b c)/2。4 .編寫“圓柱體”程序,功能如下:設(shè)圓柱

7、體的半徑r=,圓柱高h(yuǎn)=,求出該圓柱體的表面積和體積。要求:用scanf()函數(shù)輸入數(shù)據(jù),輸出時要求有文字說明, 取小數(shù)點(diǎn)后兩位數(shù)字。三、實(shí)驗(yàn)指導(dǎo)1. 格式說明符的使用(參考教材)2. “輸入輸出字符”程序1)編程分析(1)需要定義字符型變量存放輸入的數(shù)據(jù);(2)用scanf()函數(shù)輸入字符時,要注意不要接收緩沖區(qū)中已有的字符。2)參考程序#include main()char a,b,c;printf( a character:n);a=getchar();c=getchar();printf(The character is:%cnn,a);printf( a character:n);s

8、canf(%c,&b);printf(The character is:);putchar(b);putchar(n);3. “求三角形面積”程序1)編程分析(1)該問題的解決過程如下:定義變量輸入二角形二邊邊長計(jì)算面積輸出結(jié)果需要定義實(shí)型(float或double)變量存放相應(yīng)的數(shù)據(jù);(3)計(jì)算面積需要用到開平方函數(shù)sqrt(),該函數(shù)原型包含在頭文件中,因此需 要在程序開始將頭文件包含進(jìn)來;(4)根據(jù)實(shí)際情況確定各個變量在輸出時的寬度和小數(shù)位數(shù)。2)參考程序#include#includemain()float a,b,c,s,area;printf( Input a,b,c:n );sc

9、anf( f ,%f,%f ”,&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*s(s-a)*(s-b)*(s-c);printf(a=%,b=%,c=%n ,a,b,c);printf(area=%n” ,area);3. “圓柱體”程序1)編程分析(1)該問題的解決過程如下:定義變量-J輸入半徑和高-計(jì)算表面積和體積- 輸出結(jié)果 需要定義實(shí)型(float或double)變量存放相應(yīng)的數(shù)據(jù);計(jì)算過程中需要用到常數(shù),為使用方便,在程序開始用宏定義命令define將常數(shù)(即)用PI表示;輸出數(shù)據(jù)時根據(jù)要求確定各個變量的寬度和小數(shù)位數(shù)(本例采用)。2)參考程序#include#

10、define PImain()float r,h;double s,v;printf( Input the value of r and h:n );scanf( “%f ,%f ” ,&r,&h);s=2*PI*r*r+2*PI*r*h;v=PI*r*r*h;printf(“The value of s is:%n” ,s);printf(“The value of v is:%n” ,v);實(shí)驗(yàn) 3 選擇結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?. 學(xué)會使用邏輯表達(dá)式表示條件的方法。2. 掌握 switch 語句的用法。二、實(shí)驗(yàn)內(nèi)容 語句的應(yīng)用編寫計(jì)算器程序。 要求從鍵盤任意輸入兩個數(shù)值, 然后輸入一個四

11、則運(yùn)算符, 自動完成運(yùn)算后輸出結(jié)果。三、實(shí)驗(yàn)指導(dǎo)語句的應(yīng)用1)編程分析(1) 四則運(yùn)算共有加(+)、減(- )、乘(*)、除( / ) 4 種運(yùn)算,要做出判斷需使用 switch 語句。(2) 當(dāng)輸入符號為四則運(yùn)算之外的符號時,不進(jìn)行任何運(yùn)算,但應(yīng)給出相應(yīng)的提示信息。當(dāng)使用提示信息時, switch 語句應(yīng)含有default 子句。2)參考程序#include “”void main()float x,y;char p;scanf( “ %f,%f” ,&x,&y);p=getchar();switch(p)case + :printf(“ %f+%f=%fn”,x,y,x+y);break;

12、,case- :printf(“ %f-%f=%fn ”,x,y,x-y);break;c%)case* :printf(“%f*%f=%fn ”,x,y,x*y);break;case /printf( “ %f/%f=%fn ” ,x,y,x/y);break; default:printf( “Input is error!n ” );3)程序調(diào)試調(diào)試程序時, +、 - 、 * 、 / 及非四則運(yùn)算符的情況都應(yīng)予以調(diào)試。實(shí)驗(yàn) 4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?. 通過本實(shí)驗(yàn),加深對循環(huán)控制結(jié)構(gòu)有關(guān)概念的理解。2. 掌握二重循環(huán)結(jié)構(gòu)程序的設(shè)計(jì)方法。二、實(shí)驗(yàn)內(nèi)容1 .階乘累加問題。編寫程序,

13、求1! +2! +3! +n!的值。2 . 取彩球問題。有12 個彩球: 3 個白色, 5 個紅色, 4 個黃色,從中任意取n 個球( 2 n 12) ,求出所有不同的取法。三、實(shí)驗(yàn)指導(dǎo)1. 階乘累加問題1)編程分析(1) 本實(shí)驗(yàn)內(nèi)容為求解階乘問題。(2) 求 n! 用一個循環(huán)即可實(shí)現(xiàn)。(3)求1! +2! +3!+川的值,需要在求階乘程序之外增加一個外重循環(huán)。2)參考程序#include “”void main() long int s=1,t;int i,j,n;printf(“ n=” );scanf( “ %d” ,&n);for(i=2;i=n;i+)for(t=1,j=1;j=i;

14、j+) t*=j;s+=t; printf( “s=%ldn ” ,s);3)程序調(diào)試(3) 輸入一個不大的正整數(shù),分析程序執(zhí)行結(jié)果。(4) 輸入一個零或者負(fù)數(shù),分析程序執(zhí)行結(jié)果。(5) 輸入一個很大的正整數(shù),分析程序執(zhí)行結(jié)果。(6) 當(dāng)程序結(jié)果不符合要求時,修改程序,直到對任何輸入數(shù)據(jù)都能輸出正確的執(zhí)行結(jié)果,或者給出一個明確的提示信息。例如,當(dāng)輸入數(shù)據(jù)非法時,給出一個錯誤的提示信息。2. 取彩球問題1)編程分析本題用到“窮舉”算法。窮舉的基本思想是對問題的所有可能性一一測試,直到找到解或?qū)⑷靠赡軤顟B(tài)都測試過為止。 “窮舉”的核心是依次測試循環(huán)體。循環(huán)控制有兩種辦法: 計(jì)數(shù)法和標(biāo)志法。 計(jì)數(shù)

15、法要先確定循環(huán)次數(shù), 然后逐次測試, 完成測試次數(shù)后循環(huán)結(jié)束;標(biāo)志法是達(dá)到某一目標(biāo)后循環(huán)結(jié)束。2)參考程序#incude “”void main()int n,white,red,yellow,count=0;printf( “ Input ” );scanf( “ %d” ,&n);printf( “white red yellown ” );for(white=1;white=3;white+)for(red=1;red=1&yellow=4) printf(3)程序調(diào)試(1) 輸入不小于printf(count+;“Total:%dn%5d%5d%5d” n,white,red,yell

16、ow);” ,count);2 并且不大于12 的整數(shù)值,查看并分析程序結(jié)果。(2) 輸入小于 2 或者大于 12 的整數(shù)值,查看并分析程序結(jié)果。(3) 修改程序, 使得程序運(yùn)行時只接受 ( 2 n 12) 的輸入值,并能獲得正確結(jié)果。實(shí)驗(yàn) 5 數(shù)組一、實(shí)驗(yàn)?zāi)康?. 了解數(shù)組的特點(diǎn),掌握一維數(shù)組的定義、初始化及其使用方法。2. 掌握二維數(shù)組的定義、初始化及其使用方法。3. 能用一維數(shù)組和二維數(shù)組解決簡單的實(shí)際問題。二、實(shí)驗(yàn)內(nèi)容1. 鞍點(diǎn)問題在二維數(shù)組中, 若某一位置上的元素在該行中最大, 而在該列中最小, 則該元素即為該二維數(shù)組的鞍點(diǎn)。 要求從鍵盤輸入一個二維數(shù)組, 當(dāng)鞍點(diǎn)存在時, 把鞍點(diǎn) 找

17、出來。2. 選擇法排序問題將存儲在一維數(shù)組中的 10 個整數(shù)用選擇法進(jìn)行排序。三、實(shí)驗(yàn)指導(dǎo)1. 鞍點(diǎn)問題1)編程分析(1) 對二維數(shù)組按行處理。(2) 對每一行首先找出它的最大值元素, 然后看它在該列上是否為最小值, 若是, 則找到一個鞍點(diǎn)。(3) 找到鞍點(diǎn)后輸出元素值及其所在的行列值。2)參考程序#define M 3#define N 4 void main() int aMN,i,j,k;printf( “請輸入二維數(shù)組的數(shù)據(jù):n” );for(i=0;iM;i+)for(j=0;jN;j+)scanf( “ %d” ,&aij);for(i=0;iM;i+)k=0;for(j=1;ja

18、ik)k=j;for(j=0;jM;j+)if(ajkaik)break;if(j=M)printf( “%d %d %dn” ,aik,I,k);3) 程序調(diào)試(1) 輸入有鞍點(diǎn)的一組數(shù)據(jù),查看并分析程序的運(yùn)行結(jié)果。例如:9 80 215 4060 -60 89 1210 -3 101 89(2) 輸入沒有鞍點(diǎn)的一組數(shù)據(jù),查看并分析程序的運(yùn)行結(jié)果。例如:9 80 215 4060 -60 189 1210 -3 101 892. 選擇法排序問題1)編程分析(1) 我們已經(jīng)學(xué)習(xí)了冒泡法排序,冒泡法排序依次,就有可能交換一次,需要交換的次數(shù)越多,效率越低。(2) 選擇法的基本思路是:第一趟,從所

19、有元素中選擇一個最小元素后放在a0中, 最多交換一次; 第二趟, 從 a1 開始到最后的各元素中選擇一個最小元素,放在a1中;以此類推,M個數(shù)需要進(jìn)行M-1趟比較,但交換的次數(shù)比冒泡排序 法少得多。2)參考程序#define M 10#include “”void main()int aM,n,i,j,min,temp;printf( “請輸入排序數(shù)據(jù): n” );for(i=0;iM;i+)scanf( “ %d” ,&ai);printf( “排序前數(shù)列:n” );for(i=0;iM;i+)printf(“ %d” ,ai);for(i=0;iM-1;i+) min=i;for(j=i+

20、1;jM;j+)if(ajamin)min=j;temp=ai;ai=amin;amin=temp;printf( “ n 排序后數(shù)列: n” );for(i=0;iM;i+)printf(“ %d” ,ai);3)程序調(diào)(1) 運(yùn)行程序,任意輸入10 個整數(shù),查看并分析程序執(zhí)行結(jié)果。(2) 運(yùn)行程序,輸入多余10 個的整數(shù),查看并分析程序執(zhí)行結(jié)果。(3) 運(yùn)行程序,輸入一組升序排列的有序整數(shù),查看并分析程序執(zhí)行結(jié)果。(4) 運(yùn)行程序,輸入一組降序排列的有序的整數(shù),查看并分析程序執(zhí)行結(jié)果。實(shí)驗(yàn) 6 函數(shù)一、實(shí)驗(yàn)?zāi)康?. 掌握自定義函數(shù)的一般結(jié)構(gòu)及定義函數(shù)和函數(shù)調(diào)用的方法。2. 熟練掌握一維數(shù)組

21、作函數(shù)的參數(shù)時函數(shù)的定義和調(diào)用方法, 熟悉用函數(shù)求解二維數(shù)組問題的函數(shù)定義及調(diào)用方法。二、實(shí)驗(yàn)內(nèi)容1. 選擇法排序函數(shù)的定義及使用編寫一個用選擇法對一維數(shù)組升序排序許的函數(shù), 并在主函數(shù)中調(diào)用該排序函數(shù),實(shí)現(xiàn)對任意20 個整數(shù)的排序。三、實(shí)驗(yàn)指導(dǎo)1. 選擇法排序函數(shù)的定義及使用1)編程分析這是一維數(shù)組作函數(shù)參數(shù)的問題。(1) 設(shè)計(jì)一個對一維數(shù)組的前n 個數(shù)用選擇法進(jìn)行排序的函數(shù)select() 。 select()函數(shù)有兩個形參, 一個是排序元素數(shù)形參, 一個是一維數(shù)組形參。 select() 函數(shù)不需要返回值,函數(shù)類型說明為 void 型。(2) 在進(jìn)行函數(shù)調(diào)用時,實(shí)參和形參要按照參數(shù)的意義

22、在位置上對應(yīng)一致。2)參考程序#define M 20#include “”void select(int,int a);/* 函數(shù)聲明 */void main()int aM,n,i;printf( “請輸入排序數(shù)據(jù):n” );for(i=0;iM;i+)scanf( “ %d” ,&ai);printf( “排序前數(shù)列: n” );for(i=0;iM;i+)printf(“ %d” ,ai);select(M,a);printf( “ n 排序后數(shù)列: n” );for(i=0;iM;i+) printf(“ %d” ,ai);void select(int n,int a)int I,

23、j,min,temp;for(i=0;in-1;i+)min=i;for(j=i+1;jn;j+) if(ajamin) min=j;temp=ai;ai=amin;amin=temp;3)程序調(diào)試(1) 運(yùn)行程序,任意輸入 20 個整數(shù),查看并分析程序執(zhí)行結(jié)果。(2) 把主函數(shù)中的函數(shù)調(diào)用 select(M,a) 改為 select(M,&a0), 用(1) 中使用的 數(shù)據(jù)運(yùn)行程序,查看并分析程序執(zhí)行結(jié)果。(3) 把主函數(shù)中的函數(shù)調(diào)用 select(M,a) 改為 select(M,a0), 用(1) 中使用的 數(shù)據(jù)運(yùn)行程序,查看并分析程序執(zhí)行結(jié)果。(4) 把主函數(shù)中的函數(shù)調(diào)用 select

24、(M,a) 改為 select(a,M), 用(1) 中使用的數(shù)據(jù) 運(yùn)行程序,查看并分析程序執(zhí)行結(jié)果。實(shí)驗(yàn) 7 指針一、實(shí)驗(yàn)?zāi)康?. 掌握指針變量的定義和基本使用方法。2. 熟悉指針和一維數(shù)組的關(guān)系,熟練使用指針變量訪問一維數(shù)組元素。3. 熟練掌握用簡單指針變量作函數(shù)的參數(shù)時函數(shù)的定義和調(diào)用方法。4. 明確數(shù)組名作函數(shù)的參數(shù)和指向數(shù)組的指針作函數(shù)的參數(shù)的異同, 學(xué)會相關(guān)的函數(shù)定義和調(diào)用。二、實(shí)驗(yàn)內(nèi)容1. 用指針法在一維有序數(shù)組中插入數(shù)據(jù)如下是具有10 個整數(shù)的升序數(shù)列,存儲在一維數(shù)組中,要求在其中插入任意一個整數(shù)后數(shù)列仍然有序。數(shù)列: 10, 20, 30, 40, 50, 60, 70, 8

25、0, 90, 99。2. 數(shù)據(jù)插入函數(shù)編寫在一維有序數(shù)組中插入數(shù)據(jù)的函數(shù)insert() , 并調(diào)用該函數(shù)實(shí)現(xiàn)數(shù)據(jù)插入。要求插入數(shù)據(jù)后的數(shù)組仍然有序。三、實(shí)驗(yàn)指導(dǎo)1. 用指針法在一維有序數(shù)組中插入數(shù)據(jù)1)編程分析按照下標(biāo)訪問數(shù)組元素的方法,用指針解決該問題。2)參考程序#define M 10#include “”void main()int aM+1=10,20,30,40,50,60,70,80,90,99;int i,n,*p,*q;printf( “請輸入要插入的數(shù)據(jù): n” );scanf( “ %d” ,&n);aM=n;/* 將要插入的數(shù)據(jù)放在數(shù)組的最后位置*/* 確定要插入的位

26、置p*/for(p=a,i=0;i=M;i+) if(n=p;q-)/* 元素后移 */*(q+1)=*q;*p=n;/*插入數(shù)據(jù)*/printf( n插入數(shù)據(jù)后的數(shù)列:n );for(p=a,i=0;i=M;i+)printf(d ,*(p+i);2.數(shù)據(jù)插入函數(shù)1)編程分析(1)在實(shí)驗(yàn)內(nèi)容1中,解決了用指針法在一維有序數(shù)組中插入數(shù)據(jù)的問題?,F(xiàn)只 需對數(shù)據(jù)的插入處理部分函數(shù)化即可。(2)插入函數(shù)insert()需要有三個形參:第一個int型簡單形參,表示要插入的 數(shù)據(jù);第二個int型簡單形參,表示數(shù)組中數(shù)據(jù)的個數(shù);第三個為int型指針形 參,它將指向一個一維數(shù)組。(3)在進(jìn)行函數(shù)調(diào)用時ins

27、ert()函數(shù)的第一個實(shí)參為要插入的數(shù)據(jù):第二個實(shí)參是數(shù)組數(shù)據(jù)個數(shù);第三個實(shí)參是數(shù)組名,即數(shù)組首地址。2)參考程序#define M 10#includevoid insert(int,int,int *); /*函數(shù)聲明 */void main()int aM+1=10,20,30,40,50,60,70,80,90,99;int i,x;printf(“請輸入要插入的數(shù)據(jù):n );scanf( d ,&x);insert(x,M,a);/*在有M個元素的一維數(shù)組 a中插入x*/printf( n插入數(shù)據(jù)后的數(shù)列:n );for(i=0;i=M;i+)printf( d ,ai);void

28、insert(int x,int ,n,int* p) int *t,*q,i;t=p+n;for(i=0;i=n;i+) if(x=t;q-)/* 元素后移 */*(q+1)=*q;*t=x;/*插入數(shù)據(jù)*/實(shí)驗(yàn) 8 線性表的順序存儲系統(tǒng)維護(hù)一、實(shí)驗(yàn)?zāi)康?. 掌握線性表的順序存儲的定義和基本使用方法。2. 掌握線性表的順序存儲存儲單元的排列特點(diǎn)。3. 掌握線性表的順序存儲系統(tǒng)的建立、查找 、修改、插入、刪除操作,學(xué)會相關(guān)的函數(shù)定義和調(diào)用。二、實(shí)驗(yàn)內(nèi)容1. 建立一個順序表。2. 能夠?qū)⒌捻樞虮磉M(jìn)行查找、 修改、 插入、 刪除等操作。 當(dāng)輸入指令錯誤時, 能夠提示錯誤信息。主函數(shù)中可以選擇由

29、 switch case 語句構(gòu)成主菜單,再根 據(jù)提示進(jìn)行相應(yīng)操作。3. 使用C語言程序編寫。三、實(shí)驗(yàn)指導(dǎo)1)編程分析(1) 在線性表的建立時,可直接用數(shù)組賦初值;(2) 在查找功能中要實(shí)現(xiàn)的功能為:當(dāng)能找到時該值時返回該值所在節(jié)點(diǎn),找不到時返回 -1 ;(3) 修改功能是在查找的基礎(chǔ)上,將找到的值加以修改;(4) 在插入功能中要實(shí)現(xiàn)的功能為:在找到指定節(jié)點(diǎn)后,當(dāng)線性表滿時,提示不能插入,當(dāng)線性表不滿時,插入數(shù)據(jù);(5) 刪除功能主要實(shí)現(xiàn):當(dāng)線性表為空或者刪除位置超出線性表長度時,都顯示位置錯誤,其他情形進(jìn)行刪除操作。2)參考程序#include #define max 20int last=

30、20;int nodemax=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19;int find(int find_num);void insert(int insert_pot,int insert_num);void delet(int delete_pot);void modify(int renew_pot,int renew_num);void list_printf();int main()printf(please enter number:n1,n5, 退出系統(tǒng) n);int flag=0;int find_num,delete

31、_pot;int renew_pot,renew_num;int insert_pot,insert_num;int findresult;int choice;doscanf(%d,&choice);switch(choice)case 1:查找 n2, 刪除 n3, 修改 n4, 插入numn);printf(please enter the findscanf(%d,&find_num);findresult =find(find_num);printf(findresult=%dn, findresult);break;case 2:printf(please enter the de

32、lete_pot n);scanf(%d,&delete_pot);list_printf();printf(n);delet(delete_pot);printf(after deleten);list_printf();break;case 3:printf(pleaseenter the renew_pot and renew_numn);scanf(%d %d,& renew_pot,& renew_num);printf(before modifyn);list_printf();modify(renew_pot, renew_num);printf(after modifyn);l

33、ist_printf();break;case 4:printf(please enter the insert_pot and insert_numn);scanf(%d %d,& insert_pot,& insert_num);printf(before insertn);list_printf();insert(insert_pot, insert_num);printf(after insertn);list_printf();break;case 5:flag=1;break;default:printf(input errorn);break;while(!flag);retur

34、n(0);int find(int find_num)/*點(diǎn)*/int k=0,findi;int flag=0;findi=0;while(klast-1| delete_pot 0) printf(wrong position!n);else查找值為 find_num 的節(jié)記錄節(jié)點(diǎn)標(biāo)號*/* 刪除指定節(jié)點(diǎn) */在指定節(jié)點(diǎn)修改為指定/* 在指定節(jié)點(diǎn)插入/* 輸出表的內(nèi)容*/for(i= delete_pot;i= insert_pot-1;i-) nodei+1=nodei;nodep-1= insert_num;last=last+1;void list_printf()int i;for

35、(i=0;i=last-1;i+)printf(%d ,nodei);printf(n);實(shí)驗(yàn)9線性表的鏈?zhǔn)酱鎯ο到y(tǒng)維護(hù)一、實(shí)驗(yàn)?zāi)康? .掌握線性表的鏈?zhǔn)酱鎯Φ亩x和基本使用方法。2 .掌握線性表的鏈?zhǔn)酱鎯Υ鎯卧呐帕刑攸c(diǎn)。3 .掌握線性表的鏈?zhǔn)酱鎯ο到y(tǒng)的建立、遍歷、插入、查找 、刪除操作,學(xué)會相 關(guān)的函數(shù)定義和調(diào)用。二、實(shí)驗(yàn)內(nèi)容1 .建立一個鏈表。2 .能夠?qū)⒌逆湵磉M(jìn)行查找、修改、插入、刪除等操作。當(dāng)輸入指令錯誤時, 能夠提示錯誤信息。主函數(shù)中可以選擇由switch case 語句構(gòu)成主菜單,再根據(jù)提示進(jìn)行相應(yīng)操作。3 .使用C語言程序編寫。三、實(shí)驗(yàn)指導(dǎo)1)編程要求(1)以循環(huán)的方式建

36、立一個有表頭的鏈表; 遍歷鏈表,并計(jì)算鏈表結(jié)點(diǎn)個數(shù);在查找功能中要實(shí)現(xiàn):當(dāng)能找到時打印該值的前驅(qū)結(jié)點(diǎn),找不到時輸出“沒找到”;在插入功能中要實(shí)現(xiàn):在某個特定的結(jié)點(diǎn)之后插入一個結(jié)點(diǎn);(5)在刪除功能主要實(shí)現(xiàn):刪除特定值的結(jié)點(diǎn),注意區(qū)分該節(jié)點(diǎn)是否為鏈表結(jié)尾。2)參考程序#include#include struct Node int data;struct Node *next;/*建立一個帶頭結(jié)點(diǎn)的單鏈表void Build(struct Node * L)*/int n;struct Node *p,*q;p=L;printf( 請輸入n和n個數(shù)據(jù)元素:n);scanf(%d,&n);whil

37、e(n-)q=( struct Node *)malloc(sizeof(struct Node);scanf(%d,&q-data);q-next=NULL;p-next=q;p=q;void Print(struct Node * L) /* 計(jì)算單鏈表的長度, 然后遍歷輸出單鏈表*/int num=0;struct Node * p;p=L-next;while(p)num+;printf(%d ,p-data);p=p-next;printf(n 長度為 %d:n,num);void Tips()/* 選擇函數(shù) */printf( 按數(shù)字鍵選擇相應(yīng)操作n);printf( 輸出單鏈表及

38、其長度:n);printf( 查找值為 x 的前驅(qū)結(jié)點(diǎn) :n);printf( 刪除值為 x 的結(jié)點(diǎn) :n);printf(在值為 y 的結(jié)點(diǎn)后插入值為x 的結(jié)點(diǎn) :n);printf(退出 :n);/* 查找值為 x 的直接前驅(qū)結(jié)點(diǎn)void Find(struct Node * L,int x) p*/struct Node * p;p=L;while( p-next &p-next-data!=x)p=p-next;if(p-next)printf(%d 的前驅(qū)結(jié)點(diǎn)為 :%dn,x,p-data);elseprintf( 沒找到 !n);void Delete(struct Node *

39、L,int x)/* 刪除值為 x 的結(jié)點(diǎn) */struct Node * p,*q;p=L;while( p-next &p-next-data!=x)p=p-next;if(p-next)if(p-next-next)q=p-next;p-next=q-next;free(q); elseq=p-next;p-next=NULL;free(q);printf( 刪除成功 !n);elseprintf(鏈表中沒有%dn,x);void Insert(struct Node *L, struct Node *x,int y)/*在值為y的結(jié)點(diǎn)后插入值為x的結(jié)點(diǎn)*/struct Node *p;

40、P=L;while(p-next!=NULL& p-data!=y)p=p-next;if(p-data!=y)printf(No Find Y !);elsex-next= p-next;p-next=x;printf(插入成功!n);int main()int choice,x,y,flag;struct Node * L,*p;L=(struct Node *)malloc(sizeof(struct Node);L-next=NULL;L-data=-1;Build(L);/*建立一個帶頭結(jié)點(diǎn)的單鏈表*/Tips();/*選擇函數(shù)*/scanf(%d”,& choice);while(

41、choice)switch(choice)case 1:Print(L); /*計(jì)算單鏈表的長度,然后遍歷輸出單鏈表*/break;case 2:printf(請輸入要查找的元素X:n);scanf(%d,&x); Find(L,x);/* 查找*/break; case 3:printf(請輸入要刪除的元素X:n);scanf(%d,&x); Delete(L,x);/* 刪除*/break; case 4:printf(請輸入要插入的元素X及其前結(jié)點(diǎn)Y:(X,Y)n); scanf(%d,%d,&x,&y); p=(struct Node *)malloc(sizeof(struct No

42、de); p-data=x; Insert(L,p,y);/* 插入*/break; default:break;Tips();scanf(%d”,&choice);/* 下一步操作選擇 */ return 0;實(shí)驗(yàn) 10 二叉樹的遍歷一、實(shí)驗(yàn)?zāi)康?. 理解二叉樹的原理,掌握二叉樹的存儲方法。2. 掌握二叉樹前、中、后序順序遍歷的過程。3. 掌握前、中、后序遍歷二叉樹程序的編寫,并用遞歸與非遞歸方法分別實(shí)現(xiàn)。二、實(shí)驗(yàn)內(nèi)容1. 輸入數(shù)據(jù)建立一棵二叉樹。2. 輸出其前、中、后序遍歷的結(jié)果,分別用遞歸與非遞歸方法實(shí)現(xiàn)。3. 使用C語言程序編寫。三、實(shí)驗(yàn)指導(dǎo)1)編程分析(1) 在二叉樹的建立時,先用遞

43、歸算法建立一顆二叉樹,以所輸入的字母為其數(shù)據(jù)項(xiàng),當(dāng)輸入為#時,所對應(yīng)的節(jié)點(diǎn)為空;(2) 分別以前、中、后序遍歷二叉樹,打印相應(yīng)的節(jié)點(diǎn)值。2)參考程序(1) 前序非遞歸遍歷二叉樹#include#include#define MAX 100 struct nodeint data;struct node *llink;struct node *rlink;*shutree=NULL;void preorder(struct node *t);int main()struct node *createtree(struct node *tree);shutree=createtree(shutre

44、e);preorder(shutree);return(0);void preorder(struct node *tree)struct node*p;struct node*sMAX;int top;top=-1;p=tree;dowhile(p!=NULL)printf( %c,p-data);if(p-rlink!=NULL)top=top+1;stop=p-rlink;p=p-llink;if(top!=-1)p=stop;top=top-1;while(p!=NULL | top!=-1);struct node *createtree(struct node *tree)char

45、 ch;scanf(%c,&ch);if(ch=)tree=NULL;elsetree=(struct node *)malloc(sizeof(struct node);tree-data=ch;createtree(tree-llink);createtree(tree-rlink);return(tree);(2) 前序遞歸遍歷二叉樹void PreOrder(struct node *tree)struct node *p;p=tree;if(p!=NULL)printf(%c , root-data);PreOrder(p-lchild);PreOrder(p-rchild);(3)

46、 中序非遞歸遍歷二叉樹void Inorder(struct node *tree)struct node*p;struct node*sMAX;int top;top=-1;p=tree;dowhile(p!=NULL)if(p-rlink!=NULL)top=top+1;stop=p;p=p-llink;if(top!=-1)p=stop;printf( %c,p-data);top=top-1;p=p-rlink;while(p!=NULL | top!=-1);(4) 中序遞歸遍歷二叉樹void InOrder(struct node *tree)struct node *p;p=tree;if(p!=NULL)InOder(p-lchild);printf(%c , root-data);InOrder(p-rchild);(5) 后序非遞歸遍

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論