久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 實(shí)驗(yàn)報(bào)告

時(shí)間:2019-05-12 07:17:17下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 實(shí)驗(yàn)報(bào)告》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 實(shí)驗(yàn)報(bào)告》。

第一篇:數(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 #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){ L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem)return-1;L.length=0;L.listsize=LIST_INIT_SIZE;return OK;} int ListInsert_Sq(Sqlist&L,int i,int e){ if(i<1||i>L.length+1)return ERROR;if(L.length==L.listsize){

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 #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[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 #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(!(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;in;i++)

{

scanf(“%c”,&a);

G->vexs[i]=a;

//讀入頂點(diǎn)信息,建立頂點(diǎn)表

}

for(i=0;in;i++)

for(j=0;jn;j++)

G->edges[i][j]=0;

//初始化鄰接矩陣

printf(“Input edges,Creat Adjacency Matrixn”);

for(k=0;ke;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;in;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;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[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)告

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ì):

第三篇:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告(報(bào)告+C語(yǔ)言源代碼)

目錄

前言..................................................................................................................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={ | e∈LNode ,e >0}

基本操作:

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) 編著

第四篇:c語(yǔ)言實(shí)驗(yàn)報(bào)告

學(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í)驗(yàn)報(bà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 void main(){ 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)錯(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 void main(){

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 void main(){ char c1,c2;c1='w';

江西理工大學(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 void main(){ char c1,c2;c1='w';c2='s';c1=c1-32;c2=c2-32;printf(“%c,%cn”,c1,c2);}

三、實(shí)驗(yàn)前的源程序:

/*查看某一年是否為閏年*/ #include void main(){ int year,i;scanf(“%d”,&year);if(year%4==0)

{

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 void main(){ int year,i;scanf(“%d”,&year);if(year%4==0)

{

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 void main(){ float x,y,z;scanf(“%5.2f,%5.2f”,&x,&y);z=x+y;printf(“z=%5.2f”,&z);} 修改后的源程序:

#include void main(){ float x,y,z;scanf(“%f%f”,&x,&y);z=x+y;printf(“z=%5.2f”,z);}

改錯(cuò)前的源程序;#include void main(){ int x=7654123;x*=10;printf(“x=%7d”,x);} 修改后的源程序:

江西理工大學(xué)

#include void main(){

long x=7654123;x*=10;printf(“x=%7d”,x);}

改錯(cuò)前的源程序:

#include void main(){ float c1=67;char c2;c2=c1+5;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%d”,&c1,&c2);} 修改后的源程序:

#include void main(){ int c1=67;char c2;c2=c1+5;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%d”,c1,c2);}

五、程序編寫題:已知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 void main()

江西理工大學(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 void main(){ 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);}

六、從鍵盤輸入一行字符,統(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 main(){ printf(“請(qǐng)輸入一串亂序的10個(gè)整數(shù):n”);int a[10];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]);}

實(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 void main(){ printf(“請(qǐng)輸入一串亂序的10個(gè)整數(shù):n”);int a[10];

江西理工大學(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 void main(){ int a[3][3];int i,j,ji=1;printf(“請(qǐng)輸入一個(gè)3*3的矩陣:n”);for(i=0;i<=2;i++)for(j=0;j<=2;j++){

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 void main(){ int a[3][3];int i,j,ji=1;printf(“請(qǐng)輸入一個(gè)3*3的矩陣:n”);for(i=0;i<=2;i++)for(j=0;j<=2;j++){

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 void main(){ int a[10],i,j,t;printf(“請(qǐng)問(wèn)你要輸個(gè)幾個(gè)數(shù)字: ”);scanf(“%d”,&j);printf(“請(qǐng)輸入大小順序的%d個(gè)數(shù)字: ”,j);for(i=0;i

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 void main(){ int a[10],i,j,t;printf(“請(qǐng)問(wèn)你要輸個(gè)幾個(gè)數(shù)字: ”);scanf(“%d”,&j);printf(“請(qǐng)輸入大小順序的%d個(gè)數(shù)字: ”,j);for(i=0;i

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é)

下載數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 實(shí)驗(yàn)報(bào)告word格式文檔
下載數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 實(shí)驗(yàn)報(bào)告.doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    C語(yǔ)言實(shí)驗(yàn)報(bà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é)1 P123--五、1、編寫函數(shù),找出5*5數(shù)組對(duì)角線上元素的最小值,并在......

    c語(yǔ)言實(shí)驗(yàn)報(bào)告

    實(shí)驗(yàn)一 熟悉C語(yǔ)言程序的運(yùn)行環(huán)境 一、實(shí)驗(yàn)?zāi)康?1、了解在該系統(tǒng)上如何編輯、編譯、連接和運(yùn)行一個(gè)C 程序; 2、通過(guò)運(yùn)行簡(jiǎn)單的C程序,初步了解C程序的特點(diǎn)。 二、實(shí)驗(yàn)預(yù)習(xí)1、......

    c語(yǔ)言實(shí)驗(yàn)報(bào)告

    南昌大學(xué)實(shí)驗(yàn)報(bào)告 學(xué)生姓名: 學(xué) 號(hào): 專業(yè)班級(jí): √ 綜合 □ 設(shè)計(jì) □ 創(chuàng)新 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 實(shí)驗(yàn)類型:□ 驗(yàn)證 □一.實(shí)驗(yàn)名稱 實(shí)驗(yàn)3 控制語(yǔ)句 二.實(shí)驗(yàn)?zāi)康?1.熟練掌握if 、if…el......

    c語(yǔ)言實(shí)驗(yàn)報(bào)告

    計(jì)算機(jī)軟件技術(shù)基礎(chǔ)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)一:線性表的排序與查找 一.實(shí)驗(yàn)內(nèi)容 a) 鍵盤輸入一組無(wú)序數(shù)據(jù),添加到線性表中; b) 排序線性表并輸出排序結(jié)果; c) 鍵盤輸入一個(gè)數(shù),并插入到排好......

    C語(yǔ)言實(shí)驗(yàn)報(bào)告

    鄭州輕工業(yè)學(xué)院 實(shí) 踐 報(bào) 告 實(shí)現(xiàn)內(nèi)容: OJ1123最佳校友(數(shù)組)、OJ1158又是升序(指針)、OJ1180成績(jī)統(tǒng)計(jì)(結(jié)構(gòu))、OJ1203做幻方(文件) 學(xué)號(hào):541507020140 學(xué)生姓名:王紅旭 專業(yè)班級(jí):電子信......

    C語(yǔ)言實(shí)驗(yàn)報(bào)告

    實(shí)驗(yàn)一 C程序的運(yùn)行環(huán)境和方法 一、實(shí)驗(yàn)?zāi)康?1.了解所用的計(jì)算機(jī)系統(tǒng)。 2.了解在該系統(tǒng)上如何進(jìn)行編輯、編譯、連接和運(yùn)行一個(gè)C程序。 3.通過(guò)運(yùn)行簡(jiǎn)單的C程序了解C程序的特點(diǎn)。 二......

    C語(yǔ)言實(shí)驗(yàn)報(bào)告

    C語(yǔ)言程序設(shè)計(jì)(B) (2010-2011-2) 實(shí)驗(yàn)報(bào)告2 教學(xué)班級(jí): 學(xué)號(hào): 姓名:課程教師: 實(shí)驗(yàn)輔導(dǎo)教師: 一、做一個(gè)“楊輝三角” 實(shí)驗(yàn)前的源程序: /*楊輝三角*/ #include void fun(int Y[][]......

    C語(yǔ)言實(shí)驗(yàn)報(bào)告

    C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn) --------指針應(yīng)用實(shí)驗(yàn) ========================山東農(nóng)業(yè)大學(xué)實(shí)驗(yàn)報(bào)告 課程名稱: c語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn) 學(xué)院: 水利土木工程學(xué)院 專業(yè): 道路橋梁與渡河工程......

主站蜘蛛池模板: 一本一道波多野结衣av一区| 人妻去按摩店被黑人按中出| 亚洲欧洲日韩综合久久| 天天爽天天爽天天爽| 亚洲变态另类天堂av手机版| 免费A级毛片在线播放不收费| 热99re6久精品国产首页| 国产精品亚洲五月天高清| 国产精品白丝喷水在线观看| 在教室伦流澡到高潮hgl动漫| 无码人妻丰满熟妇区五十路| 亚洲综合无码av一区二区三区| 国产成人青青久久大片| 麻豆国产av穿旗袍强迫女佣人| 欧美bbw极品另类| 亚洲性无码av在线欣赏网| 99热精国产这里只有精品| 国产 麻豆 日韩 欧美 久久| 国产热の有码热の无码视频| 激情人妻另类人妻伦| 欧美日韩综合在线精品| 日韩欧美亚洲综合久久影院ds| 曰韩欧美群交p片内射| 国产草莓精品国产av片国产| 国产亚洲欧美日韩在线一区二区三区| 国产精品色午夜免费视频| 亚洲国产日韩一区三区| 国产又黄又爽又色的免费| 国产精品??码一本A片| 国产精品天天在线午夜更新| 欧美肥胖老妇bbw| 亚洲国产成人超a在线播放| 久久99精品国产麻豆宅宅| 好大好湿好硬顶到了好爽视频| 国产大片内射1区2区| 国产成人久久久精品二区三区| 在线无码免费网站永久| 97人妻天天摸天天爽天天| 初尝黑人巨砲波多野结衣| 国产亚洲精品无码成人| 无码人妻aⅴ一区二区三区蜜桃|