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頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Harbin Institute of TechnologyC語言與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書劉梅 索瑩 田文龍哈工大電子與信息工程學(xué)院電子工程系實(shí)驗(yàn)1 實(shí)驗(yàn)平臺(tái)一、實(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)啟動(dòng)Microsoft Visual C+ 6.0開發(fā)環(huán)境雙擊桌面應(yīng)用程序圖標(biāo)或云兄“開始”菜單程序組中的Microsoft Visual C+ 6.0應(yīng)用程序,啟動(dòng)VC+,如圖所示圖1.1 VC+初始界面2)建立C源程序文件方法1:?jiǎn)螜C(jī)工具

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

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

4、需要建立工作區(qū),如圖1.7所示。單機(jī)“是”按鈕,系統(tǒng)會(huì)自動(dòng)建立工作區(qū),組建后的結(jié)果如圖1.8所示。圖1.7 提示建立工作區(qū)圖1.8 組建源程序結(jié)果注意:圖1.8下方的“組建”信息窗口中的內(nèi)容說明了組建的結(jié)果,必須保證錯(cuò)誤(error(s))數(shù)為0才能運(yùn)行程序。6)運(yùn)行文件執(zhí)行“組建”->“執(zhí)行”命令或直接按Ctrl+F5鍵或單機(jī)工具欄BuildExecute按鈕,可以運(yùn)行程序, 結(jié)果顯示在用戶輸出窗口中,如圖1.9所示。圖1.9 用戶輸出窗口注意:如果要編輯下一個(gè)C源程序,由于新建的文件不會(huì)自動(dòng)加入工作區(qū),因此需要先關(guān)閉當(dāng)前工作區(qū)。方法是執(zhí)行“文件”->“關(guān)閉工作空間”命令,或者關(guān)

5、閉后重新啟動(dòng)VC+,再按照上述方法建立、編輯新的C源文件,讓VC+自動(dòng)建立工作區(qū)。7)運(yùn)行“加法”程序在VC+環(huán)境中建立并編輯實(shí)現(xiàn)加法運(yùn)算的源程序,然后組建該文件,結(jié)果如圖1.10所示。運(yùn)行該文件,并按要求輸入數(shù)據(jù),得到運(yùn)行結(jié)果。圖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()和printf()的用法。4.熟悉字符輸入輸出函數(shù)getchar()和putchar()的用法。二、實(shí)驗(yàn)內(nèi)容1.格式說明符的使用。創(chuàng)建并編輯輸入輸出各個(gè)類型數(shù)據(jù)的程序,分析各個(gè)格式說

6、明符的作用。2.編寫“輸入輸出字符”程序,功能如下:使用getchar()函數(shù)接收一個(gè)字符,用printf()函數(shù)顯示;使用scanf()函數(shù)接收一個(gè)字符,用putchar()函數(shù)顯示。3.編寫“求三角形面積”程序,功能如下:輸入三角形三邊長(zhǎng),求三角形的面積。已知三角形的三邊長(zhǎng)a、b、c,則該三角形的面積公式為:09okm 其中,。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)編程分析

7、(1)需要定義字符型變量存放輸入的數(shù)據(jù);(2)用scanf()函數(shù)輸入字符時(shí),要注意不要接收緩沖區(qū)中已有的字符。2)參考程序#include "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("

8、;The character is:");putchar(b);putchar('n');3. “求三角形面積”程序1)編程分析(1)該問題的解決過程如下:(2)需要定義實(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”

9、);scanf(“%f ,%f,%f”,&a,&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)該問題的解決過程如下:(2)需要定義實(shí)型(float或double)變量存放相應(yīng)的數(shù)據(jù);(3)計(jì)算過程中需要用到常數(shù),為使用方便,在程序開始用宏定義命令define將常數(shù)3.14159(即)用PI表示;(4)輸出數(shù)據(jù)時(shí)根據(jù)要求確定各個(gè)變量的寬度和小數(shù)位數(shù)(

10、本例采用10.2)。2)參考程序#include “stdio.h”#define PI 3.14159main()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:%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é)會(huì)使用邏輯表達(dá)式表示條件的方法。2.掌握swit

11、ch語句的用法。二、實(shí)驗(yàn)內(nèi)容1.switch語句的應(yīng)用編寫計(jì)算器程序。要求從鍵盤任意輸入兩個(gè)數(shù)值,然后輸入一個(gè)四則運(yùn)算符,自動(dòng)完成運(yùn)算后輸出結(jié)果。三、實(shí)驗(yàn)指導(dǎo)1.switch語句的應(yīng)用1)編程分析(1)四則運(yùn)算共有加(+)、減(-)、乘(*)、除(/)4種運(yùn)算,要做出判斷需使用switch語句。(2)當(dāng)輸入符號(hào)為四則運(yùn)算之外的符號(hào)時(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”,&x,&y);p

12、=getchar();switch(p)case +: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;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)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?.通過本實(shí)驗(yàn),加深對(duì)循環(huán)控制結(jié)構(gòu)有關(guān)概念的理解。2.

13、掌握二重循環(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è)球,求出所有不同的取法。三、實(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;int i,j,n;printf(“n=”);scanf(“%d”,&n);for(i=2;i<=n;i+)

14、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í),修改程序,直到對(duì)任何輸入數(shù)據(jù)都能輸出正確的執(zhí)行結(jié)果,或者給出一個(gè)明確的提示信息。例如,當(dāng)輸入數(shù)據(jù)非法時(shí),給出一個(gè)錯(cuò)誤的提示信息。2.取彩球問題1)編程分析本題用到“窮舉”算法。窮舉的基本思想是對(duì)問題的所有可能性一一測(cè)試,直到找到解或?qū)⑷靠赡軤顟B(tài)都測(cè)試過為止。“窮舉”的核心是依次測(cè)試循環(huán)體。循環(huán)控制有兩種辦法:計(jì)數(shù)法

15、和標(biāo)志法。計(jì)數(shù)法要先確定循環(huán)次數(shù),然后逐次測(cè)試,完成測(cè)試次數(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<=3;white+)for(red=1;red<=5;red+)yellow=n-white-red;if(yellow>=1&&yellow<=4)printf(

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

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

18、or(i=0;i<M;i+)k=0;for(j=1;j<N;j+)if(aij>aik)k=j;for(j=0;j<M;j+)if(ajk<aik)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í)了冒泡法排序,冒

19、泡法排序依次,就有可能交換一次,需要交換的次數(shù)越多,效率越低。(2)選擇法的基本思路是:第一趟,從所有元素中選擇一個(gè)最小元素后放在a0中,最多交換一次;第二趟,從a1開始到最后的各元素中選擇一個(gè)最小元素,放在a1中;以此類推,M個(gè)數(shù)需要進(jìn)行M-1趟比較,但交換的次數(shù)比冒泡排序法少得多。2)參考程序#define M 10#include “stdio.h”void main()int aM,n,i,j,min,temp;printf(“請(qǐng)輸入排序數(shù)據(jù):n”);for(i=0;i<M;i+) scanf(“%d”,&ai);printf(“排序前數(shù)列:n”);for(i=0;i&l

20、t;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”,ai);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ù),查看并分析程序

21、執(zhí)行結(jié)果。實(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è)用選擇法對(duì)一維數(shù)組升序排序許的函數(shù),并在主函數(shù)中調(diào)用該排序函數(shù),實(shí)現(xiàn)對(duì)任意20個(gè)整數(shù)的排序。三、實(shí)驗(yàn)指導(dǎo)1. 選擇法排序函數(shù)的定義及使用1)編程分析這是一維數(shù)組作函數(shù)參數(shù)的問題。(1)設(shè)計(jì)一個(gè)對(duì)一維數(shù)組的前n個(gè)數(shù)用選擇法進(jìn)行排序的函數(shù)select()。select()函數(shù)有兩個(gè)形參,一個(gè)是排序元素?cái)?shù)形參,一個(gè)是一維數(shù)組形參。select()函數(shù)不需要

22、返回值,函數(shù)類型說明為void型。(2)在進(jìn)行函數(shù)調(diào)用時(shí),實(shí)參和形參要按照參數(shù)的意義在位置上對(duì)應(yīng)一致。2)參考程序#define M 20#include “stdio.h”void select(int,int a);/*函數(shù)聲明*/void main()int aM,n,i;printf(“請(qǐng)輸入排序數(shù)據(jù):n”);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

23、+)printf(“%d”,ai);void 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=amin;amin=temp;3)程序調(diào)試(1)運(yùn)行程序,任意輸入20個(gè)整數(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),用(

24、1)中使用的數(shù)據(jù)運(yùn)行程序,查看并分析程序執(zhí)行結(jié)果。(4) 把主函數(shù)中的函數(shù)調(diào)用select(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.熟練掌握用簡(jiǎn)單指針變量作函數(shù)的參數(shù)時(shí)函數(shù)的定義和調(diào)用方法。4.明確數(shù)組名作函數(shù)的參數(shù)和指向數(shù)組的指針作函數(shù)的參數(shù)的異同,學(xué)會(huì)相關(guān)的函數(shù)定義和調(diào)用。二、實(shí)驗(yàn)內(nèi)容1.用指針法在一維有序數(shù)組中插入數(shù)據(jù)如下是具有10個(gè)整數(shù)的升序數(shù)列,存儲(chǔ)在一維數(shù)組中,要求在其中插入任意一個(gè)整數(shù)后數(shù)列仍然有序。數(shù)

25、列: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ù)組仍然有序。三、實(shí)驗(yàn)指導(dǎo)1.用指針法在一維有序數(shù)組中插入數(shù)據(jù)1)編程分析按照下標(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(“請(qǐng)輸入要插入的數(shù)據(jù):n”);scanf(“%d”,&n);aM=n;/*將要插入的

26、數(shù)據(jù)放在數(shù)組的最后位置*/for(p=a,i=0;i<=M;i+)/*確定要插入的位置p*/if(n<=*(p+i)p=p+i;/*p指向要插入的數(shù)據(jù)*/break;for(q=a+M-1;q>=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)只需對(duì)數(shù)據(jù)的插入處理部分函數(shù)化即可。(2)插入函數(shù)insert()需要有三個(gè)形參:第一個(gè)

27、int型簡(jiǎn)單形參,表示要插入的數(shù)據(jù);第二個(gè)int型簡(jiǎn)單形參,表示數(shù)組中數(shù)據(jù)的個(gè)數(shù);第三個(gè)為int型指針形參,它將指向一個(gè)一維數(shù)組。(3)在進(jìn)行函數(shù)調(diào)用時(shí)insert()函數(shù)的第一個(gè)實(shí)參為要插入的數(shù)據(jù):第二個(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(“請(qǐng)輸入要插入的數(shù)據(jù):n”);scanf(“%d”,&x)

28、;insert(x,M,a);/*在有M個(gè)元素的一維數(shù)組a中插入x*/printf(“n插入數(shù)據(jù)后的數(shù)列:n”);for(i=0;i<=M;i+)printf(“%d”,ai);void insert(int x,int ,n,int* p)int *t,*q,i;t=p+n;/*將要插入的數(shù)據(jù)放在數(shù)組的最后位置*/for(i=0;i<=n;i+)/*確定要插入的位置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ù)*/實(shí)驗(yàn)8 線性表的順序存儲(chǔ)

29、系統(tǒng)維護(hù)一、實(shí)驗(yàn)?zāi)康?.掌握線性表的順序存儲(chǔ)的定義和基本使用方法。2.掌握線性表的順序存儲(chǔ)存儲(chǔ)單元的排列特點(diǎn)。3.掌握線性表的順序存儲(chǔ)系統(tǒng)的建立、查找 、修改、插入、刪除操作,學(xué)會(huì)相關(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)修改功能

30、是在查找的基礎(chǔ)上,將找到的值加以修改;(4)在插入功能中要實(shí)現(xiàn)的功能為:在找到指定節(jié)點(diǎn)后,當(dāng)線性表滿時(shí),提示不能插入,當(dāng)線性表不滿時(shí),插入數(shù)據(jù);(5)刪除功能主要實(shí)現(xiàn):當(dāng)線性表為空或者刪除位置超出線性表長(zhǎ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 inse

31、rt_num);void delet(int delete_pot);void modify(int renew_pot,int renew_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; do scanf("

32、;%d",&choice); switch(choice) case 1: printf("please enter 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",&

33、delete_pot); list_printf(); printf("n"); delet(delete_pot); printf("after deleten"); 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_pr

34、intf(); modify(renew_pot, renew_num); printf("after modifyn"); list_printf(); break; case 4: 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, i

35、nsert_num); printf("after insertn"); list_printf(); break; case 5: flag=1; break; default: printf("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)

36、 findi=k+1; /*記錄節(jié)點(diǎn)標(biāo)號(hào)*/ flag=1; else k+; if(!flag) findi=-1; return(findi);void delet(int delete_pot)/*刪除指定節(jié)點(diǎn) */ int i; if(delete_pot>last-1| delete_pot <0) printf("wrong position!n"); else for(i= delete_pot;i<=last-1;i+) nodei-1=nodei; last-; void modify(int renew_pot,int renew_nu

37、m) /*在指定節(jié)點(diǎn)修改為指定值 */ noderenew_pot-1= renew_num;void insert(int insert_pot,int insert_num)/*在指定節(jié)點(diǎn)插入指定值 */ int i; if(last=max) printf("the list is full!n"); else for(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;

38、i<=last-1;i+) printf("%d ",nodei); printf("n");實(shí)驗(yàn)9 線性表的鏈?zhǔn)酱鎯?chǔ)系統(tǒng)維護(hù)一、實(shí)驗(yàn)?zāi)康?.掌握線性表的鏈?zhǔn)酱鎯?chǔ)的定義和基本使用方法。2.掌握線性表的鏈?zhǔn)酱鎯?chǔ)存儲(chǔ)單元的排列特點(diǎn)。3.掌握線性表的鏈?zhǔn)酱鎯?chǔ)系統(tǒng)的建立、遍歷、插入、查找 、刪除操作,學(xué)會(huì)相關(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)

39、指導(dǎo)1)編程要求(1)以循環(huán)的方式建立一個(gè)有表頭的鏈表;(2)遍歷鏈表,并計(jì)算鏈表結(jié)點(diǎn)個(gè)數(shù);(3)在查找功能中要實(shí)現(xiàn):當(dāng)能找到時(shí)打印該值的前驅(qū)結(jié)點(diǎn),找不到時(shí)輸出“沒找到”;(4)在插入功能中要實(shí)現(xiàn):在某個(gè)特定的結(jié)點(diǎn)之后插入一個(gè)結(jié)點(diǎn);(5)在刪除功能主要實(shí)現(xiàn):刪除特定值的結(jié)點(diǎn),注意區(qū)分該節(jié)點(diǎn)是否為鏈表結(jié)尾。2)參考程序#include<stdio.h>#include<stdlib.h>struct Node int data; struct Node *next;void Build(struct Node * L) /*建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表*/ int n; st

40、ruct Node *p,*q; p=L; printf("請(qǐng)輸入n和n個(gè)數(shù)據(jù)元素:n"); scanf("%d",&n); while(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ì)算單鏈表的長(zhǎng)度,然后遍歷輸出單鏈表*/ int num=0; struct Node * p; p=L-

41、>next; while(p) num+; printf("%d ",p->data); p=p->next; printf("n長(zhǎng)度為%d:n",num);void Tips()/*選擇函數(shù)*/ printf("按數(shù)字鍵選擇相應(yīng)操作n"); printf("<1> 輸出單鏈表及其長(zhǎng)度:n"); printf("<2> 查找值為x的前驅(qū)結(jié)點(diǎn):n"); printf("<3> 刪除值為x的結(jié)點(diǎn):n"); printf(&qu

42、ot;<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->data!=x) p=p->next; if(p->next) printf("%d的前驅(qū)結(jié)點(diǎn)為:%dn",x,p->data); else printf("沒找到!n&q

43、uot;);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->next=q->next; free(q);else q=p->next; p->next=NULL; free(q); printf("刪除成功!n");

44、 else printf("鏈表中沒有%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("No Find Y !");elsex->next= p->next;p->next=x;printf("插入成功!n

45、");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) switch(choice) case 1: Print(L); /*計(jì)算單鏈表的長(zhǎng)度,然后遍歷輸出單鏈表*/ break; case 2:

46、printf("請(qǐng)輸入要查找的元素X:n"); scanf("%d",&x); Find(L,x); /*查找*/ break; case 3: printf("請(qǐng)輸入要?jiǎng)h除的元素X:n"); scanf("%d",&x); Delete(L,x); /*刪除*/ break; case 4: printf("請(qǐng)輸入要插入的元素X及其前結(jié)點(diǎn)Y: (X,Y)n"); scanf("%d,%d",&x,&y); p=(struct Node *)m

47、alloc(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)康?.理解二叉樹的原理,掌握二叉樹的存儲(chǔ)方法。2.掌握二叉樹前、中、后序順序遍歷的過程。3.掌握前、中、后序遍歷二叉樹程序的編寫,并用遞歸與非遞歸方法分別實(shí)現(xiàn)。二、實(shí)驗(yàn)內(nèi)容1.輸入數(shù)據(jù)建立一棵二叉樹。2.輸出其前、中、后序遍歷的結(jié)果,分別用遞歸與非遞歸方法實(shí)現(xiàn)。3.使

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

49、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; do while(p!=NULL) printf(" %c",p->data); if(p->rlink!=NULL) top=top+1; stop=p->rlink; p=p->llink; if(top!=-1) p=stop

溫馨提示

  • 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)論