




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)一 順序表操作實(shí)現(xiàn)實(shí)驗(yàn)日期: 2017 年 3 月 6 日 實(shí)驗(yàn)?zāi)康募耙?. 熟練掌握線性表的基本操作在順序存儲(chǔ)上的實(shí)現(xiàn);2. 以線性表的各種操作(建立、插入、刪除、遍歷等)的實(shí)現(xiàn)為重點(diǎn);3. 掌握線性表的順序存儲(chǔ)結(jié)構(gòu)的定義和基本操作的實(shí)現(xiàn);4. 通過本實(shí)驗(yàn)加深對(duì)C語言的使用(特別是函數(shù)調(diào)用的參數(shù)傳遞、指針類型的應(yīng)用)。實(shí)驗(yàn)容已知程序文件seqlist.cpp已給出學(xué)生身高信息順序表的類型定義和基本運(yùn)算函數(shù)定義。(1)順序表類型定義typedef struct int xh; /*學(xué)號(hào)*/ float sg; /*身高*/ int sex; /*性別,0為男生,1為女生*/ dataty
2、pe;typedef struct datatype dataMAX; /*存放順序表元素的數(shù)組*/ int last; /*表示data中實(shí)際存放元素個(gè)數(shù)*/Seqlist; (2)基本運(yùn)算函數(shù)原型void initList(Seqlist *lp);/*置一個(gè)空表*/void createList(Seqlist *lp);/*建一個(gè)學(xué)生順序表*/void sort_xh(Seqlist *lp);/*按學(xué)號(hào)排序*/void Error(char *s);/*自定義錯(cuò)誤處理函數(shù)*/void pntList(Seqlist *lp);/*輸出學(xué)生表*/void save(Seqlist *l
3、p,char strname);/*保存學(xué)生順序表到指定文件*/任務(wù)一創(chuàng)建程序文件seqlist.cpp,其代碼如下所示,理解順序表類型Seqlist和基本運(yùn)算函數(shù)后回答下列問題。/*seqlist.cpp程序文件代碼*/#include <stdio.h>#include <stdlib.h>#define MAX 50typedef struct int xh; /*學(xué)號(hào)*/ float sg; /*身高*/ int sex; /*性別,0為男生,1為女生*/ datatype;typedef struct datatype dataMAX; /*存放順序表元素的數(shù)
4、組*/ int last; /*表示data中實(shí)際存放元素個(gè)數(shù)*/Seqlist; void initList(Seqlist *lp);/*置一個(gè)空表*/void createList(Seqlist *lp);/*建一個(gè)學(xué)生順序表*/void sort_xh(Seqlist *lp);/*按學(xué)號(hào)排序*/void Error(char *s);/*自定義錯(cuò)誤處理函數(shù)*/void pntList(Seqlist *lp);/*輸出學(xué)生表*/void save(Seqlist *lp,char strname);/*保存學(xué)生順序表到指定文件*/ /*置一個(gè)空表*/void initList(Se
5、qlist *lp) lp->last=0; /*建一個(gè)學(xué)生順序表*/void createList(Seqlist *lp)FILE *fp;int xh ,sex;float sg; if(fp=fopen("records.txt","r")=NULL)Error("can not open file !");while(!feof(fp)fscanf(fp,"%d%f%d",&xh,&sg,&sex);lp->datalp->last.xh=xh;lp->da
6、talp->last.sg=sg;lp->datalp->last.sex=sex;lp->last+;fclose(fp);/*按學(xué)號(hào)排升序*/void sort_xh(Seqlist *lp)int i,j,k;datatype st;for(i=0;i<lp->last-1;i+)k=i; for(j=i+1;j<lp->last;j+) if(lp->dataj.xh<lp->datak.xh ) k=j; if(k!=i) st=lp->datak; lp->datak=lp->datai; lp-&
7、gt;datai=st;/*自定義錯(cuò)誤處理函數(shù)*/void Error(char *s) printf("n %s", s); exit(1); /*返回OS,該函數(shù)定義在stdlib.h中*/*輸出學(xué)生順序表*/void pntList(Seqlist *lp) int i; for(i=0;i<lp->last ;i+) printf("%2d: %.2f %dn",lp->data i.xh,lp->data i.sg,lp->datai.sex);/*保存學(xué)生順序表到指定文件*/void save(Seqlist *
8、lp,char strname)FILE *fp;int i;if(fp=fopen(strname,"w")=NULL) Error("can not open file !");for(i=0;i<lp->last ;i+)fprintf(fp,"%2d %5.2f %2dn",lp->datai.xh,lp->datai.sg,lp->datai.sex);fclose(fp);請(qǐng)回答下列問題:(1)由順序表類型定義可知,該順序表類型名為 Seqlist ,其中存放的元素為學(xué)生信息,學(xué)生信息定義的類
9、型名為 datatype ,包含 xh 、 sg 、 sex 三個(gè)成員(寫出成員變量名),學(xué)生信息存儲(chǔ)于 data 數(shù)組,順序表的表長變量為 MAX 。(2)seqlist.cpp程序編譯連接通過后能執(zhí)行嗎?為什么?其代碼的整體結(jié)構(gòu)有哪幾個(gè)組成部分?答:不能。因?yàn)闆]有主函數(shù),程序無法運(yùn)行。代碼的整體結(jié)構(gòu)的組成部分有:typedef struct datatype;typedef struct Seqlist;void initList(Seqlist *lp);/*置一個(gè)空表*/void sort_xh(Seqlist *lp);/*按學(xué)號(hào)排序*/void createList(Seqlist
10、 *lp);/*建一個(gè)學(xué)生順序表*/void Error(char *s);/*自定義錯(cuò)誤處理函數(shù)*/void pntList(Seqlist *lp);/*輸出學(xué)生表*/void save(Seqlist *lp,char strname);/*保存學(xué)生順序表到指定文件*/(3)回答下列問題a)initList函數(shù)的形參變量lp存放什么值?順序表置為空表的實(shí)質(zhì)是做什么操作?答:學(xué)生信息:學(xué)號(hào),身高,性別。順序表的初始化即構(gòu)造一個(gè)空表,這對(duì)表是一個(gè)加工型的運(yùn)算,因此,將L設(shè)為指針參數(shù),首先動(dòng)態(tài)分配存儲(chǔ)空間,然后,將表中l(wèi)ast指針置為0,表示表中沒有數(shù)據(jù)元素。b)在建立順序表的createLi
11、st函數(shù)中,順序表的數(shù)據(jù)元素來自何處?根據(jù)已提供的數(shù)據(jù)建完的順序表表長是多少?答:順序表的數(shù)據(jù)元素來自文件,順序表表長是:last。c)sort_xh排序函數(shù)采用了什么排序方法?請(qǐng)列舉5個(gè)學(xué)號(hào)值寫出每趟(5個(gè)需排4趟)排序后的結(jié)果答:選擇排序。第一次排序 1,3,6,4,5第二次排序1,3,6,4,5第三次排序1,3,4,6,5第四次排序1,3,4,5,6d)列舉一個(gè)調(diào)用自定義錯(cuò)誤處理函數(shù)Error的調(diào)用語句,并給出屏幕輸出結(jié)果 can not open file!e)save函數(shù)中的形參數(shù)組strname中存放什么?答:存放的是學(xué)生的學(xué)生的信息:學(xué)號(hào),身高,性別。任務(wù)二1題目要求創(chuàng)建一個(gè)新的
12、程序文件sy11.cpp,請(qǐng)調(diào)用seqlist.cpp提供的功能函數(shù)(以#include “seqlist.cpp” 方式導(dǎo)入函數(shù)庫)及自定義的函數(shù)完成以下操作:l 創(chuàng)建一個(gè)包含學(xué)生學(xué)號(hào)、身高、性別的學(xué)生身高信息表并輸出到屏幕,學(xué)生信息從records.txt文件讀?。籰 對(duì)已建立的學(xué)生身高信息表按學(xué)號(hào)從小到大排序,并把結(jié)果寫入到數(shù)據(jù)文件中(result.txt);l 從鍵盤輸入一位學(xué)生的相關(guān)信息插入到已排序的學(xué)生身高信息表中后仍然保持學(xué)號(hào)的有序性;l 對(duì)插入后的學(xué)生身高信息表進(jìn)行倒置,結(jié)果輸出在屏幕;l 從鍵盤輸入一個(gè)身高值,統(tǒng)計(jì)與該身高相同的學(xué)生個(gè)數(shù)并輸出在屏幕;在程序文件sy1.cpp需
13、再定義以下三個(gè)功能函數(shù):(1)void insertX(Seqlist *lp, datatype x)功能:在學(xué)號(hào)從小到大排序的學(xué)生表中插入值為x的學(xué)生仍保持學(xué)號(hào)的有序性(2)void reverse(Seqlist *lp)功能:對(duì)lp指向的順序表進(jìn)行倒置操作(3)int count(Seqlist *lp,float y)功能:統(tǒng)計(jì)學(xué)生表中身高值為y的學(xué)生數(shù)并返回2請(qǐng)根據(jù)題目功能要求及程序中的注釋填空完整sy1.cpp代碼/*sy11.cpp程序文件代碼*/#include "seqlist.cpp" /導(dǎo)入自定義類型及函數(shù)所在的文件seqlist.cpp,該文件與s
14、y11.cpp存于同一目錄中void insertX(Seqlist *lp, datatype x);void reverse(Seqlist *lp);int count(Seqlist *lp,float y);void main() Seqlist stu; /定義stu為學(xué)生順序表變量 datatype x; /x為存儲(chǔ)一個(gè)學(xué)生信息的變量 int c; char strname20; /strname為存儲(chǔ)文件名的數(shù)組 /*創(chuàng)建一個(gè)包含學(xué)生學(xué)號(hào)、身高、性別的學(xué)生身高信息表stu并輸出到屏幕,學(xué)生信息從records.txt文件讀取*/ initList(&stu) /調(diào)用函數(shù)
15、initList初始化順序表stu createList(&stu) / 調(diào)用函數(shù)createList創(chuàng)建學(xué)生表stu printf("nsource list:n"); pntList(&stu) /調(diào)用函數(shù)pntList打印學(xué)生表stu getchar(); /在執(zhí)行程序能起到暫定的作用,按任意鍵繼續(xù) /*對(duì)已建立的學(xué)生身高信息表按學(xué)號(hào)從小到大排序,并把結(jié)果寫入到數(shù)據(jù)文件中(result.txt)*/ sort_xh(stu) /調(diào)用函數(shù)sort_xh 對(duì)學(xué)生表stu按學(xué)號(hào)從小到大排序 printf("nInput new file name
16、to save: "); scanf(“”) /鍵盤輸入文件名字符串存于strname字符數(shù)組中 save(&stu,strname) /調(diào)用函數(shù)save把排序后的順序表stu存于文件中,文件名在strname數(shù)組中 /*從鍵盤輸入一位學(xué)生的相關(guān)信息插入到已排序的學(xué)生身高信息表中后仍然保持學(xué)號(hào)的有序性;*/ printf("nInput a student information: n"); scanf("%d%f%d",&x.xh,&x.sg,&x.sex); insertX(&stu,x) /插入 p
17、rintf("nlist after insert:n"); pntList(&stu); getchar(); /*對(duì)插入后的學(xué)生身高信息表進(jìn)行倒置,結(jié)果輸出在屏幕;*/ reserve(&stu) /倒置順序表 printf("nlist after reverse:n"); pntList(&stu); getchar(); /*從鍵盤輸入一個(gè)身高值,統(tǒng)計(jì)與該身高相同的學(xué)生個(gè)數(shù)并輸出在屏幕*/ printf("nInput a student height: n"); scanf("%f&quo
18、t;,&x.sg); c=count(&stu,y) /統(tǒng)計(jì)相同身高的學(xué)生數(shù)存于c中 printf("nThe same height :%dn",c); getchar(); /*在學(xué)號(hào)從小到大排序的學(xué)生表中插入值為x的學(xué)生仍保持學(xué)號(hào)的有序性*/ void insertX(Seqlist *lp,datatype x) int i,j; if(lp->last>=MAX) Error("list is full"); /在學(xué)號(hào)升序的順序表中找插入位置后,插入x并使表長增1elsefor(i=0;i<lp->last;i+)if(lp->last>x)break; for(j=lp->last-1;j>=i;j-) /*從后往前元素后移*/ lp-> strname j+1=lp-> strname j; lp-> strname i=x; lp->last+; /*插入并表長增1*/*對(duì)lp指向的順序表進(jìn)行倒置操作*/void reverse(Seqlist *lp) int i,j; datatype temp; /通過前后數(shù)據(jù)元素交換的方式實(shí)現(xiàn)倒置 for (i = 0; j = lp-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄉(xiāng)鎮(zhèn)林業(yè)站印章管理制度
- 可轉(zhuǎn)債公司內(nèi)部管理制度
- 旅游演藝演員管理制度
- 動(dòng)漫公司設(shè)計(jì)部管理制度
- 為啥要建立安全管理制度
- 公司試行封閉化管理制度
- 辦公室調(diào)訓(xùn)人員管理制度
- 地板磚公司銷售管理制度
- 幼兒園教育進(jìn)度管理制度
- 培訓(xùn)教育及考核管理制度
- 廣東省茂名高州市2024-2025學(xué)年下學(xué)期期中考試七年級(jí)生物試題 七年級(jí) 生物 期中考試卷
- 社區(qū)工作者心理健康培訓(xùn)大綱
- 《分子動(dòng)力學(xué)模擬》課件
- 新生兒重癥監(jiān)護(hù)病房捐贈(zèng)人乳應(yīng)用與管理專家共識(shí)(2025)解讀
- 皮膚科進(jìn)修心得分享
- 2025年上半年廣東省廣州市白云區(qū)委宣傳部政府雇員招聘5人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解
- 項(xiàng)目經(jīng)理講安全課件
- 《休閑農(nóng)業(yè)》課件 項(xiàng)目二 休閑農(nóng)業(yè)分類及模式分析
- 2025年安徽省省情試題及答案
- 2025年消控室考核試題及答案
- 江西省吉安市遂川縣2024-2025學(xué)年數(shù)學(xué)三下期末達(dá)標(biāo)檢測(cè)試題含解析
評(píng)論
0/150
提交評(píng)論