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頁
免費(fèi)預(yù)覽已結(jié)束,剩余38頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(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+ 6.0集成環(huán)境的使用方法。2 .掌握C程序在Microsoft Visual C+ 6.0開發(fā)環(huán)境中的編輯、編譯、鏈接和運(yùn)行 全過程二、實(shí)驗(yàn)內(nèi)容1)啟動 Microsoft Visual C+ 6.0 開發(fā)環(huán)境雙擊桌面應(yīng)用程序圖標(biāo) 駛或云兄 開始”菜單程序組中的 Microsoft Visual C+6.0應(yīng)用程序,啟動VC+,如圖所示圖1.1 VC+初始界面2)建立C源程序文件方法1:

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

3、11圖1.3新建文件Tiltaal C*匚 |仁 WE饃工*±1XAqi an 1- U餐mII JI- JI - JBIUUJW>,3牛注洱 >.S> S«L/ <|耐行1萬圖1.4 C源程序文件編輯界面,li¥i Ftial* fo圖1.5文本文件編輯界面編輯源文件圖1.6 C源程序編輯界面編輯源文件4)保存源文件源文件編輯結(jié)束后,執(zhí)行 文件”-> 保存”命令保存文件,文本文件編輯界面中編輯的源文件保存時(shí)必須在文件名后加上擴(kuò)展名:C”,否則保存的是擴(kuò)展名為txt的文本文件,不能編譯運(yùn)行。5)組件文件執(zhí)行 組建”-> 組建”命

4、令或直接按F7功能鍵或單機(jī)工具欄Build按鈕,可以 對源文件進(jìn)行編譯、鏈接而不運(yùn)行改程序。當(dāng)然也可以先執(zhí)行 組建“,編譯"(快 捷鍵Ctrl+F7)命令編譯文件,再執(zhí)行 組建”-> 組建"(快捷鍵F7)命令鏈接文 件。由于VC+有工作區(qū)的要求,所以組建時(shí),系統(tǒng)提示需要建立工作區(qū),如圖1.7所示。單機(jī) 是"按鈕,系統(tǒng)會自動建立工作區(qū),組建后的結(jié)果如圖1.8所示。 IcriTif eft i. ruil. C )圖1.7提示建立工作區(qū)圖1.8組建源程序結(jié)果注意:圖1.8下方的“組建”信息窗口中的內(nèi)容說明了組建的結(jié)果,必須保 證錯(cuò)誤(error(s)數(shù)為0才能運(yùn)

5、行程序。6)運(yùn)行文件執(zhí)行組建”-> 執(zhí)行”命令或直接按Ctrl+F5鍵或單機(jī)工具欄BuildExecute按鈕,可以運(yùn)行程序,結(jié)果顯示在用戶輸出窗口中,如圖1.9所示。圖1.9用戶輸出窗口注意:如果要編輯下一個(gè)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é)果 如圖1.10所示。運(yùn)行該文件,并按要求輸入數(shù)據(jù),得到運(yùn)行結(jié)果。Syl- I. B

6、irrv<t Tithi 1 CH-圖1.10 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()B printf()的用法。4 .熟悉字符輸入輸出函數(shù)getchar(和putchar()的用法。二、實(shí)驗(yàn)內(nèi)容1 .格式說明符的使用。創(chuàng)建并編輯輸入輸出各個(gè)類型數(shù)據(jù)的程序,分析各個(gè)格式說明符的作用。2 .編寫“輸入輸出字符”程序,功能如下:使用getchar()函數(shù)接收一個(gè)字符,用printf()函數(shù)顯示;使用scanf()函數(shù)接收一個(gè)字符,用 putchar()

7、函數(shù)顯示。3 .編寫“求三角形面積”程序,功能如下:輸入三角形三邊長,求三角形的面積。 已知三角形的三邊長a、b、c,則該三角形的面積公式為:090km其中,s (a b c)/2。4 .編寫“圓柱體”程序,功能如下:設(shè)圓柱體的半徑 r=2.5,圓柱高h(yuǎn)=5.0,求出 該圓柱體的表面積和體積。要求:用scanf()函數(shù)輸入數(shù)據(jù),輸出時(shí)要求有文字說 明,取小數(shù)點(diǎn)后兩位數(shù)字。三、實(shí)驗(yàn)指導(dǎo)1. 格式說明符的使用(參考教材)2. “輸入輸出字符”程序1)編程分析(1)需要定義字符型變量存放輸入的數(shù)據(jù);(2)用scanf()函數(shù)輸入字符時(shí),要注意不要接收緩沖區(qū)中已有的字符。2)參考程序#include

8、"stdio.h"main()char a,b,c;printf("1.Input a character:n");a=getchar();c=getchar();printf("The character is:%cnn",a);printf("2.Input a character:n");scanf("%c",&b);printf("The character is:");putchar(b);putchar('n');3. “求三角形面積”程序

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

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

11、.2)#include Stdio.h"#define PI 3.14159 main()float r,h;double s,v;printf( Input the value of r and h:H");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:%10.2fn",s);printf( The value of v is:%10.2fn",v); 實(shí)驗(yàn)3選擇結(jié)構(gòu)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康? .學(xué)會使用邏輯表達(dá)式表示條件的方法。

12、2 .掌握switch語句的用法。二、實(shí)驗(yàn)內(nèi)容1.switch語句的應(yīng)用編寫計(jì)算器程序。要求從鍵盤任意輸入兩個(gè)數(shù)值,然后輸入一個(gè)四則運(yùn)算符,自 動完成運(yùn)算后輸出結(jié)果。三、實(shí)驗(yàn)指導(dǎo)1.switch語句的應(yīng)用1)編程分析(1)四則運(yùn)算共有加(+)、減(-)、乘(*)、除(/) 4種運(yùn)算,要做出判斷需使用switch語句。當(dāng)輸入符號為四則運(yùn)算之外的符號時(shí),不進(jìn)行任何運(yùn)算,但應(yīng)給出相應(yīng)的提示信息。當(dāng)使用提示信息時(shí),switch語句應(yīng)含有default子句。2)參考程序#include stdio.h"void main()float x,y;char p;scanf( %f,%f ”,&am

13、p;x,&y);p=getchar();switch(p)case '+':printf( %f+%f=%fn ”,x,y,x+y);break; 0case -:printf( %f-%f=%fn ”,x,y,x-y);break; 親,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)試程序時(shí),+、-、*、/及非四則運(yùn)算符的情況都應(yīng)予以調(diào)試實(shí)驗(yàn)4循環(huán)結(jié)構(gòu)程序

14、設(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 .階乘累加問題。編寫程序,求1! +2! +3! +n!的值。2 .取彩球問題。有12個(gè)彩球:3個(gè)白色,5個(gè)紅色,4個(gè)黃色,從中任意取n個(gè) 球(2 n 12),求出所有不同的取法。三、實(shí)驗(yàn)指導(dǎo)1 .階乘累加問題1)編程分析(1)本實(shí)驗(yàn)內(nèi)容為求解階乘問題。(2)求n!用一個(gè)循環(huán)即可實(shí)現(xiàn)。(3)求1! +2! +3! +n!的值,需要在求階乘程序之外增加一個(gè)外重循環(huán)。2)參考程序#include Stdio.h"void main()long int s=1,t;in

15、t i,j,n;printf( n=”);scanf( %d",&n);for(i=2;i<=n;i+)for(t=1,j=1;j<=i;j+)t*=j;s+=t;printf( S=%ldn”,s);3)程序調(diào)試(1)輸入一個(gè)不大的正整數(shù),分析程序執(zhí)行結(jié)果。(2)輸入一個(gè)零或者負(fù)數(shù),分析程序執(zhí)行結(jié)果。(3)輸入一個(gè)很大的正整數(shù),分析程序執(zhí)行結(jié)果。(4)當(dāng)程序結(jié)果不符合要求時(shí),修改程序,直到對任何輸入數(shù)據(jù)都能輸出正確的歡迎下載12實(shí)驗(yàn)5數(shù)組執(zhí)行結(jié)果,或者給出一個(gè)明確的提示信息。例如,當(dāng)輸入數(shù)據(jù)非法時(shí),給出一個(gè) 錯(cuò)誤的提示信息。2 .取彩球問題1)編程分析本題用到“

16、窮舉”算法。窮舉的基本思想是對問題的所有可能性一一測試,直到 找到解或?qū)⑷靠赡軤顟B(tài)都測試過為止?!案F舉”的核心是依次測試循環(huán)體。循 環(huán)控制有兩種辦法:計(jì)數(shù)法和標(biāo)志法。計(jì)數(shù)法要先確定循環(huán)次數(shù),然后逐次測試, 完成測試次數(shù)后循環(huán)結(jié)束;標(biāo)志法是達(dá)到某一目標(biāo)后循環(huán)結(jié)束。2)參考程序#incude Stdio.h"void main()int n,white,red,yellow,count=0;printf( Input");scanf( %d",&n);printf( white red yellown");for(white=1;white<

17、=3;white+) for(red=1;red<=5;red+) yellow=n-white-red;if(yellow>=1&&yellow<=4)printf( %5d%5d%5dn”,white,red,yellow); count+; printf(Total:%dn”,count);3)程序調(diào)試(1)輸入不小于2并且不大于12的整數(shù)值,查看并分析程序結(jié)果。(2)輸入小于2或者大于12的整數(shù)值,查看并分析程序結(jié)果。修改程序,使得程序運(yùn)行時(shí)只接受(2 n 12)的輸入值,并能獲得正確結(jié)果。一、實(shí)驗(yàn)?zāi)康? .了解數(shù)組的特點(diǎn),掌握一維數(shù)組的定義、初始化及

18、其使用方法。2 .掌握二維數(shù)組的定義、初始化及其使用方法。3 .能用一維數(shù)組和二維數(shù)組解決簡單的實(shí)際問題。二、實(shí)驗(yàn)內(nèi)容1 .鞍點(diǎn)問題在二維數(shù)組中,若某一位置上的元素在該行中最大, 而在該列中最小,則該元素 即為該二維數(shù)組的鞍點(diǎn)。要求從鍵盤輸入一個(gè)二維數(shù)組,當(dāng)鞍點(diǎn)存在時(shí),把鞍點(diǎn) 找出來。2 .選擇法排序問題將存儲在一維數(shù)組中的10個(gè)整數(shù)用選擇法進(jìn)行排序。三、實(shí)驗(yàn)指導(dǎo)1 .鞍點(diǎn)問題1)編程分析(1)對二維數(shù)組按行處理。 對每一行首先找出它的最大值元素,然后看它在該列上是否為最小值,若是,則找到一個(gè)鞍點(diǎn)。找到鞍點(diǎn)后輸出元素值及其所在的行列值。2)參考程序#define M 3#define N 4v

19、oid main()int aMN,i,j,k;printf(請輸入二維數(shù)組的數(shù)據(jù):n”);for(i=0;i<M;i+)for(j=0;j<N;j+)scanf( "d ,&aij);for(i=0;i<M;i+)k=0;for(j=1;j<N;j+)if(a皿>aik) k=j;歡迎下載14for(j=0;j<M;j+)if(a皿k<aik)break;if(j=M)printf("d %dr% d,aik,I,k);3)程序調(diào)試(1)輸入有鞍點(diǎn)的一組數(shù)據(jù),查看并分析程序的運(yùn)行結(jié)果。例如:980215 4060-60 8

20、91210 -3101 89(2)輸入沒有鞍點(diǎn)的一組數(shù)據(jù),查看并分析程序的運(yùn)行結(jié)果。例如:980215 4060-60 189 1210 -3101 892 .選擇法排序問題1)編程分析(1)我們已經(jīng)學(xué)習(xí)了冒泡法排序,冒泡法排序依次,就有可能交換一次,需要交 換的次數(shù)越多,效率越低。 選擇法的基本思路是:第一趟,從所有元素中選擇一個(gè)最小元素后放在a0中,最多交換一次;第二趟,從a1開始到最后的各元素中選擇一個(gè)最小元素, 放在a1中;以此類推,M個(gè)數(shù)需要進(jìn)行M-1趟比較,但交換的次數(shù)比冒泡排序 法少得多。2)參考程序#define M 10#include “stdio.h "void

21、 main()int aM,n,i,j,min,temp;printf(請輸入排序數(shù)據(jù):n”);for(i=0;i<M;i+)scanf( "d ,&ai);printf(排序前數(shù)列:n”);for(i=0;i<M;i+)printf( "d ,ai);for(i=0;i<M-1;i+)min=i;for(j=i+1;j<M;j+) if(aj<amin) min=j; temp=ai; ai=amin; amin=temp;printf( n排序后數(shù)列:n”);for(i=0;i<M;i+) printf( "d ,a

22、i);3)程序調(diào)試(1)運(yùn)行程序,任意輸入10個(gè)整數(shù),查看并分析程序執(zhí)行結(jié)果。(2)運(yùn)行程序,輸入多余10個(gè)的整數(shù),查看并分析程序執(zhí)行結(jié)果。(3)運(yùn)行程序,輸入一組升序排列的有序整數(shù),查看并分析程序執(zhí)行結(jié)果。(4)運(yùn)行程序,輸入一組降序排列的有序的整數(shù),查看并分析程序執(zhí)行結(jié)果。歡迎下載16實(shí)驗(yàn)6函數(shù)一、實(shí)驗(yàn)?zāi)康? .掌握自定義函數(shù)的一般結(jié)構(gòu)及定義函數(shù)和函數(shù)調(diào)用的方法。2 .熟練掌握一維數(shù)組作函數(shù)的參數(shù)時(shí)函數(shù)的定義和調(diào)用方法,熟悉用函數(shù)求解二維數(shù)組問題的函數(shù)定義及調(diào)用方法。二、實(shí)驗(yàn)內(nèi)容1.選擇法排序函數(shù)的定義及使用編寫一個(gè)用選擇法對一維數(shù)組升序排序許的函數(shù),并在主函數(shù)中調(diào)用該排序函數(shù),實(shí)現(xiàn)對任意

23、20個(gè)整數(shù)的排序。三、實(shí)驗(yàn)指導(dǎo)1.選擇法排序函數(shù)的定義及使用1)編程分析這是一維數(shù)組作函數(shù)參數(shù)的問題。(1)設(shè)計(jì)一個(gè)對一維數(shù)組的前n個(gè)數(shù)用選擇法進(jìn)行排序的函數(shù)select。selector 數(shù)有兩個(gè)形參,一個(gè)是排序元素?cái)?shù)形參,一個(gè)是一維數(shù)組形參。select()函數(shù)不需要返回值,函數(shù)類型說明為void型。在進(jìn)行函數(shù)調(diào)用時(shí),實(shí)參和形參要按照參數(shù)的意義在位置上對應(yīng)一致。2)參考程序#define M 20#include “stdio.h "void select(int,int a);/* 函數(shù)聲明 */void main()int aM,n,i;printf(請輸入排序數(shù)據(jù):n”);

24、for(i=0;i<M;i+)scanf( "d ,&ai);printf(排序前數(shù)列:n");for(i=0;i<M;i+)printf( "d ,ai);select(M,a);printf( n排序后數(shù)列:n”);for(i=0;i<M;i+)printf( "d ,ai);歡迎下載17void select(int n,int a口)int I,j,min,temp;for(i=0;i<n-1;i+)min=i;for(j=i+1;j<n;j+)if(aj<amin)min=j;temp=ai;ai=a

25、min;amin=temp;3)程序調(diào)試(1)運(yùn)行程序,任意輸入20個(gè)整數(shù),查看并分析程序執(zhí)行結(jié)果。把主函數(shù)中的函數(shù)調(diào)用select(M,a)改為select(M,&a0),用中使用的數(shù)據(jù)運(yùn) 行程序,查看并分析程序執(zhí)行結(jié)果。(3)把主函數(shù)中的函數(shù)調(diào)用select(M,a)改為select(M,a0),用中使用的數(shù)據(jù)運(yùn) 行程序,查看并分析程序執(zhí)行結(jié)果。把主函數(shù)中的函數(shù)調(diào)用select(M,a)改為select(a,M),用(1)中使用的數(shù)據(jù)運(yùn)行程序,查看并分析程序執(zhí)行結(jié)果。歡迎下載18實(shí)驗(yàn)7指針一、實(shí)驗(yàn)?zāi)康? .掌握指針變量的定義和基本使用方法。2 .熟悉指針和一維數(shù)組的關(guān)系,熟練使用指

26、針變量訪問一維數(shù)組元素。3 .熟練掌握用簡單指針變量作函數(shù)的參數(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個(gè)整數(shù)的升序數(shù)列,存儲在一維數(shù)組中,要求在其中插入任意一 個(gè)整數(shù)后數(shù)列仍然有序。數(shù)列:10, 20, 30, 40, 50, 60, 70, 80, 90, 99。2 .數(shù)據(jù)插入函數(shù)編寫在一維有序數(shù)組中插入數(shù)據(jù)的函數(shù)insert(),并調(diào)用該函數(shù)實(shí)現(xiàn)數(shù)據(jù)插入。要求插入數(shù)據(jù)后的數(shù)組仍然有序o三、實(shí)驗(yàn)指導(dǎo)1 .用指針法在一維有序數(shù)組中插入數(shù)據(jù)1)編程分析按照下

27、標(biāo)訪問數(shù)組元素的方法,用指針解決該問題。2)參考程序#define M 10#include Stdio.h"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);/*將要插入的數(shù)據(jù)放在數(shù)組的最后位置*/*確定要插入的位置p*/*p指向要插入的數(shù)據(jù)*/aM=n;for(p=a,i=0;i<=M;i+) if(n<=*(p+i) p=p+i;break;for(q=a+M-1;q>=p;q-)/

28、*元素后移*/歡迎下載19*(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ù)的問題。現(xiàn)只 需對數(shù)據(jù)的插入處理部分函數(shù)化即可。(2)插入函數(shù)insert()需要有三個(gè)形參:第一個(gè)int型簡單形參,表示要插入的數(shù)據(jù); 第二個(gè)int型簡單形參,表示數(shù)組中數(shù)據(jù)的個(gè)數(shù);第三個(gè)為 int型指針形參,它 將指向一個(gè)一維數(shù)組。(3)在進(jìn)行函數(shù)調(diào)用時(shí)insert()函數(shù)的第一個(gè)實(shí)參為要插入的數(shù)據(jù):第

29、二個(gè)實(shí)參是 數(shù)組數(shù)據(jù)個(gè)數(shù);第三個(gè)實(shí)參是數(shù)組名,即數(shù)組首地址。2)參考程序#define M 10#include Stdio.h"void 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個(gè)元素的一維數(shù)組 a中插入x*/printf( n插入數(shù)據(jù)后的數(shù)列:n”);for(i=0;i<=M;i+)printf( %d&qu

30、ot;,ai);void insert(int x,int ,n,int* p)int *t,*q,i ;t=p+n;for(i=0;i<=n;i+)/*將要插入的數(shù)據(jù)放在數(shù)組的最后位置*/*確定要插入的位置p*/if(x<=*(p+i)t=p+i;/*p指向要插入的數(shù)據(jù)*/break;for(q=p+n-1;q>=t;q-)/* 元素后移 */*(q+1)=*q;*t=x;/*插入數(shù)據(jù)*/歡迎下載43實(shí)驗(yàn)8線性表的順序存儲系統(tǒng)維護(hù)一、實(shí)驗(yàn)?zāi)康? .掌握線性表的順序存儲的定義和基本使用方法。2 .掌握線性表的順序存儲存儲單元的排列特點(diǎn)。3 .掌握線性表的順序存儲系統(tǒng)的建立、查

31、找、修改、插入、刪除操作,學(xué)會相關(guān)的函數(shù)定義和調(diào)用。二、實(shí)驗(yàn)內(nèi)容1 .建立一個(gè)順序表。2 .能夠?qū)⒌捻樞虮磉M(jìn)行查找、修改、插入、刪除等操作。當(dāng)輸入指令錯(cuò)誤時(shí), 能夠提示錯(cuò)誤信息。主函數(shù)中可以選擇由 switch case語句構(gòu)成主菜單,再根據(jù) 提示進(jìn)行相應(yīng)操作。3 .使用C語言程序編寫。三、實(shí)驗(yàn)指導(dǎo)1)編程分析(1)在線性表的建立時(shí),可直接用數(shù)組賦初值;(2)在查找功能中要實(shí)現(xiàn)的功能為:當(dāng)能找到時(shí)該值時(shí)返回該值所在節(jié)點(diǎn),找不到時(shí)返回-1 ;(3)修改功能是在查找的基礎(chǔ)上,將找到的值加以修改;(4)在插入功能中要實(shí)現(xiàn)的功能為:在找到指定節(jié)點(diǎn)后,當(dāng)線性表滿時(shí),提示不能插入,當(dāng)線性表不滿時(shí),插入

32、數(shù)據(jù);(5)刪除功能主要實(shí)現(xiàn):當(dāng)線性表為空或者刪除位置超出線性表長度時(shí),都顯示位置錯(cuò)誤,其他情形進(jìn)行刪除操作。2)參考程序#include <stdio.h>#define max 20int last=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 rene

33、w_num);void list_printf();int main()printf("please enter number:n1,查找 n2,刪除 n3,修改 n4,插入 n5,退出系 統(tǒng) n");int flag=0;int find_num,delete_pot;int renew_pot,renew_num;int insert_pot,insert_num;int findresult;int choice;doscanf("%d”,&choice);switch(choice)case 1:printf("please enter

34、the find_numn");scanf("%d”,&find_num);findresult =find(find_num);printf("findresult=%dn", findresult);break;case 2:printf("please enter the delete_pot n");scanf("%d”,&delete_pot);list_printf();printf("n");delet(delete_pot);printf("after delet

35、e'n");list_printf();break;case 3:printf("please enter the renew_pot and renew_num n");scanf("%d %d",& renew_pot,& renew_num);printf("before modifyn");list_printf();modify(renew_pot, renew_num);printf("after modifyn");list_printf();break;case 4

36、:printf("please enter the insert_pot and insert_num n");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("

37、input errorn");break;while(!flag);return(0);int find(int find_num)/* 查找值為 find_num 的節(jié)點(diǎn)*/int k=0,findi;int flag=0;findi=0;while(k<=last-1&&!flag)if(nodek= find_num)findi=k+1;/*記錄節(jié)點(diǎn)標(biāo)號*/flag=1;elsek+;if(!flag)findi=-1;return(findi);void delet(int delete_pot)int i;if(delete_pot>last-1

38、| delete_pot <0)printf("wrong position!n");elsefor(i= delete_pot;i<=last-1;i+) nodei-1=nodei;last-;/*刪除指定節(jié)點(diǎn)*/void modify(int renew_pot,int renew_num)/*在指定節(jié)點(diǎn)修改為指定值*/noderenew_pot-1= renew_num;void insert(int insert_pot,int insert_num)int i;/*在指定節(jié)點(diǎn)插入指定值*/if(last=max)printf("the li

39、st is full!n");elsefor(i=last-1;i>= insert_pot-1;i-)nodei+1=nodei;nodep-1= insert_num;last=last+1;void list_printf()/*輸出表的內(nèi)容 */int i;for(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)酱鎯ο?/p>

40、統(tǒng)的建立、遍歷、插入、查找 、刪除操作,學(xué)會相 關(guān)的函數(shù)定義和調(diào)用。二、實(shí)驗(yàn)內(nèi)容1 .建立一個(gè)鏈表。2 .能夠?qū)⒌逆湵磉M(jìn)行查找、修改、插入、刪除等操作。當(dāng)輸入指令錯(cuò)誤時(shí), 能夠提示錯(cuò)誤信息。主函數(shù)中可以選擇由 switch case語句構(gòu)成主菜單,再根據(jù) 提示進(jìn)行相應(yīng)操作。3 .使用C語言程序編寫。三、實(shí)驗(yàn)指導(dǎo)1)編程要求(1)以循環(huán)的方式建立一個(gè)有表頭的鏈表; 遍歷鏈表,并計(jì)算鏈表結(jié)點(diǎn)個(gè)數(shù);在查找功能中要實(shí)現(xiàn):當(dāng)能找到時(shí)打印該值的前驅(qū)結(jié)點(diǎn),找不到時(shí)輸出“沒找到”;在插入功能中要實(shí)現(xiàn):在某個(gè)特定的結(jié)點(diǎn)之后插入一個(gè)結(jié)點(diǎn);(5)在刪除功能主要實(shí)現(xiàn):刪除特定值的結(jié)點(diǎn),注意區(qū)分該節(jié)點(diǎn)是否為鏈表結(jié)尾

41、。4 )參考程序#include<stdio.h>#include<stdlib.h>struct Nodeint data;struct Node *next;void Build(struct Node * L)/*建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表*/int n;struct Node *p,*q;p=L;printf("請輸入n和n個(gè)數(shù)據(jù)元素:n");scanf("%d",&n);while(n-) q=( struct Node *)malloc(sizeof(struct Node);scanf("%d”,&a

42、mp;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("<1&g

43、t;輸出單鏈表及其長度:n");printf("<2>查找值為x的前驅(qū)結(jié)點(diǎn):n");printf("<3>刪除值為x的結(jié)點(diǎn):n");printf("<4>在值為y的結(jié)點(diǎn)后插入值為x的結(jié)點(diǎn):n");printf("<0> 退出:n");void Find(struct Node * L,int x)/*查找值為x的直接前驅(qū)結(jié)點(diǎn)p*/struct Node * p;p=L;while( p->next &&p->next->da

44、ta!=x)p=p->next;if(p->next)printf("%d 的前驅(qū)結(jié)點(diǎn)為:dn”,x,p->data);elseprintf("沒找到!!n");void Delete(struct Node * 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->ne

45、xt=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;p=L;while(p->next!=NULL&& p->data!=y)p=p->next;if(p->data!=y)printf(&q

46、uot;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);/*建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表*/Tips();/*選擇函數(shù)*/scanf("%d”,& choice);while(choice)swit

47、ch(choice)case 1:Print(L);/*計(jì)算單鏈表的長度,然后遍歷輸出單鏈表*/break;case 2:printf("請輸入要查找的元素X:n"); scanf("%d",&x);Find(L,x);break;/*查找*/case 3:printf("請輸入要?jiǎng)h除的元素X:n"); scanf("%d",&x);Delete(L,x);/* 刪除*/break;case 4:printf("請輸入要插入的元素X及其前結(jié)點(diǎn)Y: (X,Y)n"); scanf(

48、"%d,%d",&x,&y);p=(struct Node *)malloc(sizeof(struct Node); 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

49、.輸入數(shù)據(jù)建立一棵二叉樹。2 .輸出其前、中、后序遍歷的結(jié)果,分別用遞歸與非遞歸方法實(shí)現(xiàn)。3 .使用C語言程序編寫。三、實(shí)驗(yàn)指導(dǎo)1)編程分析(1)在二叉樹的建立時(shí),先用遞歸算法建立一顆二叉樹,以所輸入的字母為其數(shù) 據(jù)項(xiàng),當(dāng)輸入為#時(shí),所對應(yīng)的節(jié)點(diǎn)為空;(2)分別以前、中、后序遍歷二叉樹,打印相應(yīng)的節(jié)點(diǎn)值。2)參考程序(1)前序非遞歸遍歷二叉樹#include<stdio.h>#include<malloc.h>#define MAX 100struct nodeint data;struct node *llink;struct node *rlink;*shutree

50、=NULL;void preorder(struct node *t);int main()struct node *createtree(struct node *tree);shutree=createtree(shutree);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) t

51、op=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 ch;scanf("%c",&ch);if(ch='=')tree=NULL;elsetree=(struct node *)malloc(sizeof(struct node);tree->data=ch;createtree(tree->llink);cre

52、atetree(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)中序非遞歸遍歷二叉樹void Inorder(struct node *tree)struct node*p;struct node*sMAX;int top;top=-1;p=tree;dowh

53、ile(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);In

54、Order(p->rchild);(5)后序非遞歸遍歷二叉樹void postorder(struct node *tree)struct node*p;struct node*q=NULL;struct node*sMAX;int top;top=-1;p=tree;dowhile(p!=NULL)if(p->rlink!=NULL)top=top+1;stop=p->rlink;p=p->llink;p= stop;top=top-1;if(p->rlink=NULL| p->rlink=q) printf(" %c”,p->data);

55、q=p;p=NULL;elsep=p->rlink;while(p!=NULL | top!=-1);(6)后序遞歸遍歷二叉樹void PostOrder(struct node *tree)struct node *p;p=tree;if(p!=NULL)PostOrder(p->lchild);PostOrder(p->rchild);printf("%c ", root->data);實(shí)驗(yàn)11二叉排序樹系統(tǒng)維護(hù)一、實(shí)驗(yàn)?zāi)康? .掌握二叉排序樹定義和基本使用方法。2 .掌握二叉排序樹存儲數(shù)據(jù)的排列特點(diǎn)。3 .掌握二叉排序樹系統(tǒng)的建立、插入、查找

56、、替換、刪除操作,學(xué)會相關(guān)的函 數(shù)定義和調(diào)用。二、實(shí)驗(yàn)內(nèi)容1 .輸入數(shù)據(jù)自行建立一棵二叉排序樹。2 .能夠?qū)⒌亩媾判驑溥M(jìn)行查找、插入、替換、刪除等操作。當(dāng)輸入指令錯(cuò) 誤時(shí),能夠提示錯(cuò)誤信息。主函數(shù)中可以選擇由switch case語句構(gòu)成主菜單,再根據(jù)提示進(jìn)行相應(yīng)操作。3 .使用C語言程序編寫。三、實(shí)驗(yàn)指導(dǎo)1)編程分析(1)在建立一棵二叉排序樹時(shí),可以采用反復(fù)調(diào)用插入函數(shù)直到整個(gè)二叉排序樹 建立完成;(2)查找功能主要實(shí)現(xiàn):若找到返回該節(jié)點(diǎn)指針并打印“找到了”,否則返回空 并打印“沒找到”;在刪除時(shí),要充分考慮到被刪除節(jié)點(diǎn)的各種情況:是否有左子女,是否有右 子女,是否有雙親;(4)替換功能的實(shí)質(zhì)是將一個(gè)節(jié)點(diǎn)刪除,然后再插入一個(gè)新節(jié)點(diǎn)。2)參考程序#include <

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論