版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
數(shù)據(jù)結(jié)構(gòu)形成性考核冊實驗名稱:實驗一線性表線性表的鏈式存儲結(jié)構(gòu)【問題描述】某項比賽中,評委們給某參賽者的評分信息存儲在一個帶頭結(jié)點的單向鏈表中,編寫程序:顯示在評分中給出最高分和最低分的評委的有關信息(姓名、年齡、所給分數(shù)等)。在鏈表中刪除一個最高分和一個最低分的結(jié)點。計算該參賽者去掉一個最高分和一個最低分后的平均成績?!净疽蟆拷⒁粋€評委打分的單向鏈表;顯示刪除相關結(jié)點后的鏈表信息。顯示要求的結(jié)果?!緦嶒灢襟E】運行PC中的MicrosoftVisualC++6.0程序,點擊“文件”→“新建”→對話窗口中“文件”→“c++SourceFile”→在“文件名”中輸入“X1.cpp”→在“位置”中選擇儲存路徑為“桌面”→“確定”,輸入程序代碼,程序代碼如下:#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<iostream.h>#include<conio.h>#defineNULL0#definePWRS5//定義評委人數(shù)structpw//定義評委信息{charname[6];floatscore;intage;};typedefstructpwPW;structnode//定義鏈表結(jié)點{structpwdata;structnode*next;};typedefstructnodeNODE;NODE*create(intm);//創(chuàng)建單鏈表intcalc(NODE*h);//計算、數(shù)據(jù)處理voidprint(NODE*h);//輸出所有評委打分數(shù)據(jù)voidinput(NODE*s);//輸入評委打分數(shù)據(jù)voidoutput(NODE*s);//輸出評委打分數(shù)據(jù)voidmain(){NODE*head;floatave=0;floatsum=0;head=create(PWRS);printf("所有評委打分信息如下:\n");print(head);//顯示當前評委打分calc(head);//計算成績printf("該選手去掉1最高分和1最低分后的有效評委成績:\n");print(head);//顯示去掉極限分后的評委打分}voidinput(NODE*s){printf("請輸入評委的姓名:");scanf("%S",&s->);printf("年齡:");scanf("%d",&s->data.age);printf("打分:");scanf("%f",&s->data.score);printf("\n");}voidoutput(NODE*s){printf("評委姓名:%8s,年齡:%d,打分:%2.2f\n",s->,s->data.age,s->data.score);}NODE*create(intm){NODE*head,*p,*q;inti;p=(NODE*)malloc(sizeof(NODE));head=p;q=p;p->next=NULL;for(i=1;i<=m;i++){p=(NODE*)malloc(sizeof(NODE));input(p);p->next=NULL;q->next=p;q=p;}return(head);}voidprint(NODE*h){for(inti=1;((i<=PWRS)&&(h->next!=NULL));i++){h=h->next;output(h);}printf("\n");}intcalc(NODE*h){NODE*q,*p,*pmin,*pmax;floatsum=0;floatave=0;p=h->next;//指向首元結(jié)點pmin=pmax=p;//設置初始值sum+=p->data.score;p=p->next;for(;p!=NULL;p=p->next){if(p->data.score>pmax->data.score)pmax=p;if(p->data.score<pmin->data.score)pmin=p;sum+=p->data.score;}cout<<"給出最高分的評委姓名:"<<pmax-><<"年齡:"<<pmax->data.age<<"分值:"<<pmax->data.score<<endl;cout<<"給出最低分的評委姓名:"<<pmin-><<"年齡:"<<pmin->data.age<<"分值:"<<pmin->data.score<<endl;printf("\n");sum-=pmin->data.score;sum-=pmax->data.score;for(q=h,p=h->next;p!=NULL;q=p,p=p->next){if(p==pmin){q->next=p->next;p=q;}//刪除最低分結(jié)點if(p==pmax){q->next=p->next;p=q;}//刪除最高分結(jié)點}ave=sum/(PWRS-2);cout<<"該選手的最后得分是:"<<ave<<endl;return1;}程序運行結(jié)果如下:線性表的順序存儲結(jié)構(gòu)【問題描述】用順序表A記錄學生的信息,編寫程序:(1)將A表分解成兩個順序表B和C,使C表中含原A表中性別為男性的學生,B表中含原表中性別為女性的學生,要求學生的次序與原A表中相同。(2)分別求男生和女生的平均年齡【基本要求】建立學生信息的順序表A。顯示B表和C表中的相關信息。顯示計算結(jié)果?!緦嶒灢襟E;】(1)運行PC中的MicrosoftVisualC++6.0程序,(2)點擊“文件”→“新建”→對話窗口中“文件”→“c++SourceFile”→在“文件名”中輸入“X1.cpp”→在“位置”中選擇儲存路徑為“桌面”→“確定”,(3)輸入程序代碼,程序代碼如下:#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<iostream.h>#include<conio.h>#include<string.h>//包含庫函數(shù)strcpy的頭文件#defineNULL0structstudent//定義學生信息{charname[8];intsex;//0女:1:男intage;};typedefstructstudentSTD;intcreate(STD*m);//創(chuàng)建順序表intcalc(STD*m,STD*n,STD*r,float&Fage,float&Mage);//計算、數(shù)據(jù)處理voidprint(STD*m);constintMAX=100;//定義人數(shù)voidmain(){STDA[MAX];STDB[MAX];STDC[MAX];floatage1=0,age2=0;//age1男age2女create(A);printf("學生總表A記錄如下:\n");print(A);calc(A,B,C,age1,age2);printf("女生名冊B記錄如下:\n");print(B);printf("男生名冊C記錄如下:\n");print(C);}intcreate(STD*m){ intn; printf("請輸入班級總?cè)藬?shù):\n"); scanf("%d",&n); m[0].age=n;//置順序表長度 printf("請輸入學生信息:\n");for(inti=1;i<=n;i++){ printf("姓名:"); scanf("%s",&m[i].name); printf("性別0女1男:"); scanf("%d",&m[i].sex); printf("年齡:"); scanf("%d",&m[i].age); printf("\n");} return1;}intcalc(STD*m,STD*n,STD*r,float&Fage,float&Mage){inti,j=1,k=1;n[0].age=r[0].age=0;for(i=1;i<=m[0].age;i++){if(m[i].sex==0){strcpy(n[j].name,m[i].name);n[j].sex=m[i].sex;n[j].age=m[i].age;n[0].age++;Mage+=m[i].age;j++;}else{strcpy(r[k].name,m[i].name); r[k].sex=m[i].sex;r[k].age=m[i].age;r[0].age++;Fage+=m[i].age;k++;}}Mage=Mage/n[0].age;Fage=Fage/r[0].age;cout<<"女生的平均年齡是:"<<Mage<<"男生的平均年齡是:"<<Fage<<endl;return1;}voidprint(STD*m){for(inti=1;i<=m[0].age;i++){ printf("姓名:%3s,性別(0女1男):%d,年齡:%d\n",m[i].name,m[i].sex,m[i].age); }} 程序運行結(jié)果如下:實驗結(jié)束。實驗結(jié)論:線性表采用鏈式存儲(鏈表)時:以結(jié)構(gòu)變量存儲結(jié)點,動態(tài)生成結(jié)點,以指針鏈接結(jié)點,能有效利用存儲空間,插入刪除方便,但不能隨機訪問.單向鏈表可從某結(jié)點訪問到后繼結(jié)點。單向鏈表操作的關鍵步驟:建立鏈表的頭插法:指針變量p開辟單元,生成結(jié)點,指針變量q始終指向頭結(jié)點,操作為:p->next=q->next;q->next=p;尾插法:指針變量q始終指向尾結(jié)點,p指針開辟單元,生成結(jié)點:q->next=p;q=p;?插入:p所指向結(jié)點的后面插入新結(jié)點s所指結(jié)點s->next=p->next;p->next=s;?刪除:p,q指向相鄰結(jié)點,q所指結(jié)點是p所指結(jié)點的后繼,刪除q所指結(jié)點,p->next=q->next;?遍歷:p=p->next;實驗名稱:實驗二棧、列隊、遞歸程序設計2.1棧和隊列的基本操作【問題描述】編寫一個算法,輸出指定棧中的棧底元素,并使得原棧中的元素倒置?!净疽蟆浚?)正確理解棧的先進后出的操作特點,建立初始棧,通過相關操作顯示棧底元素。(2)程序中要體現(xiàn)出建棧過程和取出棧底元素后恢復棧的入棧過程,按堆棧的操作規(guī)則打印結(jié)果棧中的元素?!緦嶒灢襟E;】運行PC中的MicrosoftVisualC++6.0程序,點擊“文件”→“新建”→對話窗口中“文件”→“c++SourceFile”→在“文件名”中輸入“X1.cpp”→在“位置”中選擇儲存路徑為“桌面”→“確定”,輸入程序代碼,程序代碼如下:#include<stdio.h>#include<malloc.h>#defineMaxSize100typedefcharElemType;typedefstruct{ ElemTypedata[MaxSize]; inttop; //棧頂指針}SeqStack;//定義棧typedefstruct{ ElemTypeelem[MaxSize]; intfront,rear; //隊首和隊尾指針}SqQueue;//定義隊列//---初始棧函數(shù)voidInitStack(SeqStack*&s){ s=(SeqStack*)malloc(sizeof(SeqStack)); s->top=-1;}//----進棧函數(shù)intPush(SeqStack*&s,ElemTypee){ if(s->top==MaxSize-1) return0; s->top++; s->data[s->top]=e; return1;}//---顯示棧函數(shù)voidDispStack(SeqStack*s){ inti; for(i=s->top;i>=0;i--) printf("%c",s->data[i]); printf("\n");}//---顯示棧底元素voidDispBottomStack(SeqStack*s){ printf("%c",s->data[0]);//先進后出,棧底元素為第一個元素,即data[0] printf("\n");}//---判空棧函數(shù)intStackEmpty(SeqStack*s){ return(s->top==-1);}//---出棧函數(shù)intPop(SeqStack*&s,ElemType&e){ if(s->top==-1) return0; e=s->data[s->top]; s->top--; return1;}//---初始隊列函數(shù)voidInitQueue(SqQueue*&q){ q=(SqQueue*)malloc(sizeof(SqQueue)); q->front=q->rear=0;}//---入隊列函數(shù)intInQueue(SqQueue*&q,ElemTypee){ if((q->rear+1)%MaxSize==q->front)//隊滿 return0; q->rear=(q->rear+1)%MaxSize; q->elem[q->rear]=e; return1;}//---出隊列函數(shù)intOutQueue(SqQueue*&q,ElemType&e){ if(q->front==q->rear)//隊空 return0; q->front=(q->front+1)%MaxSize; e=q->elem[q->front]; return1;}//---判空隊列函數(shù)intQueueEmpty(SqQueue*q){ return(q->front==q->rear);}//-----主程序voidmain(){ ElemTypee; SeqStack*s; printf("(1)初始化棧s\n"); InitStack(s); printf("(2)棧為%s\n",(StackEmpty(s)?"空":"非空")); printf("(3)依次進棧元素a,b,c,d,e\n"); Push(s,'a');//入棧元素1 Push(s,'b');//入棧元素2 Push(s,'c');//入棧元素3 Push(s,'d');//入棧元素4 Push(s,'e');//入棧元素5 printf("(4)棧為%s\n",(StackEmpty(s)?"空":"非空")); printf("(5)從棧頂?shù)綏5自?");DispStack(s); printf("(6)棧底元素為:");DispBottomStack(s); printf("(7)出棧/入隊列序列:"); SqQueue*q; InitQueue(q); while(!StackEmpty(s)) { Pop(s,e);//出棧 printf("%c",e); InQueue(q,e);//入隊 } printf("\n"); printf("(8)棧為%s,",(StackEmpty(s)?"空":"非空")); printf("隊列為%s\n",(QueueEmpty(q)?"空":"非空")); printf("(9)出隊列/入棧序列:"); while(!QueueEmpty(q)) { OutQueue(q,e);//出隊 Push(s,e);//入棧 printf("%c",e); } printf("\n"); printf("(10)棧為%s,",(StackEmpty(s)?"空":"非空")); printf("隊列為%s\n",(QueueEmpty(q)?"空":"非空")); free(q);//釋放隊列 printf("(11)從棧頂?shù)綏5自?");DispStack(s); free(s);//釋放棧 }程序運行結(jié)果如下:2.2遞歸程序設計【問題描述】給定一個5位的十進制正整數(shù),用遞歸法分別編制程序:(1)要求從低位到高位逐次輸出各位數(shù)字。(2)要求從高位到低位逐次輸出各位數(shù)字?!净疽蟆勘容^題中兩種不同要求的遞歸程序設計和執(zhí)行過程差別。正確理解遞歸程序的執(zhí)行過程。顯示計算結(jié)果?!緦嶒灢襟E】(1)運行PC中的MicrosoftVisualC++6.0程序,點擊“文件”→“新建”→對話窗口中“文件”→“c++SourceFile”→在“文件名”中(2)輸入“X1.cpp”→在“位置”中選擇儲存路徑為“桌面”→“確定”,(3)輸入程序代碼程序代碼如下:#include<stdio.h>#include<math.h>voidout(intn,inti)//從高位到低位輸出函數(shù){intx,y;y=int(pow(10,i));if(n!=0){x=n/y;n=n-x*y;printf("%d",x);}elseprintf("0");i--;if(i>=0)out(n,i);}voidout1(intm,intj)//從低位到高位輸出函數(shù){intx,z;if(m!=0){x=int(m/10);z=m-x*10;m=x;printf("%d",z);}elseprintf("0");j--;if(j>=0)out1(m,j);}voidmain(){intm,n,o,x,i,j;printf("輸入需要排列的數(shù)字:\n");scanf("%d",&o);m=n=o;x=n;i=-1;while(x!=0){x=x/10;i++;}//求出i為十進制正整數(shù)位數(shù)j=i;printf("\n");printf("從高位到低位逐次輸出各位數(shù)字:");out(n,i);printf("\n");printf("從低位到高位逐次輸出各位數(shù)字:");out1(m,j);printf("\n");} 程序運行結(jié)果如下:實驗結(jié)論:棧和隊列是運算受限制的線性表 棧:后進先出(LIFO) 例:進棧b,c,d,e,f出??赡転閒,e,d,c,b;b,c,d,e,f;c,b,e,d,f???但不可能是e,d,f,b,c 隊列:先進先出(FIFO) 例:入隊1,2,3,4,5出隊1,2,3,4,5實驗名稱:實驗三二叉樹3.1二叉樹的順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)【問題描述】設一棵完全二叉樹用順序存儲方法存儲于數(shù)組tree中,編寫程序:根據(jù)數(shù)組tree,建立與該二叉樹對應的鏈式存儲結(jié)構(gòu)。對該二叉樹采用中序遍歷法顯示遍歷結(jié)果。【基本要求】在主函數(shù)中,通過鍵盤輸入建立設定的完全二叉樹的順序存儲結(jié)構(gòu)。設計子函數(shù),其功能為將順序結(jié)構(gòu)的二叉樹轉(zhuǎn)化為鏈式結(jié)構(gòu)。設計子函數(shù),其功能為對給定二叉樹進行中序遍歷,顯示遍歷結(jié)果。通過實例判斷算法和相應程序的正確性?!緦嶒灢襟E】運行PC中的MicrosoftVisualC++6.0程序,點擊“文件”→“新建”→對話窗口中“文件”→“c++SourceFile”→在“文件名”中輸入“X1.cpp”→在“位置”中選擇儲存路徑為“桌面”→“確定”,輸入程序代碼,程序代碼如下:#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#include<memory.h>#defineMaxSize10typedefstructnode{ chardata; structnode*left,*right;}NODE;voidCreab(char*tree,intn,inti,NODE*p);voidInorder(NODE*p);voidmain(){ NODE*p; chartree[MaxSize]; intn=1; inti=1; printf("請輸入完全二叉數(shù)的節(jié)點值(連續(xù)輸入字符,以回車結(jié)束輸入。):"); while((tree[n]=getchar())!='\n')n++; tree[n]='\n'; p=NULL; Creab(tree,n,i,p); Inorder(p);}voidCreab(char*tree,intn,inti,NODE*p){ if(i>=n)p=NULL; else { p=(NODE*)malloc(sizeof(NODE)); p->data=tree[i]; printf("%c",p->data); Creab(tree,n,2*i,p->left); Creab(tree,n,2*i+1,p->right); }}/*中序遍歷樹*/voidInorder(NODE*p){ if(p!=NULL){ Inorder(p->left); printf("%c",p->data); Inorder(p->right);}}程序運行結(jié)果如下:3.1二叉樹的遍歷【問題描述】設一棵二叉樹采用鏈式方式存儲,編寫一個前序遍歷該二叉樹的非遞歸算法?!净疽蟆空莆涨靶虮闅v二叉樹的步驟,針對任意一棵二叉樹能人工完成對二叉樹的前序遍歷。能掌握棧的工作特點,并能正確應用這一特點實現(xiàn)對二叉樹的遍歷?!緦嶒灢襟E】(1)運行PC中的MicrosoftVisualC++6.0程序,點擊“文件”→“新建”→對話窗口中“文件”→“c++SourceFile”→在“文件名”中(2)輸入“X1.cpp”→在“位置”中選擇儲存路徑為“桌面”→“確定”,(3)輸入程序代碼程序代碼如下:voidFirstOrderAccess1(BTree*header)
{
BTree*stack[MAX_NODE];
BTree*p;
inttop;
top=0;
p=header;
do
{
while(p!=NULL)
{
printf("BTree[%d]=%c“t",p->order,p->data);
if(p->rchild!=NULL)
stack[++top]=p->rchild;
p=p->lchild;
}
if(top!=0)
p=stack[top--];
}while((top>0)||(p!=NULL));
}實驗名稱:實驗四圖的存儲方式和應用4.1建立圖的鄰接矩陣【問題描述】根據(jù)圖中頂點和邊的信息編制程序建立圖的鄰接矩陣?!净疽蟆砍绦蛞幸欢ǖ耐ㄓ眯?。直接根據(jù)圖中每個結(jié)點與其他結(jié)點的關聯(lián)情況輸入相關信息,程序能自動形成鄰接矩陣【測試用例】【實現(xiàn)提示】對圖的頂點編號。在上圖中,以頂點1為例,因為頂點2,3,4與頂點1關聯(lián),可以輸入信息1234,然后設法求出與頂點1關聯(lián)的結(jié)點,從而求得鄰接矩陣中相應與頂點1的矩陣元素。2211553344實驗圖4-1設計程序代碼如下:#include<stdio.h>#defineMaxVertexNum5#defineMaxEdgeNum20#defineMaxValue1000typedefintVertexType;typedefVertexTypevexlist[MaxVertexNum];typedefintadjmatrix[MaxVertexNum][MaxVertexNum];voidCreatel(vexlistGv,adjmatrixGA,intn,inte){ inti,j,k,w; printf("輸入%d個頂點數(shù)據(jù)\n",n); for(i=0;i<n;i++)scanf("%d",&Gv[i]); for(i=0;i<n;i++) for(j=0;j<n;j++) { if(i==j)GA[i][j]=0; elseGA[i][j]=MaxValue; } Printf(“輸入一條邊的兩端點序號i和j及邊上的權(quán)w\n”); printf("輸入%d條無向帶權(quán)邊\n",e); for(k=1;k<=e;k++){ scanf("%d%d%d",&i,&j,&w); GA[i][j]=GA[j][i]=w; }}voidmain(){ vexlistvl; adjmatrixa; Createl(vl,a,5,8);}實驗名稱:實驗五查找5.1折半查找【問題描述】某班學生成績信息表中,每個學生的記錄已按平均成績由高到低排好序,后來發(fā)現(xiàn)某個學生的成績沒有登記到信息表中,使用折半查找法把該同學的記錄插入到信息表中,使信息表中的記錄仍按平均成績有序?!净拘畔ⅰ拷F(xiàn)有學生信息表,平均成績已有序。輸入插入學生的記錄信息。用折半查找找到插入位置,并插入記錄。【測試數(shù)據(jù)】自行設計?!緦嶒炋崾尽坑媒Y(jié)構(gòu)數(shù)組存儲成績信息表。對記錄中的平均成績進行折半查找。5.2二叉排序樹的建立【問題描述】參閱相關資料,閱讀建立二叉排序樹的程序?!净疽蟆空莆战⒍媾判驑涞脑砗头椒?。能跟蹤程序人工建立二叉排序樹。實驗報告內(nèi)容:實驗5.1折半查找設計程序代碼如下:#include<stdio.h>#include<string.h>#defineN5structstudent{ charname[10]; floatavg;}voidinsort(structstudents[],intn){ intlow,hight,mid,k; chary[10]; floatx; low=1; hight=n; strcpy(y,s[0].name); x=s[0].avg; while(low<=hight) { mid=(low+hight)/2; if(x>s[mid].avg) hight=mid-1; else low=mid+1; } for(k=0;k<low-1;k++){ strcpy(s[k].name,s[k+1].name); s[k].avg=s[k+1].avg; } printf("%d",low); strcpy(s[low-1].name,y); s[low-1].avg=x;}voidmain(){ Structstudenta[N]={{"caozh",96},{"cheng",95},{"zhao",93},{"wang",92},{"chen",91}}; structstudentstu[N]; inti; for(i=0;i<N;i++) stu[i+1]=a[i]; printf("初始%d位同學的信息表\n",MAX); printf("排名姓名平均分數(shù)\n"); for(i=1;i<=N;i++) printf("%d:%6s%3.2f\n",i,stu[i].name,stu[i].avg); printf("\n"); printf("\n"); printf("請輸入學生的姓名:"); scanf("%s",stu[0].name); printf("\n"); printf("請輸入平均成績:"); scanf("%f",&stu[0].avg); printf("\n"); insort(stu,N); printf("折半排序后同學的信息表\n",MAX); printf("排名姓名平均分數(shù)\n"); for(i=0;i<=N;i++) { printf("%d:%6s%3.2f\n",i+1,stu[i].name,stu[i].avg); } printf("\n");}程序運行結(jié)果如下:實驗5.2二叉排序樹的建立設計程序代碼如下:#include<stdio.h>#include<stdlib.h>#defineMAX5typedefstructBnode{ intkey; structBnode*left; structBnode*right;}Bnode;Bnode*btInsert(intx,Bnode*root);voidInorder(Bnode*root);voidmain(){ inti; inta[MAX]={60,40,70,20,80}; Bnode*root=NULL; printf("按關鍵字序列建立二叉排序樹\n"); for(i=0;i<MAX;i++)printf("%d",a[i]); printf("\n"); for(i=0;i<MAX;i++) root=btInsert(a[i],root); printf("中序遍歷的二叉排序樹\n"); Inorder(root); printf("\n");}Bnode*btInsert(intx,Bnode*root){ Bnode*p,*q; intflag=0; p=(Bnode*)malloc(sizeof(Bnode)); p->key=x; p->right=p->left=NULL; if(root==NULL) { root=p; returnp; } q=root; while(flag==0) { if(q->key>x) { if(q->left!=NULL) q=q->left; else { q->left=p; flag=1; } } else { if(q->right!=NULL) q=q->right; else { q->right=p; flag=1; } } } returnroot;}voidInorder(Bnode*root){if(root!=NULL){Inorder(root->left);printf("%d",root->key);Inorder(root->right);}}程序運行結(jié)果如下:實驗名稱:實驗六排序6.1泡沫法排序的改進算法【問題描述】某班學生成績信息表中每個學生的記錄包括各門功課的成績和平均成績,以及按平均成績的排名等信息,要求從鍵盤輸入每個學生各門功課的成績,計算出平均成績,按平均成績由高到低對信息的記錄重新排序,并定出每位同學的名次,打印排序后的信息表。【基本要求】建立學生成績信息表,計算平均成績。用泡沫法對平均成績排序,程序中要求一旦序列被排好序就結(jié)束相應排序操作。【測試數(shù)據(jù)】自行設計【實驗提示】用結(jié)構(gòu)數(shù)組存放學生成績信息表。在某趟泡沫中沒有發(fā)生元素間的交換則說明已排好序6.2堆排序【問題描述】閱讀篩選和建堆的程序,針對某一個待排序的序列,通過人工跟蹤程序的執(zhí)行,完成排序的全過程【基本要求】掌握建堆、篩選的基本原理和算法步驟。寫出主函數(shù),試運行堆排序的程序。掌握堆排序的算法程序,能針對實例按步驟人工完成建堆和排序的過程?!緶y試數(shù)據(jù)】自行設計?!緦嶒炋崾尽亢Y選是建堆的基本算法。把要排序序列看成一棵完全二叉樹,用循環(huán)方式從最后一個非葉結(jié)(設序號為k)開始,逐次對序號為k,k-1,…的結(jié)點,直至根結(jié)點調(diào)用篩選算法,完成建堆。不斷通過堆頂元素與堆中最后一個元素的交換并篩選,完成排序。實驗報告內(nèi)容:實驗6.1冒泡法排序的改進設計程序代碼如下:#include<stdio.h>#include<string.h>#defineMAX3structstudent{ charname[10]; floatcs; floatms; floates; floatavg;};voidsort(structstudents[],intn);voidsort(structstudents[],intn){ structstudenttemp; inti,j; for(i=1;i<n;i++)for(j=0;j<n-i;j++) if(s[j].avg<s[j+1].avg){ temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; }}voidmain(){ structstudentstu[MAX]; inti; printf("請輸入%d位同學的姓名和各科成績\n",MAX); for(i=0;i<MAX;i++) { printf("請輸入第%d位學生的姓名:",i+1); scanf("%s",stu[i].name); printf("\n"); printf("語文分數(shù):"); scanf("%f",&stu[i].cs); printf("\n"); printf("數(shù)學分數(shù):"); scanf("%f",&stu[i].ms); printf("\n"); printf("英語分數(shù):"); scanf("%f",&stu[i].es); printf("\n"); stu[i].avg=(stu[i].cs+stu[i].ms+stu[i].es)/3; } sort(stu,MAX); printf("排名姓名語文數(shù)學外語平均分數(shù)\n"); for(i=0;i<MAX;i++) { printf("%d:%6s%3.2f%3.2f%3.2f%3.2f\n",i+1,stu[i].name,stu[i].cs,stu[i].ms,stu[i].es,stu[i].avg); }}程序運行結(jié)果如下:實驗6.2堆排序設計程序代碼如下:#include<stdio.h>#defineN8structNODE{ intdate;};voidheapshift(structNODEa[],inti,intn){ structNODEtemp; intj; temp=a[i]; j=2*i; while(j<n) { if(j+1<n&&a[j].date>a[j+1].date) j++; if(temp.date>a[j].date) { a[i]=a[j]; i=j; j=2*i; } else break; } a[i]=temp;}voidheapsort(structNODEa[],intn){ inti; structNODEtemp; for(i=n/2;i>=1;i--) heapshift(a,i,n); for(i=n;i>1;i--) { temp=a[1]; a[1]=a[i]; a[i]=temp; heapshift(a,1,i-1); }}voidmain(){ structNODEb[N]={40,80,65,100,14,30,55,50}; structNODEa[N]; inti; printf("初始數(shù)據(jù)序列:"); for(i=0;i<N;i++){ a[i+1].date=b[i].date; } for(i=1;i<=N;i++){ printf("%d",a[i].date); } printf("\n"); printf("\n"); heapsort(a,N);printf("堆排序后的數(shù)據(jù)序列:"); for(i=1;i<=N;i++){ printf("%d",a[i].date); } printf("\n");}程序運行結(jié)果如下:國家開放大學(中央廣播電視大學)《國家開放大學學習指南》課程教學大綱第一部分大綱說明一、課程性質(zhì)與任務《國家開放大學學習指南》是國家開放大學(中央廣播電視大學)在本、專、一村一所有專業(yè)的一年級第一學期開設的、起到基礎導學作用的一門統(tǒng)設必修課。課程任務是:以完成學習任務的過程為導向,從學習者如何完成國家開放大學規(guī)定的專業(yè)學習任務的角度,讓學習者學會如何完成一門課程的學習、一個專業(yè)的學習,同時描述國家開放大學基本的學習方式,說明國家開放大學的學習環(huán)境,解釋國家開放大學學習平臺上基本術語的涵義,使學生能使用學習平臺的基本工具輔助完成學習活動,并且了解國家開放大學學生相關事務與管理規(guī)定。使學生初步具備利用現(xiàn)代遠程技術在國家開放大學進行學習的能力。二、先修課要求無三、課程的教學要求理解國家開放大學課程、專業(yè)平臺,熟練基本的遠程技術學習操作技能,掌握遠程學習的學習方法,較好利用國家開放大學資源和學習支持服務。四、課程的教學方法和教學形式建議1.本課程的特點是:網(wǎng)絡課程完善、課程內(nèi)容新、課程形式豐富、實踐性強、涉及面廣,因此建議通過網(wǎng)絡,在計算機教室(或計算機多媒體教室)進行授課、答疑和討論。講授與實踐統(tǒng)一考慮。2.為加強和落實動手能力的培養(yǎng),應保證上機機時不少于本教學大綱規(guī)定的學時。3.對于重要概念、關鍵技能和方法等問題可輔以網(wǎng)上答疑討論的形式。五、教學要求的層次課程的教學要求大體上分為三個層次:了解、理解和掌握。了解:能正確判別有關概念和方法。理解:能正確表達有關概念和方法的含義。掌握:在理解的基礎上加以靈活應用。第二部分教學媒體與教學過程建議一、課程教學總學時數(shù)、學分數(shù)課程教學總學時數(shù)為18學時,1學分。其中網(wǎng)絡課程為13學時,課堂練習和實驗為5學時。二、課程呈現(xiàn)方式課程以網(wǎng)絡課程為主,這是學生學習的主要媒體形式,因此課程呈現(xiàn)方式以視頻、動畫為主,配以必要的文字說明,每段視頻、動畫不超過8分鐘。視頻以學習發(fā)生的場景為主,也可以是學生訪談,體現(xiàn)一定交互性。課程內(nèi)容可以在手機、PAD、計算機、電視等多種終端上呈現(xiàn)。根據(jù)課程呈現(xiàn)方式,課程要做到只選取完成國家開放大學學習的必備知識,擯棄過多的理論知識,盡可能簡捷。實用、方便、模塊化設計,基于問題、案例形式呈現(xiàn)。概念清晰、條理分明、深入淺出、便于自學。在內(nèi)容上要緊密圍繞培養(yǎng)目標,突出重點、兼顧一般,反映當代最新技術及應用。三、主要教學媒體的使用與學時分配章節(jié)序號教學內(nèi)容網(wǎng)絡課程學時課堂練習和實驗學時1認識國家開放大學312完成專業(yè)學習313完成課程學習314網(wǎng)上學習操作技能215學生事務服務21合計135四、考核本課程采用上機操作的考核方式,100%國家開放大學考核。開放教育的學生應嚴格執(zhí)行該課程的有關考核文件。第三部分教學內(nèi)容和教學要求1、學習活動一:認識國家開放大學(3學時)【教學內(nèi)容】:任務一走進國家開放大學(一)基本介紹介紹國開的歷史,辦學模式,提供的學科門類等。(二)案例導入由國家開放大學的學生講述參加國家開放大學學習的體會與收獲(由學生講,把國家開放大學學習的特點和優(yōu)勢講出來,包括學習時間、學習方式等等。)(三)國家開放大學的學習環(huán)境1.在線學習平臺;2.教師(教師群體與角色);3.學習者(個人角色與學習小組創(chuàng)建);4.學習資源(文字教材、錄像、網(wǎng)絡課程、流媒體資源、全媒體數(shù)字教材、小課件等);5.學習活動(網(wǎng)上教學活動、論壇討論);6.支持服務(獲得途徑:面對面的服務、電話、短信、電子郵件、網(wǎng)上論壇、在線即時答疑系統(tǒng));(四)拓展內(nèi)容報名渠道,獲得學習資源,買書,有困難時候如何尋求幫助。任務二如何有效學習(一)學習策略1.紙質(zhì)學習和電子學習的認知策略;2.制定計劃、自我監(jiān)控與調(diào)節(jié);3.學習時間管理、學習資源與環(huán)境利用、互動空間與手段(QQ群、課程論壇、學習空間)、學業(yè)求助策略。(二)學習方式1.自學(自己閱讀學習資源,做測試與練習);2.聽講(聽看講課視頻或音頻、面授);3.體驗;4.探究;5.問題解決;任務三學前準備了解并完成一些學前準備工作,從學習方法、知識儲備、計算機技能、學習環(huán)境等多方面了解自身的情況,為日后學習奠定基礎。【教學要求】:了解:國家開放大學的基本介紹,教學環(huán)境;掌握:國家開放大
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿(mào)大學《微積分》2023-2024學年第一學期期末試卷
- 廣東生態(tài)工程職業(yè)學院《體育科學研究與方法》2023-2024學年第一學期期末試卷
- 廣東嶺南職業(yè)技術學院《羽毛球IV》2023-2024學年第一學期期末試卷
- 十二月職位心得總結(jié)
- 【紅對勾】2020-2021學年高中物理(人教版)必修二6-3-萬有引力定律-課后鞏固提高
- 【名師一號】2022屆高三歷史一輪復習調(diào)研試題:選修一-歷史上重大改革回眸-2
- 【-學案導學設計】2020-2021學年高中人教B版數(shù)學必修四課時作業(yè):第三章-章末檢測(B)
- 【金版學案】2014-2021學年人教版高中英語必修三練習:Unit-2-第四學時
- 安徽省亳州市渦陽縣大寺學校2024-2025學年第一學期七年級期末考試語文試卷(含答案)
- 初一美術教師工作總結(jié):尋找創(chuàng)意和啟發(fā)學生的天賦
- 2024年中國陶瓷碗盆市場調(diào)查研究報告
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應用實踐指導材料之22:“8運行-8.1運行策劃和控制”(雷澤佳編制-2025B0)
- 2024-2025學年一年級數(shù)學上冊期末樂考非紙筆測試題(二 )(蘇教版2024秋)
- 2024年中國心力衰竭診斷和治療指南2024版
- 2024秋期國家開放大學專科《高等數(shù)學基礎》一平臺在線形考(形考任務一至四)試題及答案
- HSE應急預案(完整版)
- 《小學五年級期末家長會》課件模板(五套)
- 2024-2024年江蘇省普通高中學業(yè)水平測試物理試卷(含答案)
- 貴州省黔南布依族苗族自治州2023-2024學年九年級上學期期末數(shù)學試題(含答案)
- 如何高效學習學習通超星課后章節(jié)答案期末考試題庫2023年
- HCCDP 云遷移認證理論題庫
評論
0/150
提交評論