第一篇:數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 實(shí)驗(yàn)報(bào)告
數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)實(shí)驗(yàn)報(bào)告
專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程
學(xué)號(hào):____201240703061___________________
班級(jí):_________軟件二班______________ 姓名:________朱海霞______________ 指導(dǎo)教師:___劉遵仁________________
青島大學(xué)信息工程學(xué)院
2013年10月
實(shí)驗(yàn)1
實(shí)驗(yàn)題目:順序存儲(chǔ)結(jié)構(gòu)線性表的插入和刪除
實(shí)驗(yàn)?zāi)康模?/p>
了解和掌握線性表的邏輯結(jié)構(gòu)和順序存儲(chǔ)結(jié)構(gòu),掌握線性表的基本算法及相關(guān)的時(shí)間性能分析。
實(shí)驗(yàn)要求:
建立一個(gè)數(shù)據(jù)域定義為整數(shù)類型的線性表,在表中允許有重復(fù)的數(shù)據(jù);根據(jù)輸入的數(shù)據(jù),先找到相應(yīng)的存儲(chǔ)單元,后刪除之。
實(shí)驗(yàn)主要步驟:
1、分析、理解給出的示例程序。
2、調(diào)試程序,并設(shè)計(jì)輸入一組數(shù)據(jù)(3,-5,6,8,2,-5,4,7,-9),測(cè)試程序的如下功能:根據(jù)輸入的數(shù)據(jù),找到相應(yīng)的存儲(chǔ)單元并刪除,顯示表中所有的數(shù)據(jù)。
程序代碼:
#include
int *newbase;
newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)return-1;
L.elem=newbase;
L.listsize+=LISTINCREMENT;} int *p,*q;q=&(L.elem[i-1]);for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;*q=e;++L.length;return OK;} int ListDelete_Sq(Sqlist &L,int i,int e){ int *p,*q;if(i<1||i>L.length)return ERROR;p=&(L.elem[i-1]);e=*p;q=L.elem+L.length-1;for(++p;p<=q;++p)
*(p-1)=*p;--L.length;return OK;} int main(){ Sqlist L;InitList_Sq(L);//初始化
int i,a[]={3,-5,6,8,2,-5,4,7,-9};for(i=1;i<10;i++)
ListInsert_Sq(L,i,a[i-1]);for(i=0;i<9;i++)
printf(“ %d”,L.elem[i]);
printf(“n”);//插入9個(gè)數(shù)
ListInsert_Sq(L,3,24);for(i=0;i<10;i++)
printf(“ %d”,L.elem[i]);
printf(“n”);//插入一個(gè)數(shù)
int e;ListDelete_Sq(L,2, e);for(i=0;i<9;i++)
printf(“ %d”,L.elem[i]);//刪除一個(gè)數(shù)
printf(“n”);
return 0;}
實(shí)驗(yàn)結(jié)果:
3,-5,6,8,2,-5,4,7,-9 3,-5,24,6,8,2,-5,4,7,-9 3,24,6,8,2,-5,4,7,-9
心得體會(huì):
順序存儲(chǔ)結(jié)構(gòu)是一種隨機(jī)存取結(jié)構(gòu),存取任何元素的時(shí)間是一個(gè)常數(shù),速度快;結(jié)構(gòu)簡(jiǎn)單,邏輯上相鄰的元素在物理上也相鄰;不使用指針,節(jié)省存儲(chǔ)空間;但是插入和刪除元素需要移動(dòng)大量元素,消耗大量時(shí)間;需要一個(gè)連續(xù)的存儲(chǔ)空間;插入元素可能發(fā)生溢出;自由區(qū)中的存儲(chǔ)空間不能被其他數(shù)據(jù)共享
實(shí)驗(yàn)2
實(shí)驗(yàn)題目:?jiǎn)捂湵淼牟迦牒蛣h除
實(shí)驗(yàn)?zāi)康模?/p>
了解和掌握線性表的邏輯結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),掌握單鏈表的基本算法及相關(guān)的時(shí)間性能分析。
實(shí)驗(yàn)要求:
建立一個(gè)數(shù)據(jù)域定義為字符類型的單鏈表,在鏈表中不允許有重復(fù)的字符;根據(jù)輸入的字符,先找到相應(yīng)的結(jié)點(diǎn),后刪除之。
實(shí)驗(yàn)主要步驟:
3、分析、理解給出的示例程序。
4、調(diào)試程序,并設(shè)計(jì)輸入數(shù)據(jù)(如:A,C,E,F(xiàn),H,J,Q,M),測(cè)試程序的如下功能:不允許重復(fù)字符的插入;根據(jù)輸入的字符,找到相應(yīng)的結(jié)點(diǎn)并刪除。
5、修改程序:
(1)增加插入結(jié)點(diǎn)的功能。
(2)建立鏈表的方法有“前插”、“后插”法。
程序代碼: #include
int data;
struct LNode *next;}LNode,*LinkList;int InitList_L(LinkList &L){ L=(LinkList)malloc(sizeof(LNode));L->next=NULL;return OK;} int ListInsert_L(LinkList &L,int i,int e){ LinkList p,s;int j;p=L;j=0;while(p&&j p=p->next;++j;} if(!p||j>i-1) return ERROR;s=(LinkList)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;} int ListDelete_L(LinkList&L,int i,int &e){ LinkList p,q;int j;p=L;j=0;while(p->next&&j p=p->next;++j;} if(!(p->next)||j return ERROR;q=p->next;p->next=q->next;e=q->data;free(q);return OK;} int main(){ LinkList L,p;char a[8]={'A','C','E','F','H','J','Q','U'};int i,j;InitList_L(L);for(i=1,j=0;i<=8,j<8;i++,j++) ListInsert_L(L,i,a[j]);p=L->next;while(p!=NULL){ printf(“%ct”,p->data); p=p->next; } }//插入八個(gè)字符 printf(“n”);i=2;int e;ListInsert_L(L,i,'B');p=L->next;while(p!=NULL){ printf(“%ct”,p->data);p=p->next;}//插入一個(gè)字符 printf(“n”);i=3;ListDelete_L(L,i,e);p=L->next;while(p!=NULL){ printf(“%ct”,p->data);p=p->next;} printf(“n”);return 0;實(shí)驗(yàn)結(jié)果: A C E F H J Q U A B C E F H J Q U A B E F H J Q U 心得體會(huì): 單鏈表是通過(guò)掃描指針P進(jìn)行單鏈表的操作;頭指針唯一標(biāo)識(shí)點(diǎn)鏈表的存在;插入和刪除元素快捷,方便。 實(shí)驗(yàn)3 實(shí)驗(yàn)題目:棧操作設(shè)計(jì)和實(shí)現(xiàn) 實(shí)驗(yàn)?zāi)康模?/p> 1、掌握棧的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),以便在實(shí)際中靈活應(yīng)用。 2、掌握棧的特點(diǎn),即后進(jìn)先出和先進(jìn)先出的原則。 3、掌握棧的基本運(yùn)算,如:入棧與出棧等運(yùn)算在順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上的實(shí)現(xiàn)。 實(shí)驗(yàn)要求: 回文判斷:對(duì)于一個(gè)從鍵盤輸入的字符串,判斷其是否為回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。 實(shí)驗(yàn)主要步驟 (1)數(shù)據(jù)從鍵盤讀入;(2)輸出要判斷的字符串; (3)利用棧的基本操作對(duì)給定的字符串判斷其是否是回文,若是則輸出“Yes”,否則輸出“No”。 程序代碼: #include #define STACKINCREMENT 10 typedef struct{ int *base; // 在棧構(gòu)造之前和銷毀之后,base的值為NULL int *top; // 棧頂指針 int stacksize; // 當(dāng)前已分配的存儲(chǔ)空間,以元素為單位 } SqStack; int InitStack(SqStack &S){ // 構(gòu)造一個(gè)空棧S if(!(S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)))) exit(OVERFLOW); // 存儲(chǔ)分配失敗 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; } int StackEmpty(SqStack S){ // 若棧S為空棧,則返回TRUE,否則返回FALSE if(S.top==S.base) return TRUE; else return FALSE;} int Push(SqStack &S, int e){ // 插入元素e為新的棧頂元素 if(S.top-S.base>=S.stacksize)// 棧滿,追加存儲(chǔ)空間 { S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int)); if(!S.base) exit(OVERFLOW);// 存儲(chǔ)分配失敗 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *(S.top)++=e; return OK;} int Pop(SqStack &S,int &e){ // 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR if(S.top==S.base) return ERROR; e=*--S.top; return OK;} int main(){ SqStack s; int i,e,j,k=1; char ch[N] = {0},*p,b[N] = {0}; if(InitStack(s))// 初始化棧成功 { printf(“請(qǐng)輸入表達(dá)式:n”); gets(ch); p=ch; while(*p)// 沒(méi)到串尾 Push(s,*p++); for(i=0;i if(!StackEmpty(s)){// 棧不空 Pop(s,e);// 彈出棧頂元素 b[i]=e; } } for(i=0;i if(ch[i]!=b[i]) k=0;} if(k==0) printf(“NO!”); else printf(“輸出:”)printf(“YES!”); } return 0; } 實(shí)驗(yàn)結(jié)果: 請(qǐng)輸入表達(dá)式: abcba 輸出:YES!心得體會(huì):棧是僅能在表尾驚醒插入和刪除操作的線性表,具有先進(jìn)后出的性質(zhì),這個(gè)固有性質(zhì)使棧成為程序設(shè)計(jì)中的有用工具。 實(shí)驗(yàn)4 實(shí)驗(yàn)題目:二叉樹操作設(shè)計(jì)和實(shí)現(xiàn) 實(shí)驗(yàn)?zāi)康模?/p> 掌握二叉樹的定義、性質(zhì)及存儲(chǔ)方式,各種遍歷算法。 實(shí)驗(yàn)要求: 采用二叉樹鏈表作為存儲(chǔ)結(jié)構(gòu),完成二叉樹的建立,先序、中序和后序以及按層次遍歷的操作,求所有葉子及結(jié)點(diǎn)總數(shù)的操作。 實(shí)驗(yàn)主要步驟: 1、分析、理解程序。 2、調(diào)試程序,設(shè)計(jì)一棵二叉樹,輸入完全二叉樹的先序序列,用#代表虛結(jié)點(diǎn)(空指針),如ABD###CE##F##,建立二叉樹,求出先序、中序和后序以及按層次遍歷序列,求所有葉子及結(jié)點(diǎn)總數(shù)。 程序代碼: 實(shí)驗(yàn)結(jié)果: 心得體會(huì): 實(shí)驗(yàn)5 實(shí)驗(yàn)題目:圖的遍歷操作 實(shí)驗(yàn)?zāi)康模?/p> 掌握有向圖和無(wú)向圖的概念;掌握鄰接矩陣和鄰接鏈表建立圖的存儲(chǔ)結(jié)構(gòu);掌握DFS及BFS對(duì)圖的遍歷操作;了解圖結(jié)構(gòu)在人工智能、工程等領(lǐng)域的廣泛應(yīng)用。 實(shí)驗(yàn)要求: 采用鄰接矩陣和鄰接鏈表作為圖的存儲(chǔ)結(jié)構(gòu),完成有向圖和無(wú)向圖的DFS和BFS操作。 實(shí)驗(yàn)主要步驟: 設(shè)計(jì)一個(gè)有向圖和一個(gè)無(wú)向圖,任選一種存儲(chǔ)結(jié)構(gòu),完成有向圖和無(wú)向圖的DFS(深度優(yōu)先遍歷)和BFS(廣度優(yōu)先遍歷)的操作。 1. 鄰接矩陣作為存儲(chǔ)結(jié)構(gòu) #include“stdio.h” #include“stdlib.h” #define MaxVertexNum 100 //定義最大頂點(diǎn)數(shù) typedef struct{ char vexs[MaxVertexNum]; //頂點(diǎn)表 int edges[MaxVertexNum][MaxVertexNum]; //鄰接矩陣,可看作邊表 int n,e; //圖中的頂點(diǎn)數(shù)n和邊數(shù)e }MGraph; //用鄰接矩陣表示的圖的類型 //=========建立鄰接矩陣======= void CreatMGraph(MGraph *G){ int i,j,k; char a; printf(“Input VertexNum(n)and EdgesNum(e): ”); scanf(“%d,%d”,&G->n,&G->e); //輸入頂點(diǎn)數(shù)和邊數(shù) scanf(“%c”,&a); printf(“Input Vertex string:”); for(i=0;i { scanf(“%c”,&a); G->vexs[i]=a; //讀入頂點(diǎn)信息,建立頂點(diǎn)表 } for(i=0;i for(j=0;j G->edges[i][j]=0; //初始化鄰接矩陣 printf(“Input edges,Creat Adjacency Matrixn”); for(k=0;k //讀入e條邊,建立鄰接矩陣 scanf(“%d%d”,&i,&j); //輸入邊(Vi,Vj)的頂點(diǎn)序號(hào) G->edges[i][j]=1; G->edges[j][i]=1;//若為無(wú)向圖,矩陣為對(duì)稱矩陣;若建立有向圖,去掉該條語(yǔ)句 } } //=========定義標(biāo)志向量,為全局變量======= typedef enum{FALSE,TRUE} Boolean;Boolean visited[MaxVertexNum];//========DFS:深度優(yōu)先遍歷的遞歸算法====== void DFSM(MGraph *G,int i){ //以Vi為出發(fā)點(diǎn)對(duì)鄰接矩陣表示的圖G進(jìn)行DFS搜索,鄰接矩陣是0,1矩陣 給出你的編碼 //===========BFS:廣度優(yōu)先遍歷======= void BFS(MGraph *G,int k){ //以Vk為源點(diǎn)對(duì)用鄰接矩陣表示的圖G進(jìn)行廣度優(yōu)先搜索 給出你的編碼 //==========主程序main ===== void main(){ int i; MGraph *G; G=(MGraph *)malloc(sizeof(MGraph)); //為圖G申請(qǐng)內(nèi)存空間 CreatMGraph(G); //建立鄰接矩陣 printf(“Print Graph DFS: ”); DFS(G); //深度優(yōu)先遍歷 printf(“n”); printf(“Print Graph BFS: ”); BFS(G,3); //以序號(hào)為3的頂點(diǎn)開始廣度優(yōu)先遍歷 printf(“n”);} 2. 鄰接鏈表作為存儲(chǔ)結(jié)構(gòu) #include“stdio.h” #include“stdlib.h” #define MaxVertexNum 50 //定義最大頂點(diǎn)數(shù) typedef struct node{ //邊表結(jié)點(diǎn) int adjvex; //鄰接點(diǎn)域 struct node *next; //鏈域 }EdgeNode;typedef struct vnode{ //頂點(diǎn)表結(jié)點(diǎn) char vertex; //頂點(diǎn)域 EdgeNode *firstedge; //邊表頭指針 }VertexNode;typedef VertexNode AdjList[MaxVertexNum]; //AdjList是鄰接表類型 typedef struct { AdjList adjlist; //鄰接表 int n,e; //圖中當(dāng)前頂點(diǎn)數(shù)和邊數(shù) } ALGraph; //圖類型 //=========建立圖的鄰接表======= void CreatALGraph(ALGraph *G){ int i,j,k; char a; EdgeNode *s; //定義邊表結(jié)點(diǎn) printf(“Input VertexNum(n)and EdgesNum(e): ”); scanf(“%d,%d”,&G->n,&G->e); //讀入頂點(diǎn)數(shù)和邊數(shù) scanf(“%c”,&a); printf(“Input Vertex string:”); for(i=0;i //建立邊表 { scanf(“%c”,&a);G->adjlist[i].vertex=a; //讀入頂點(diǎn)信息 G->adjlist[i].firstedge=NULL;//邊表置為空表 } printf(“Input edges,Creat Adjacency Listn”); for(k=0;k //建立邊表 scanf(“%d%d”,&i,&j); //讀入邊(Vi,Vj)的頂點(diǎn)對(duì)序號(hào) s=(EdgeNode *)malloc(sizeof(EdgeNode)); //生成邊表結(jié)點(diǎn) s->adjvex=j; //鄰接點(diǎn)序號(hào)為j s->next=G->adjlist[i].firstedge;G->adjlist[i].firstedge=s; //將新結(jié)點(diǎn)*S插入頂點(diǎn)Vi的邊表頭部 s=(EdgeNode *)malloc(sizeof(EdgeNode)); s->adjvex=i; //鄰接點(diǎn)序號(hào)為i s->next=G->adjlist[j].firstedge; G->adjlist[j].firstedge=s; //將新結(jié)點(diǎn)*S插入頂點(diǎn)Vj的邊表頭部 } } //=========定義標(biāo)志向量,為全局變量======= typedef enum{FALSE,TRUE} Boolean;Boolean visited[MaxVertexNum];//========DFS:深度優(yōu)先遍歷的遞歸算法====== void DFSM(ALGraph *G,int i){ //以Vi為出發(fā)點(diǎn)對(duì)鄰接鏈表表示的圖G進(jìn)行DFS搜索 給出你的編碼 //==========BFS:廣度優(yōu)先遍歷========= void BFS(ALGraph *G,int k){ //以Vk為源點(diǎn)對(duì)用鄰接鏈表表示的圖G進(jìn)行廣度優(yōu)先搜索 給出你的編碼 //==========主函數(shù)=========== void main(){ int i; ALGraph *G; G=(ALGraph *)malloc(sizeof(ALGraph)); CreatALGraph(G); printf(“Print Graph DFS: ”); DFS(G); printf(“n”); printf(“Print Graph BFS: ”); BFS(G,3); printf(“n”);} 實(shí)驗(yàn)結(jié)果: 1.鄰接矩陣作為存儲(chǔ)結(jié)構(gòu) 2.鄰接鏈表作為存儲(chǔ)結(jié)構(gòu) 心得體會(huì): 實(shí)驗(yàn)6 實(shí)驗(yàn)題目:二分查找算法的實(shí)現(xiàn) 實(shí)驗(yàn)?zāi)康模?/p> 掌握二分查找法的工作原理及應(yīng)用過(guò)程,利用其工作原理完成實(shí)驗(yàn)題目中的內(nèi)容。 實(shí)驗(yàn)要求: 編寫程序構(gòu)造一個(gè)有序表L,從鍵盤接收一個(gè)關(guān)鍵字key,用二分查找法在L中查找key,若找到則提示查找成功并輸出key所在的位置,否則提示沒(méi)有找到信息。 實(shí)驗(yàn)主要步驟: 1.建立的初始查找表可以是無(wú)序的,如測(cè)試的數(shù)據(jù)為{3,7,11,15,17,21,35,42,50}或者{11,21,7,3,15,50,42,35,17}。2.給出算法的遞歸和非遞歸代碼; 3.如何利用二分查找算法在一個(gè)有序表中插入一個(gè)元素x,并保持表的有序性? 程序代碼 實(shí)驗(yàn)結(jié)果: 心得體會(huì): 實(shí)驗(yàn)7 實(shí)驗(yàn)題目:排序 實(shí)驗(yàn)?zāi)康模?/p> 掌握各種排序方法的基本思想、排序過(guò)程、算法實(shí)現(xiàn),能進(jìn)行時(shí)間和空間性能的分析,根據(jù)實(shí)際問(wèn)題的特點(diǎn)和要求選擇合適的排序方法。 實(shí)驗(yàn)要求: 實(shí)現(xiàn)直接排序、冒泡、直接選擇、快速、堆、歸并排序算法。比較各種算法的運(yùn)行速度。 實(shí)驗(yàn)主要步驟: 程序代碼 實(shí)驗(yàn)結(jié)果: 心得體會(huì): c數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)實(shí)驗(yàn)報(bào)告;專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程;學(xué)號(hào):____XX40703061_____;班級(jí):_________軟件二班________;姓名:________朱海霞__________;指導(dǎo)教師:___劉遵仁_____________;青島大學(xué)信息工程學(xué)院;XX年10月;實(shí)驗(yàn)1;實(shí)驗(yàn)題目:順序存儲(chǔ)結(jié)構(gòu)線性表的插入和刪除;實(shí)驗(yàn)?zāi)?/p> 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)實(shí)驗(yàn)報(bào)告 專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)、軟件工程 學(xué)號(hào):____XX40703061___________________ 班級(jí):_________軟件二班______________ 姓名:________朱海霞______________ 指導(dǎo)教師:___劉遵仁________________ 青島大學(xué)信息工程學(xué)院 XX年10月 實(shí)驗(yàn)1 實(shí)驗(yàn)題目:順序存儲(chǔ)結(jié)構(gòu)線性表的插入和刪除 實(shí)驗(yàn)?zāi)康模?/p> 了解和掌握線性表的邏輯結(jié)構(gòu)和順序存儲(chǔ)結(jié)構(gòu),掌握線性表的基本算法及相關(guān)的時(shí)間性能分析。 實(shí)驗(yàn)要求: 建立一個(gè)數(shù)據(jù)域定義為整數(shù)類型的線性表,在表中允許有重復(fù)的數(shù)據(jù);根據(jù)輸入的數(shù)據(jù),先找到相應(yīng)的存儲(chǔ)單元,后刪除之。 實(shí)驗(yàn)主要步驟: 1、分析、理解給出的示例程序。 2、調(diào)試程序,并設(shè)計(jì)輸入一組數(shù)據(jù)(3,-5,6,8,2,-5,4,7,-9),測(cè)試程序的如下功能:根據(jù)輸入的數(shù)據(jù),找到相應(yīng)的存儲(chǔ)單元并刪除,顯示表中所有的數(shù)據(jù)。 程序代碼: #include #include #define OK 1 #define ERROR 0 #define OVERFLOW-2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct{ int* elem; int length; int listsize; }Sqlist; int InitList_Sq(Sqlist &L){ =(int*)malloc(LIST_INIT_SIZE*sizeof(int)); if(!)return-1; =0; =LIST_INIT_SIZE; return OK; } int ListInsert_Sq(Sqlist&L,int i,int e){ if(i+1)return ERROR; if(==){ int *newbase; newbase=(int*)realloc(,(+LISTINCREMENT)*sizeof(int)); if(!newbase)return-1; =newbase; +=LISTINCREMENT; } int *p,*q; q=&(); for(p=&();p>=q;--p) *(p+1)=*p; *q=e; ++; return OK; } int ListDelete_Sq(Sqlist &L,int i,int e){ int *p,*q; if(i)return ERROR; p=&(); e=*p; q=+; for(++p;p *(p-1)=*p; --; return OK; } int main(){ Sqlist L; InitList_Sq(L);//初始化 int i,a={3,-5,6,8,2,-5,4,7,-9}; for(i=1;i ListInsert_Sq(L,i,a); for(i=0;i printf(“ %d”,); printf(“ ”);//插入9個(gè)數(shù) ListInsert_Sq(L,3,24); for(i=0;i printf(“ %d”,); printf(“ ”);//插入一個(gè)數(shù) int e; ListDelete_Sq(L,2, e); for(i=0;i printf(“ %d”,);//刪除一個(gè)數(shù) printf(“ ”); return 0; } 實(shí)驗(yàn)結(jié)果: 3,-5,6,8,2,-5,4,7,-9 3,-5,24,6,8,2,-5,4,7,-9 3,24,6,8,2,-5,4,7,-9 心得體會(huì): 順序存儲(chǔ)結(jié)構(gòu)是一種隨機(jī)存取結(jié)構(gòu),存取任何元素的時(shí)間是一個(gè)常數(shù),速度快;結(jié)構(gòu)簡(jiǎn)單,邏輯上相鄰的元素在物理上也相鄰;不使用指針,節(jié)省存儲(chǔ)空間;但是插入和刪除元素需要移動(dòng)大量元素,消耗大量時(shí)間;需要一個(gè)連續(xù)的存儲(chǔ)空間;插入元素可能發(fā)生溢出;自由區(qū)中的存儲(chǔ)空間不能被其他數(shù)據(jù)共享 實(shí)驗(yàn)2 實(shí)驗(yàn)題目:?jiǎn)捂湵淼牟迦牒蛣h除 實(shí)驗(yàn)?zāi)康模?/p> 了解和掌握線性表的邏輯結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),掌握單鏈表的基本算法及相關(guān)的時(shí)間性能分析。 實(shí)驗(yàn)要求: 建立一個(gè)數(shù)據(jù)域定義為字符類型的單鏈表,在鏈表中不允許有重復(fù)的字符;根據(jù)輸入的字符,先找到相應(yīng)的結(jié)點(diǎn),后刪除之。 實(shí)驗(yàn)主要步驟: 3、分析、理解給出的示例程序。 4、調(diào)試程序,并設(shè)計(jì)輸入數(shù)據(jù)(如:A,C,E,F(xiàn),H,J,Q,M),測(cè)試程序的如下功能:不允許重復(fù)字符的插入;根據(jù)輸入的字符,找到相應(yīng)的結(jié)點(diǎn)并刪除。 5、修改程序: (1)增加插入結(jié)點(diǎn)的功能。 (2)建立鏈表的方法有“前插”、“后插”法。 程序代碼: #include #include #define NULL 0 #define OK 1 #define ERROR 0 typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; int InitList_L(LinkList &L){ L=(LinkList)malloc(sizeof(LNode));L->next=NULL; return OK; } int ListInsert_L(LinkList &L,int i,int e){ LinkList p,s; int j; p=L;j=0; while(p&&j p=p->next;++j; } if(!p||j>i-1) return ERROR; s=(LinkList)malloc(sizeof(LNode));s->data=e; s->next=p->next; p->next=s; return OK; } int ListDelete_L(LinkList&L,int i,int &e){ LinkList p,q; int j; p=L;j=0; while(p->next&&j p=p->next;++j; } if(!(p->next)||j return ERROR; q=p->next;p->next=q->next;e=q->data;free(q); return OK; } int main(){ LinkList L,p; char a={'A','C','E','F','H','J','Q','U'};int i,j; InitList_L(L); for(i=1,j=0;i p=L->next; while(p!=NULL){ printf(“%c ”,p->data);p=p->next;}//插入八個(gè)字符 printf(“;實(shí)驗(yàn)結(jié)果:;ACEFHJQU;ABCEFHJQU;ABEFHJQU;心得體會(huì):;單鏈表是通過(guò)掃描指針P進(jìn)行單鏈表的操作;頭指針唯;實(shí)驗(yàn)3;實(shí)驗(yàn)題目:棧操作設(shè)計(jì)和實(shí)現(xiàn);實(shí)驗(yàn)?zāi)康模? 1、掌握棧的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),以便在實(shí); 2、掌握棧的特點(diǎn),即后進(jìn)先出和先進(jìn)先出的原則; 3、掌握棧的基本運(yùn)算,如:入棧與出棧 } }//插入八個(gè)字符 printf(” “);i=2;int e;ListInsert_L(L,i,'B'); p=L->next;while(p!=NULL){ printf(”%c “,p->data);p=p->next;}//插入一個(gè)字符 printf(” “);i=3;ListDelete_L(L,i,e);p=L->next;while(p!=NULL){ printf(”%c “,p->data);p=p->next;} printf(” “);return 0; 實(shí)驗(yàn)結(jié)果: A C E F H J Q U A B C E F H J Q U A B E F H J Q U 心得體會(huì): 單鏈表是通過(guò)掃描指針P進(jìn)行單鏈表的操作;頭指針唯一標(biāo)識(shí)點(diǎn)鏈表的存在;插入和刪除元素快捷,方便。 實(shí)驗(yàn)3 實(shí)驗(yàn)題目:棧操作設(shè)計(jì)和實(shí)現(xiàn) 實(shí)驗(yàn)?zāi)康模?/p> 1、掌握棧的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),以便在實(shí)際中靈活應(yīng)用。 2、掌握棧的特點(diǎn),即后進(jìn)先出和先進(jìn)先出的原則。 3、掌握棧的基本運(yùn)算,如:入棧與出棧等運(yùn)算在順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)上的實(shí)現(xiàn)。 實(shí)驗(yàn)要求: 回文判斷:對(duì)于一個(gè)從鍵盤輸入的字符串,判斷其是否為回文。回文即正反序相同。如 “abba”是回文,而“abab”不是回文。 實(shí)驗(yàn)主要步驟 (1)數(shù)據(jù)從鍵盤讀入; (2)輸出要判斷的字符串; (3)利用棧的基本操作對(duì)給定的字符串判斷其是否是回文,若是則輸出“Yes”,否則輸出“No”。 程序代碼: #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW-2 #define N 100 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct{ int *base;// 在棧構(gòu)造之前和銷毀之后,base的值為NULL int *top;// 棧頂指針 int stacksize;// 當(dāng)前已分配的存儲(chǔ)空間,以元素為單位 } SqStack; int InitStack(SqStack &S) { // 構(gòu)造一個(gè)空棧S if(!(=(int *)malloc(STACK_INIT_SIZE*sizeof(int)))) exit(OVERFLOW);// 存儲(chǔ)分配失敗 =; =STACK_INIT_SIZE; return OK; } int StackEmpty(SqStack S) { // 若棧S為空棧,則返回TRUE,否則返回FALSE if(==) return TRUE; else return FALSE; } int Push(SqStack &S, int e) { // 插入元素e為新的棧頂元素 if(>=)// 棧滿,追加存儲(chǔ)空間 { =(int *)realloc(,(+STACKINCREMENT)*sizeof(int));if(!) exit(OVERFLOW);// 存儲(chǔ)分配失敗 =+; +=STACKINCREMENT; } *()++=e; return OK; } int Pop(SqStack &S,int &e) { // 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR if(==) return ERROR; e=*--; return OK; } int main(){ SqStack s; int i,e,j,k=1; char ch = {0},*p,b = {0}; if(InitStack(s))// 初始化棧成功 { printf(”請(qǐng)輸入表達(dá)式: “); gets(ch); p=ch; while(*p)// 沒(méi)到串尾 Push(s,*p++); for(i=0;i if(!StackEmpty(s)){// 棧不空 Pop(s,e);// 彈出棧頂元素 b=e; } } for(i=0;i if(ch!=b) k=0; } if(k==0) printf(”NO!“); else printf(”輸出:“) printf(”YES!“); } return 0; } 實(shí)驗(yàn)結(jié)果: 請(qǐng)輸入表達(dá)式: abcba 輸出:YES! 心得體會(huì):棧是僅能在表尾驚醒插入和刪除操作的線性表,具有先進(jìn)后出的性質(zhì),這個(gè)固有性質(zhì)使棧成為程序設(shè)計(jì)中的有用工具。 實(shí)驗(yàn)4 實(shí)驗(yàn)題目:二叉樹操作設(shè)計(jì)和實(shí)現(xiàn) 實(shí)驗(yàn)?zāi)康模?/p> 掌握二叉樹的定義、性質(zhì)及存儲(chǔ)方式,各種遍歷算法。 實(shí)驗(yàn)要求: 采用二叉樹鏈表作為存儲(chǔ)結(jié)構(gòu),完成二叉樹的建立,先序、中序和后序以及按層次遍歷的操作,求所有葉子及結(jié)點(diǎn)總數(shù)的操作。 實(shí)驗(yàn)主要步驟: 1、分析、理解程序。 2、調(diào)試程序,設(shè)計(jì)一棵二叉樹,輸入完全二叉樹的先序序列,用#代表虛結(jié)點(diǎn)(空指針),如ABD###CE##F##,建立二叉樹,求出先序、中序和后序以及按層次遍歷序列,求所有葉子及結(jié)點(diǎn)總數(shù)。 程序代碼: 實(shí)驗(yàn)結(jié)果: 心得體會(huì): 實(shí)驗(yàn)5 實(shí)驗(yàn)題目:圖的遍歷操作 實(shí)驗(yàn)?zāi)康模?/p> 掌握有向圖和無(wú)向圖的概念;掌握鄰接矩陣和鄰接鏈表建立圖的存儲(chǔ)結(jié)構(gòu);掌握DFS及BFS對(duì)圖的遍歷操作;了解圖結(jié)構(gòu)在人工智能、工程等領(lǐng)域的廣泛應(yīng)用。 實(shí)驗(yàn)要求: 采用鄰接矩陣和鄰接鏈表作為圖的存儲(chǔ)結(jié)構(gòu),完成有向圖和無(wú)向圖的DFS和BFS操作。 實(shí)驗(yàn)主要步驟: 設(shè)計(jì)一個(gè)有向圖和一個(gè)無(wú)向圖,任選一種存儲(chǔ)結(jié)構(gòu),完成有向圖和無(wú)向圖的DFS(深度優(yōu)先遍歷)和BFS(廣度優(yōu)先遍歷)的操作。 1.鄰接矩陣作為存儲(chǔ)結(jié)構(gòu) #include”“ #include”“ #define MaxVertexNum 100 //定義最大頂點(diǎn)數(shù) typedef struct{ char vexs;//頂點(diǎn)表 int edges;//鄰接矩陣,可看作邊表 int n,e;//圖中的頂點(diǎn)數(shù)n和邊數(shù)e }MGraph;//用鄰接矩陣表示的圖的類型 //=========建立鄰接矩陣======= void CreatMGraph(MGraph *G) { int i,j,k; char a; printf(”Input VertexNum(n)and EdgesNum(e): “); scanf(”%d,%d“,&G->n,&G->e);//輸入頂點(diǎn)數(shù)和邊數(shù) scanf(”%c“,&a); printf(”Input Vertex string:“); for(i=0;in;i++) { scanf(”%c“,&a); G->vexs=a;//讀入頂點(diǎn)信息,建立頂點(diǎn)表 } for(i=0;in;i++) for(j=0;jn;j++) G->edges=0;//初始化鄰接矩陣 printf(”Input edges,Creat Adjacency Matrix “); for(k=0;ke;k++){ //讀入e條邊,建立鄰接矩陣 scanf(”%d%d“,&i,&j);//輸入邊(Vi,Vj)的頂點(diǎn)序號(hào) G->edges=1;;G->edges=1;//若為;//=========定義標(biāo)志向 量,為 全 局 變 量=;typedefenum{FALSE,TRUE}B;Booleanvisited=1; G->edges=1;//若為無(wú)向圖,矩陣為對(duì)稱矩陣;若建立有向圖,去掉該條語(yǔ)句 } } //=========定義標(biāo)志向量,為全局變量======= typedef enum{FALSE,TRUE} Boolean; Boolean visited; //========DFS:深度優(yōu)先遍歷的遞歸算法====== void DFSM(MGraph *G,int i) { //以Vi為出發(fā)點(diǎn)對(duì)鄰接矩陣表示的圖G進(jìn)行DFS搜索,鄰接矩陣是0,1矩陣 給出你的編碼 //===========BFS:廣度優(yōu)先遍歷======= void BFS(MGraph *G,int k) { //以Vk為源點(diǎn)對(duì)用鄰接矩陣表示的圖G進(jìn)行廣度優(yōu)先搜索 給出你的編碼 //==========主程序main ===== void main() { int i; MGraph *G; G=(MGraph *)malloc(sizeof(MGraph));//為圖G請(qǐng)內(nèi)存空間 CreatMGraph(G);//建立鄰接矩陣 printf(”Print Graph DFS: “); DFS(G);//深度優(yōu)先遍歷 printf(” “); printf(”Print Graph BFS: “); BFS(G,3);//以序號(hào)為3的頂點(diǎn)開始廣度優(yōu)先遍歷 printf(” “); } 2.鄰接鏈表作為存儲(chǔ)結(jié)構(gòu) #include”“ #include”“ #define MaxVertexNum 50 //定義最大頂點(diǎn)數(shù) typedef struct node{ //邊表結(jié)點(diǎn) int adjvex;//鄰接點(diǎn)域 struct node *next;//鏈域 申 }EdgeNode; typedef struct vnode{ //頂點(diǎn)表結(jié)點(diǎn) char vertex;//頂點(diǎn)域 EdgeNode *firstedge;//邊表頭指針 }VertexNode; typedef VertexNode AdjList;//AdjList是鄰接表類型 typedef struct { AdjList adjlist;//鄰接表 int n,e;//圖中當(dāng)前頂點(diǎn)數(shù)和邊數(shù) } ALGraph;//圖類型 //=========建立圖的鄰接表======= void CreatALGraph(ALGraph *G) { int i,j,k; char a; EdgeNode *s;//定義邊表結(jié)點(diǎn) printf(”Input VertexNum(n)and EdgesNum(e): “); scanf(”%d,%d“,&G->n,&G->e);//讀入頂點(diǎn)數(shù)和邊數(shù) scanf(”%c“,&a); printf(”Input Vertex string:“); for(i=0;in;i++)//建立邊表 { scanf(”%c“,&a); G->adjlist.vertex=a;//讀入頂點(diǎn)信息 G->adjlist.firstedge=NULL;//邊表置為空表 } printf(”Input edges,Creat Adjacency List “); for(k=0;ke;k++){ //建立邊表 scanf(”%d%d“,&i,&j);//讀入邊(Vi,Vj)的頂點(diǎn)對(duì)序號(hào) s=(EdgeNode *)malloc(sizeof(EdgeNode));//生成邊表結(jié)點(diǎn) s->adjvex=j;//鄰接點(diǎn)序號(hào)為j s->next=G->adjlist.firstedge; G->adjlist.firstedge=s;//將新結(jié)點(diǎn)*S插入頂點(diǎn)Vi的邊表頭部 s=(EdgeNode *)malloc(sizeof(EdgeNode)); s->adjvex=i;//鄰接點(diǎn)序號(hào)為i s->next=G->adjlist.firstedge; G->adjlist.firstedge=s;//將新結(jié)點(diǎn)*S插入頂點(diǎn)Vj的邊表頭部 } } //=========定義標(biāo)志向量,為全局變量======= typedef enum{FALSE,TRUE} Boolean; Boolean visited; //========DFS:深度優(yōu)先遍歷的遞歸算法====== void DFSM(ALGraph *G,int i) { //以Vi為出發(fā)點(diǎn)對(duì)鄰接鏈表表示的圖G進(jìn)行DFS搜索 給出你的編碼 //==========BFS:廣度優(yōu)先遍歷========= void BFS(ALGraph *G,int k) { //以Vk為源點(diǎn)對(duì)用鄰接鏈表表示的圖G進(jìn)行廣度優(yōu)先搜索 給出你的編碼 //==========主函數(shù)=========== void main() { int i; ALGraph *G; G=(ALGraph *)malloc(sizeof(ALGraph)); CreatALGraph(G); printf(”Print Graph DFS: “); DFS(G); printf(” “); printf(”Print Graph BFS: “); BFS(G,3); printf(” "); } 實(shí)驗(yàn)結(jié)果: 1.鄰接矩陣作為存儲(chǔ)結(jié)構(gòu) 2.鄰接鏈表作為存儲(chǔ)結(jié)構(gòu) 心得體會(huì): 實(shí)驗(yàn)6 實(shí)驗(yàn)題目:二分查找算法的實(shí)現(xiàn) 實(shí)驗(yàn)?zāi)康模?/p> 掌握二分查找法的工作原理及應(yīng)用過(guò)程,利用其工作原理完成實(shí)驗(yàn)題目中的內(nèi)容。 實(shí)驗(yàn)要求: 編寫程序構(gòu)造一個(gè)有序表L,從鍵盤接收一個(gè)關(guān)鍵字key,用二分查找法在L中查找key,若找到則提示查找成功并輸出key所在的位置,否則提示沒(méi)有找到信息。 實(shí)驗(yàn)主要步驟: 1.建立的初始查找表可以是無(wú)序的,如測(cè)試的數(shù)據(jù)為{3,7,11,15,17,21,35,42,50}或者{11,21,7,3,15,50,42,35,17}。 2.給出算法的遞歸和非遞歸代碼; 3.如何利用二分查找算法在一個(gè)有序表中插入一個(gè)元素x,并保持表的有序性? 程序代碼 實(shí)驗(yàn)結(jié)果: 心得體會(huì): 實(shí)驗(yàn)7 實(shí)驗(yàn)題目:排序 實(shí)驗(yàn)?zāi)康模?/p> 掌握各種排序方法的基本思想、排序過(guò)程、算法實(shí)現(xiàn),能進(jìn)行時(shí)間和空間性能的分析,根據(jù)實(shí)際問(wèn)題的特點(diǎn)和要求選擇合適的排序方法。 實(shí)驗(yàn)要求: 實(shí)現(xiàn)直接排序、冒泡、直接選擇、快速、堆、歸并排序算法。比較各種算法的運(yùn)行速度。 實(shí)驗(yàn)主要步驟: 程序代碼 實(shí)驗(yàn)結(jié)果: 心得體會(huì): 目錄 前言..................................................................................................................2 概要設(shè)計(jì)..................................................................................................................3 1.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)...........................................................................................3 2.1 算法設(shè)計(jì)...................................................................................................3 2.1.1 建立鏈表的算法..............................................................................3 2.1.2 鏈表插入一個(gè)元素的算法..............................................................3 2.1.3 鏈表刪除一個(gè)元素的算法..............................................................3 3.1 ADT描述..................................................................................................4 4.1 詳細(xì)設(shè)計(jì)…………………………………………… ……………………………… 4 4.1.1 數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)……………………………… ……………………………… 4.4.1.2 主要偽代碼…… …………………… ……………………………………… 4 軟件測(cè)試..................................................................................................................7 心得體會(huì)................................................................................................................11 源代碼...................................................................................................................12 參考文獻(xiàn)………………………………………………………………………...21 前言 數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),它不僅是計(jì)算機(jī)學(xué)科的核心課程,而且已經(jīng)成為其他理工專業(yè)的熱門選修課。 隨著計(jì)算機(jī)科學(xué)的技術(shù)和發(fā)展,計(jì)算機(jī)的功能和運(yùn)算速度不斷地提高,其應(yīng)用于信息處理的范圍日益擴(kuò)大。與之相應(yīng)的,計(jì)算機(jī)的加工處理對(duì)象也從簡(jiǎn)單的數(shù)據(jù)發(fā)展到一般的符號(hào),進(jìn)而發(fā)展到更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),數(shù)據(jù)結(jié)構(gòu)的表示和操作都涉及到算法,如何描述數(shù)據(jù)的結(jié)構(gòu)和討論有關(guān)的算法,又涉及到程序設(shè)計(jì)語(yǔ)言。因此,它不僅是計(jì)算機(jī)學(xué)科的核心課程,而且已經(jīng)成為其他理工專業(yè)的熱門選修課。我們通過(guò)對(duì)這門基礎(chǔ)課程的學(xué)習(xí),要學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇適合的邏輯結(jié)構(gòu),儲(chǔ)存結(jié)構(gòu)及其相應(yīng)的算法,并初步掌握算法時(shí)間分析和空間分析的技術(shù)。通過(guò)實(shí)際操作去了解數(shù)據(jù)結(jié)構(gòu)原理,練習(xí)編寫代碼的能力,以及抽象能力。 從課程性質(zhì)上講,“數(shù)據(jù)結(jié)構(gòu)”是一門專業(yè)技術(shù)基礎(chǔ)課。它的要求是學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu),存儲(chǔ)結(jié)構(gòu)及相應(yīng)的算法,并初步掌握算法的時(shí)間分析和空間分析的技術(shù)。另一方面,數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)過(guò)程也是復(fù)雜程序設(shè)計(jì)的訓(xùn)練過(guò)程,要求編寫的程序結(jié)構(gòu)清楚和正確易讀,符合軟件工程的規(guī)范。 概要設(shè)計(jì) 1.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 采用鏈?zhǔn)絻?chǔ)存結(jié)構(gòu)。typedef struct LNode{ ElemType data;struct LNode *next;}LNode,*LinkList;2.1 算法設(shè)計(jì) 2.1.1 建立鏈表的算法 (1)算法思想分析 首先從表尾到表頭逆向建立單鏈表,然后再建立的單鏈表基礎(chǔ)上進(jìn)行對(duì)鏈表上的元素進(jìn)行查詢,刪除,插入的操作。(2)要點(diǎn)描述 首先建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表,通過(guò)申請(qǐng)內(nèi)存,先建立一個(gè)空鏈表。然后結(jié)點(diǎn)的插入,建立一個(gè)有多個(gè)結(jié)點(diǎn)的鏈表。在進(jìn)行查詢等操作。(3)時(shí)間和空間復(fù)雜度分析 程序的時(shí)間復(fù)雜度為O(n)。 2.1.2 鏈表插入一個(gè)元素的算法 (1)算法思想分析 要生成一個(gè)新數(shù)據(jù)域?yàn)閄的結(jié)點(diǎn),然后插入在單鏈表中。(2)要點(diǎn)描述 在鏈表中插入結(jié)點(diǎn)只需要修改指針。若要在第 i 個(gè)結(jié)點(diǎn)之前插入元素,修改的是第 i-1 個(gè)結(jié)點(diǎn)的指針。 (3)時(shí)間和空間復(fù)雜度分析 時(shí)間復(fù)雜度O(n)2.1.3 鏈表刪除一個(gè)元素的算法 (1)算法思想分析 要?jiǎng)h除一個(gè)結(jié)點(diǎn),必須修改指針并且釋放空間。(2)要點(diǎn)描述 找到線性表中第i-1個(gè)結(jié)點(diǎn),修改其指向后繼的指針。 (3)時(shí)間和空間復(fù)雜度分析 時(shí)間復(fù)雜度O(n) 3.1 ADT描述 ADT LinkList{ 數(shù)據(jù)對(duì)象:D={ e | e∈LNode } 數(shù)據(jù)關(guān)系:R1={ 基本操作: GreateList_L(&L, n) 操作結(jié)果:構(gòu)造了一個(gè)長(zhǎng)為n的數(shù)據(jù)鏈表 ListDelete_L(&L, i, &e) 初始條件:鏈表L已存在而且非空 操作結(jié)果:刪除L的第i個(gè)數(shù)據(jù),并且用e返回其值 ListInsert_L(&L, i, e) 初始條件:鏈表L已存在 操作結(jié)果: 在L的第i個(gè)位置插入數(shù)據(jù)e GetElem(L, i, e) 初始條件:鏈表L已存在 操作結(jié)果:用e返回L中的第i個(gè)數(shù)據(jù) }ADT LinkList 4.1 詳細(xì)設(shè)計(jì) 4.1.1數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)設(shè)計(jì) 采用單鏈?zhǔn)骄€性表實(shí)現(xiàn) 4.1.2 主要偽代碼 Status GetElem(LinkList L, int i, ElemType *e){ int j=0;int d;LinkList p = L;while(p&&jnext;j++; } if(!p || j > i)return ERROR;printf(“您要查詢的元素是:n”);d=p->data;printf(“%d”,d);printf(“n”);} void InitList(LinkList *L){ *L =(LinkList)malloc(sizeof(struct LNode));if(!*L)exit(OVERFLOW);(*L)->next = NULL;} Status ListInsert(LinkList L, int i, ElemType e){ int j = 0;LinkList p = L, s;while(p && j < i-1){ p = p->next;j++;} if(!p|| j > i-1)return ERROR;s =(LinkList)malloc(sizeof(struct LNode));s->data = e;s->next = p->next;p->next = s;return OK;} Status ListDelete(LinkList L, int i, ElemType *e){ int j = 0;LinkList p = L, q;while(p->next && j < i-1){ p = p->next; j++;} if(!p->next || j > i-1)return ERROR;q = p->next;p->next = q->next;*e = q->data;free(q);return OK;} void ListTraverse(LinkList L, void(*vi)(ElemType)){ LinkList p = L->next;while(p){ vi(p->data);p = p->next;} printf(“n”);} void ListPrint(LinkList L){ LinkList p = L->next;while(p){ printf(“%d ”, p->data);p = p->next;} printf(“n”);} void printInt(int data){ printf(“%d ”, data);}.軟件測(cè)試 圖一(主界面) 圖二(插入學(xué)生信息) 圖三(顯示所有學(xué)生信息) 圖四(查詢個(gè)人信息) 圖五(統(tǒng)計(jì)信息) 圖六(修改信息) 圖七(保存數(shù)據(jù)) 圖八(刪除信息) 心得體會(huì) 通過(guò)本程序的設(shè)計(jì),我對(duì)數(shù)據(jù)結(jié)構(gòu)作了以下總結(jié):要解決一道程序題必須先要認(rèn)真捕捉改程序中的有用信息,找出解決方法。先規(guī)劃好,程序需要什么樣的數(shù)據(jù)結(jié)構(gòu),什么函數(shù),對(duì)程序有什么要求。然后從整體把握對(duì)程序設(shè)計(jì)進(jìn)行分工,相應(yīng)地把程序分成若干模塊,具體實(shí)現(xiàn)各部分實(shí)行相應(yīng)的功能。一個(gè)程序要順利地進(jìn)行設(shè)計(jì),一是要對(duì)程序的功能有全面的了解,如果漏了某些部分,都會(huì)使得這個(gè)程序調(diào)試不出來(lái)或者是令該程序沒(méi)有達(dá)到預(yù)想的效果。其次,在程序的編譯中,必須注重程序設(shè)計(jì)過(guò)程中的細(xì)節(jié),像單鏈表的程序,就要理解鏈表的概念,理解鏈表的數(shù)據(jù)特點(diǎn),要清楚知道數(shù)據(jù)域和指針域的作用,否則,很容易會(huì)浪費(fèi)大量時(shí)間在檢測(cè)錯(cuò)誤上面。要說(shuō)到解題的思考方向,如果要總結(jié)成規(guī)律,我認(rèn)為要靈活的進(jìn)行方法的設(shè)計(jì),通過(guò)不同的方法來(lái)實(shí)現(xiàn)不同的功能,如通過(guò)結(jié)點(diǎn)的插入來(lái)實(shí)現(xiàn)鏈表的創(chuàng)建。同時(shí)應(yīng)該注意各種語(yǔ)句的選擇,要先預(yù)想好需要什么樣的語(yǔ)句來(lái)實(shí)現(xiàn)函數(shù)定義,盡量簡(jiǎn)單快捷地完成,避免出錯(cuò)。 要規(guī)范面向?qū)ο蟪绦蛟O(shè)計(jì)師的書寫協(xié)管,在這次課程設(shè)計(jì)中,我們?cè)俅胃惺艿剑?guī)范的程序書寫,可以更好的進(jìn)行后期的差錯(cuò)補(bǔ)漏。還應(yīng)該注意各種面向?qū)ο笳Z(yǔ)言語(yǔ)法的運(yùn)用,例如繼承的方法,都要嚴(yán)格按照語(yǔ)法來(lái)進(jìn)行,否則很容易就會(huì)出現(xiàn)錯(cuò)誤,甚至嚴(yán)重影響課程設(shè)計(jì)的進(jìn)度。 源代碼 #include “stdio.h” #include “stdlib.h” #include “string.h” int shoudsave=0;// struct student { char num[10];//學(xué)號(hào) char name[20]; char sex[4]; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime[10];//最近更新時(shí)間 }; typedef struct node { struct student data; struct node *next;}Node,*Link; int menu(){ char m[3]; int n; printf(“ ************************歡迎進(jìn)入學(xué)生成績(jī)管理系統(tǒng)******************************nn”); printf(“t歡迎使用本學(xué)生管理系統(tǒng),本系統(tǒng)將為您提供歷史學(xué)生信息查詢,學(xué)生成績(jī)信息管理功能。n”); printf(“********************************************************************************”); printf(“t1輸入學(xué)生資料ttttt2刪除學(xué)生資料n”); printf(“t3查詢學(xué)生資料ttttt4修改學(xué)生資料n”); printf(“t5顯示學(xué)生資料ttttt6統(tǒng)計(jì)學(xué)生成績(jī)n”); printf(“t7保存學(xué)生資料n”); printf(“ttplease choose a operation(1-7):n”); printf(“*********************************************************************** *********n”); scanf(“%s”,m); n=atoi(m); return(n);} void printstart(){ printf(“---------n”);} void Wrong(){ printf(“n=====>提示:輸入錯(cuò)誤!n”);} void Nofind(){ printf(“n=====>提示:沒(méi)有找到該學(xué)生!n”);} void printc()// 本函數(shù)用于輸出中文 { printf(“學(xué)號(hào)t 姓名 性別 英語(yǔ)成績(jī) 數(shù)據(jù)庫(kù)成績(jī) 數(shù)據(jù)結(jié)構(gòu)成績(jī) 總分平均分n”);} void printe(Node *p)//本函數(shù)用于輸出英文 { printf(“%-12s%stt%st%dtt%dt%dt%dt %dn”,p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);} Node* Locate(Link l,char findmess[],char nameornum[])//該函數(shù)用于定位連表中符合要求的接點(diǎn),并返回該指針 { Node *r; if(strcmp(nameornum,“num”)==0)//按學(xué)號(hào)查詢 { r=l->next; while(r!=NULL) { if(strcmp(r->data.num,findmess)==0) return r; r=r->next; } } else if(strcmp(nameornum,“name”)==0)//按姓名查詢 { r=l->next; while(r!=NULL) { if(strcmp(r->data.name,findmess)==0) return r; r=r->next; } } return 0;} void Add(Link l)//增加學(xué)生 { Node *p,*r,*s; char num[10]; r=l; s=l->next; while(r->next!=NULL) r=r->next;//將指針置于最末尾 while(1) { printf(“請(qǐng)你輸入學(xué)號(hào)(以'0'返回上一級(jí)菜單:)”); scanf(“%s”,num); if(strcmp(num,“0”)==0) break; while(s) { if(strcmp(s->data.num,num)==0) { printf(“=====>提示:學(xué)號(hào)為'%s'的學(xué)生已經(jīng)存在,若要修改請(qǐng)你選擇'4 修改'!n”,num); printstart(); printc(); printe(s); printstart(); printf(“n”); return; } s=s->next; } p=(Node *)malloc(sizeof(Node)); strcpy(p->data.num,num); printf(“請(qǐng)你輸入姓名:”); scanf(“%s”,p->data.name); getchar(); printf(“請(qǐng)你輸入性別:”); scanf(“%s”,p->data.sex); getchar(); printf(“請(qǐng)你輸入數(shù)據(jù)結(jié)構(gòu)成績(jī):”); scanf(“%d”,&p->data.cgrade); getchar(); printf(“請(qǐng)你輸入數(shù)據(jù)庫(kù)成績(jī):”); scanf(“%d”,&p->data.mgrade); getchar(); printf(“請(qǐng)你輸入英語(yǔ)成績(jī):”); scanf(“%d”,&p->data.egrade); getchar(); p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle / 3; //信息輸入已經(jīng)完成p->next=NULL; r->next=p; r=p; shoudsave=1; } } void Qur(Link l)//查詢學(xué)生 { char findmess[20]; Node *p; if(!l->next) { printf(“n=====>提示:沒(méi)有資料可以查詢!n”); return; } printf(“請(qǐng)你輸入要查找的學(xué)號(hào):”); scanf(“%s”,findmess); p=Locate(l,findmess,“num”); if(p) { printf(“tttt查找結(jié)果n”); printstart(); printc(); printe(p); printstart(); } else Nofind();} void Del(Link l)//刪除 { Node *p,*r; char findmess[20]; if(!l->next) { printf(“n=====>提示:沒(méi)有資料可以刪除!n”); return; } printf(“n=====>確定進(jìn)行刪除操作請(qǐng)按 1,按其他按鍵退出該操作nnnn”); if(menu()==1) { printf(“請(qǐng)你輸入要?jiǎng)h除的學(xué)號(hào):”); scanf(“%s”,findmess); p=Locate(l,findmess,“num”); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf(“n=====>提示:該學(xué)生已經(jīng)成功刪除!n”); shoudsave=1; } else Nofind(); } else exit;} void Modify(Link l)//修改函數(shù) { Node *p; char findmess[20]; if(!l->next) { printf(“n=====>提示:沒(méi)有資料可以修改!n”); return; } printf(“請(qǐng)你輸入要修改的學(xué)生學(xué)號(hào):”); scanf(“%s”,findmess); p=Locate(l,findmess,“num”); if(p) { printf(“請(qǐng)你輸入新學(xué)號(hào)(原來(lái)是%s):”,p->data.num); scanf(“%s”,p->data.num); printf(“請(qǐng)你輸入新姓名(原來(lái)是%s):”,p->data.name); scanf(“%s”,p->data.name); getchar(); printf(“請(qǐng)你輸入新性別(原來(lái)是%s):”,p->data.sex); scanf(“%s”,p->data.sex); printf(“請(qǐng)你輸入新的數(shù)據(jù)結(jié)構(gòu)成績(jī)(原來(lái)是%d分):”,p->data.cgrade); scanf(“%d”,&p->data.cgrade); getchar(); printf(“請(qǐng)你輸入新的數(shù)據(jù)庫(kù)成績(jī)(原來(lái)是%d分):”,p->data.mgrade); scanf(“%d”,&p->data.mgrade); getchar(); printf(“請(qǐng)你輸入新的英語(yǔ)成績(jī)(原來(lái)是%d分):”,p->data.egrade); scanf(“%d”,&p->data.egrade); p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle/3; printf(“n=====>提示:資料修改成功!n”); shoudsave=1; } else Nofind(); } void Disp(Link l)//顯示函數(shù) { int count=0; Node *p; p=l->next; if(!p) { printf(“n=====>提示:沒(méi)有資料可以顯示!n”); return; } printf(“tttt顯示結(jié)果n”); printstart(); printc(); printf(“n”); while(p) { printe(p); p=p->next; } printstart(); printf(“n”);} void Tongji(Link l)//統(tǒng)計(jì)函數(shù) { Node *pm,*pe,*pc,*pt,*pa;//用于指向分?jǐn)?shù)最高的接點(diǎn) Node *r=l->next; if(!r) { printf(“n=====>提示:沒(méi)有資料可以統(tǒng)計(jì)!n”); return; } pm=pe=pc=pt=pa=r; while(r!=NULL) { if(r->data.cgrade>=pc->data.cgrade) pc=r; if(r->data.mgrade>=pm->data.mgrade) pm=r; if(r->data.egrade>=pe->data.egrade) pe=r; if(r->data.totle>=pt->data.totle) pt=r; if(r->data.ave>=pa->data.ave) pa=r; r=r->next; } printf(“------------------------------統(tǒng)計(jì)結(jié)果-n”); printf(“總分最高者:t%s %d分n”,pt->data.name,pt->data.totle); printf(“平均分最高者:t%s %d分n”,pa->data.name,pa->data.ave); printf(“英語(yǔ)最高者:t%s %d分n”,pe->data.name,pe->data.egrade); printf(“數(shù)據(jù)庫(kù)最高者:t%s %d分n”,pm->data.name,pm->data.mgrade); printf(“數(shù)據(jù)結(jié)構(gòu)最高者:t%s %d分n”,pc->data.name,pc->data.cgrade); printstart();} void Save(Link l)//保存函數(shù) { FILE* fp; Node *p; int flag=1,count=0; fp=fopen(“c:student”,“wb”); if(fp==NULL) { printf(“n=====>提示:重新打開文件時(shí)發(fā)生錯(cuò)誤!n”); exit(1); } p=l->next; while(p) { if(fwrite(p,sizeof(Node),1,fp)==1) { p=p->next; count++; } else { flag=0; break; } } if(flag) { printf(“n=====>提示:文件保存成功.(有%d條記錄已經(jīng)保存.)n”,count); shoudsave=0; } fclose(fp);} void main(){ Link l;//連表 FILE *fp;//文件指針 char ch; char jian; int count=0; Node *p,*r; l=(Node*)malloc(sizeof(Node)); l->next=NULL; r=l; fp=fopen(“C:student”,“rb”); if(fp==NULL) { fp=fopen(“C:student”,“wb”); exit(0); } printf(“n=====>提示:文件已經(jīng)打開,正在導(dǎo)入記錄......n”); while(!feof(fp)) { p=(Node*)malloc(sizeof(Node)); if(fread(p,sizeof(Node),1,fp))//將文件的內(nèi)容放入接點(diǎn)中 { p->next=NULL; r->next=p; r=p;//將該接點(diǎn)掛入連中 count++; } } fclose(fp);//關(guān)閉文件 printf(“n=====>提示:記錄導(dǎo)入完畢,共導(dǎo)入%d條記錄.n”,count); for(;;) { switch(menu()) { case 1:Add(l);break;//增加學(xué)生 case 2:Del(l);break;//刪除學(xué)生 case 3:Qur(l);break;//查詢學(xué)生 case 4:Modify(l);break;//修改學(xué)生 case 5:Disp(l);break;//顯示學(xué)生 case 6:Tongji(l);break;//統(tǒng)計(jì)學(xué)生 case 7:Save(l);break;//保存學(xué)生 default: Wrong(); getchar(); break; } } } 參考文獻(xiàn) 《數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)》----------------清華大學(xué)出版社 嚴(yán)蔚敏 吳偉民 編著 《C語(yǔ)言程序設(shè)計(jì)》------------------------中國(guó)鐵道出版社 丁峻嶺 余堅(jiān) 編著 學(xué)號(hào):__________ 姓名:__________ 班級(jí):__________ 日期:__________ 指導(dǎo)教師:__________ 成績(jī):__________ 實(shí)驗(yàn)一 上機(jī)操作初步和簡(jiǎn)單的C程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康?、熟悉C語(yǔ)言運(yùn)行環(huán)境Turbo C++3.02、會(huì)簡(jiǎn)單的程序調(diào)試 3、熟悉C語(yǔ)言各種類型數(shù)據(jù)的輸入輸出函數(shù)的使用方法 4、掌握順序結(jié)構(gòu)程序設(shè)計(jì) 二、實(shí)驗(yàn)內(nèi)容 1、上機(jī)運(yùn)行本章3個(gè)例題,熟悉所用系統(tǒng)的上機(jī)方法與步驟。(習(xí)題1.7) 2、編寫一個(gè)C程序,輸入a、b、c 3個(gè)值,輸出其中最大者。(習(xí)題1.6) 3、設(shè)圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長(zhǎng)、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說(shuō)明,取小數(shù)點(diǎn)后2位數(shù)字。注意:在Trubo C++ 3.0中不能輸入漢字,只能輸入英文或拼音。(習(xí)題4.8) 4、運(yùn)行如下程序,寫出運(yùn)行結(jié)果。第一┆范文網(wǎng)www.tmdps.cn整理該文章,版權(quán)歸原作者、原出處所有...#include void main() { int a=1,b=2; a=a+b;b=a-b;a=a-b; printf(“%d,%dn”,a,b); } 三、實(shí)驗(yàn)步驟與過(guò)程 四、程序調(diào)試記錄 C語(yǔ)言程序設(shè)計(jì)(B) (2010-2011-2) 實(shí)驗(yàn)報(bào)告 教學(xué)班級(jí): 學(xué)號(hào): 姓名: 課程教師: 實(shí)驗(yàn)輔導(dǎo)教師: 江西理工大學(xué) 自由編輯的程序 一、實(shí)驗(yàn)前的源程序: //任意整數(shù)的疊加 #include 實(shí)驗(yàn)錯(cuò)誤報(bào)告: [Error] D:Program FilesC-Free 4temp未命名10.cpp:7: parse error before `for' [Error] D:Program FilesC-Free 4temp未命名10.cpp:7: parse error before `)' 構(gòu)建中止 未命名10: 2 個(gè)錯(cuò)誤, 0 個(gè)警告 實(shí)驗(yàn)后的源程序: //任意整數(shù)的疊加 #include int i,j,sum=0;printf(“please input a int numbern”);scanf(“%d”,&j);for(i=0;i<=j;i++)sum=sum+i;printf(“此數(shù)的疊加=%dn”,sum);} 二、實(shí)驗(yàn)前的源程序: /*小寫字母轉(zhuǎn)大寫字母*/ #include 江西理工大學(xué) } c2='s';c1=c1-32;c2=c2-32;printf(“%c,%cn”,c1,c); 實(shí)驗(yàn)錯(cuò)誤報(bào)告: [Error] D:Program FilesC-Free 4temp未命名11.cpp:9: `c' undeclared(first use this function)[Error] D:Program FilesC-Free 4temp未命名11.cpp:9:(Each undeclared identifier is reported only once [Error] D:Program FilesC-Free 4temp未命名11.cpp:9: for each function it appears in.)構(gòu)建中止 未命名11: 3 個(gè)錯(cuò)誤, 0 個(gè)警告 實(shí)驗(yàn)后的源程序: /*小寫字母轉(zhuǎn)大寫字母*/ #include 三、實(shí)驗(yàn)前的源程序: /*查看某一年是否為閏年*/ #include { if(year%100==0) { if(year%400==0) i=1; else 江西理工大學(xué) i=0; } else i=1; } else i=0;if(i) printf(“%d 是閏年n”,year);else printf(“%d 不是閏年n”,year);} 實(shí)驗(yàn)錯(cuò)誤報(bào)告: [Error] D:Program FilesC-Free 4temp未命名14.cpp:15: parse error before `else' [Error] D:Program FilesC-Free 4temp未命名14.cpp:25: parse error at end of input 構(gòu)建中止 未命名14: 2 個(gè)錯(cuò)誤, 0 個(gè)警告 實(shí)驗(yàn)后的源程序: /*查看某一年是否為閏年*/ #include { if(year%100==0) { if(year%400==0) i=1; else i=0; } else i=1; } else i=0;if(i) 江西理工大學(xué) printf(“%d 是閏年n”,year);else printf(“%d 不是閏年n”,year);} 數(shù)據(jù)的輸入和輸出 四、程序改錯(cuò)題 改錯(cuò)前的源程序;#include #include 改錯(cuò)前的源程序;#include 江西理工大學(xué) #include long x=7654123;x*=10;printf(“x=%7d”,x);} 改錯(cuò)前的源程序: #include #include 五、程序編寫題:已知char ch’b’;int i=3 ,j=5;float x=22.354,y=435.6789;根據(jù)下面的輸出結(jié)果編寫程序。ch =’b’,ASCII=98 i=3□□□□□□j=5 x=22.35□□□y=435.68 實(shí)驗(yàn)前的源程序: #include 江西理工大學(xué){ char ch='b';int i=3,j=5;float x=22.354,y=435.6789;printf(“ch='%c',ASCII=%dn”,ch,ch);printf(“i=%d j=%dn”,i,j);printf(“x=%.2f y=%.2fn”,x,y);} 實(shí)驗(yàn)錯(cuò)誤報(bào)告:無(wú) 實(shí)驗(yàn)后的源程序: #include j=%dn”,i,j);printf(“x=%.2f y=%.2fn”,x,y);} 六、從鍵盤輸入一行字符,統(tǒng)計(jì)其中小寫字母、大寫字母和其它字符的個(gè)數(shù): 實(shí)驗(yàn)前的源程序: #include “stdio.h” void main(){ printf(“請(qǐng)任意輸入一串字符:n”); char ch,sum1=0,sum2=0,other=0; ch=getchar(); while(c!='n') { if(c>='A'&&c<='Z')sum1++; else if(c>='a'&&c<='z')sum2++; else other++; c=getchar(); } printf(“大寫字母的個(gè)數(shù):%dn”,sum1);printf(“小寫字母的個(gè)數(shù):%dn”,sum2); 江西理工大學(xué)printf(“其他字符母?jìng)€(gè)數(shù):%dn”,other);} 實(shí)驗(yàn)錯(cuò)誤報(bào)告: [Error] D:Program FilesC-Free 4temp未命名7.cpp:7: `c' undeclared(first use this function)[Error] D:Program FilesC-Free 4temp未命名7.cpp:7:(Each undeclared identifier is reported only once [Error] D:Program FilesC-Free 4temp未命名7.cpp:7: for each function it appears in.)構(gòu)建中止 未命名7: 3 個(gè)錯(cuò)誤, 0 個(gè)警告 實(shí)驗(yàn)后的源程序: #include “stdio.h” void main(){ printf(“請(qǐng)任意輸入一串字符:n”); char ch,sum1=0,sum2=0,other=0; ch=getchar(); while(ch!='n') { if(ch>='A'&&ch<='Z')sum1++; else if(ch>='a'&&ch<='z')sum2++; else other++; ch=getchar(); } printf(“大寫字母的個(gè)數(shù):%dn”,sum1);printf(“小寫字母的個(gè)數(shù):%dn”,sum2);printf(“其他字符母?jìng)€(gè)數(shù):%dn”,other);} 七、使用以下公式求∏的近似值,要求精確到最后一項(xiàng)的絕對(duì)值小于10e-4 ∏/4=1-1/3+1/5-1/7+…… 實(shí)驗(yàn)前的源程序: #include “stdio.h” #include “math.h” main(){ 江西理工大學(xué) } float sum=0;int i,j;for(i=1;;i++){ j=2*i-1;if(1.0/j>0.0001){ sum+=pow(-1,i+1)*(1.o/j);continue;break;} printf(“∏=%fn”,sum*4.0); 實(shí)驗(yàn)錯(cuò)誤報(bào)告: [Error] D:Program FilesC-Free 4temp未命名9.cpp:13: nondigits in number and not hexadecimal [Error] D:Program FilesC-Free 4temp未命名9.cpp:19: parse error at end of input 構(gòu)建中止 未命名9: 2 個(gè)錯(cuò)誤, 0 個(gè)警告 實(shí)驗(yàn)后的源程序: #include “stdio.h” #include “math.h” main(){ float sum=0;int i,j;for(i=1;;i++){ j=2*i-1;if(1.0/j>0.0001){ sum+=pow(-1,i+1)*(1.0/j);continue;} break;} printf(“∏=%fn”,sum*4.0);} 八、用選擇法對(duì)10個(gè)整數(shù)排序: 實(shí)驗(yàn)前的源程序: 江西理工大學(xué)#include scanf(“%d”,a[i]);} printf(“n”);for(i=0;i<10;i++)for(j=0;j<10-j;j++){ if(a[j]>a[j+1]) { k=a[j]; a[j]=a[j+1]; k=a[j+1];} printf(“這10個(gè)整數(shù)從小到大排列為:”);for(j=0;j<10;j++){ printf(“%d ”,a[j]);} printf(“n”);printf(“這10個(gè)整數(shù)從大到小排列為:”);for(j=9;j>=0;j--){ printf(“%d ”,a[j]);} 實(shí)驗(yàn)錯(cuò)誤報(bào)告: [Error] D:Program FilesC-Free 4temp未命名1.cpp:33: parse error at end of input 構(gòu)建中止 未命名1: 1 個(gè)錯(cuò)誤, 0 個(gè)警告 實(shí)驗(yàn)后的源程序: //用選擇法對(duì)10個(gè)整數(shù)排序 #include 江西理工大學(xué) int i,j,k;for(i=0;i<10;i++){ scanf(“%d”,a[i]);} printf(“n”);for(i=0;i<10;i++)for(j=0;j<10-j;j++){ if(a[j]>a[j+1]){ k=a[j]; a[j]=a[j+1]; k=a[j+1];} } printf(“這10個(gè)整數(shù)從小到大排列為:”);for(j=0;j<10;j++){ printf(“%d ”,a[j]);} printf(“n”);printf(“這10個(gè)整數(shù)從大到小排列為:”);for(j=9;j>=0;j--){ printf(“%d ”,a[j]);} } 九、求一個(gè)3*3的整數(shù)矩陣對(duì)角線元素之積: 實(shí)驗(yàn)前的源程序: #include scanf(“%d”,&a[i][j])} for(i=0;i<3;i++) 江西理工大學(xué) { for(j=0;j<3;j++) { printf(“%d ”,a[i][j]); } printf(“n”); } printf(“n”); for(i=0;i<3;i++) { for(j=0;j<3;j++) if(i=j) ji*=a[i][j]; printf(“主對(duì)角線的積為:%dn”,ji); } } 實(shí)驗(yàn)錯(cuò)誤報(bào)告: [Error] D:Program FilesC-Free 4temp未命名4.cpp:11: parse error before `}' 構(gòu)建中止 未命名4: 1 個(gè)錯(cuò)誤, 0 個(gè)警告 實(shí)驗(yàn)后的源程序: #include scanf(“%d”,&a[i][j]);} for(i=0;i<3;i++){ for(j=0;j<3;j++) { printf(“%d ”,a[i][j]); } printf(“n”); } 江西理工大學(xué) printf(“n”); for(i=0;i<3;i++) { for(j=0;j<3;j++) if(i=j) ji*=a[i][j]; printf(“主對(duì)角線的積為:%dn”,ji); } } 十、將一個(gè)數(shù)組中的值按你需從新存放。例如,原來(lái)順序?yàn)?,6,5,4,1。要求改為1,4,5,6,8。 實(shí)驗(yàn)前的源程序: #include scanf(“%d”,&a[i]);} for(i=0;i t=a[i]; a[i]=a[j-i-1]; t=a[j-i-1];} printf(“該數(shù)組逆序排列為:”); for(i=0;i printf(“%d ”,a[i]);printf(“n”);} 實(shí)驗(yàn)錯(cuò)誤報(bào)告: [Error] D:Program FilesC-Free 4temp未命名3.cpp:25: parse error at end of input 構(gòu)建中止 未命名3: 1 個(gè)錯(cuò)誤, 0 個(gè)警告 江西理工大學(xué)實(shí)驗(yàn)后的源程序: #include scanf(“%d”,&a[i]);} for(i=0;i t=a[i]; a[i]=a[j-i-1]; a[j-i-1]=t;} printf(“該數(shù)組逆序排列為:”); for(i=0;i printf(“%d ”,a[i]);} printf(“n”);} 江西理工大學(xué)第二篇:c數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告
第三篇:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告(報(bào)告+C語(yǔ)言源代碼)
第四篇:c語(yǔ)言實(shí)驗(yàn)報(bào)告
第五篇:C語(yǔ)言 實(shí)驗(yàn)報(bào)告