C++程序設(shè)計課程設(shè)計指導(dǎo)書_第1頁
C++程序設(shè)計課程設(shè)計指導(dǎo)書_第2頁
C++程序設(shè)計課程設(shè)計指導(dǎo)書_第3頁
C++程序設(shè)計課程設(shè)計指導(dǎo)書_第4頁
C++程序設(shè)計課程設(shè)計指導(dǎo)書_第5頁
已閱讀5頁,還剩120頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C++程序設(shè)計課程設(shè)計指導(dǎo)書

計算機工程系

-o。九年二月

-IX.-a-

刖百

“C++程序設(shè)計”是計算機科學(xué)與技術(shù)、通信工程等專業(yè)最重要的一門專業(yè)

基礎(chǔ)課程,涉及知識點多,教、學(xué)難度非常大,往往費了大量時間而達(dá)不到預(yù)期

效果。俗語說:學(xué)習(xí)的最好方法是實踐。

本課程設(shè)計正是基于此目的,力求為學(xué)生提供一個理論聯(lián)系實際的機會,通

過布置一定難度的課題,要求學(xué)生獨立完成。通過實踐,建立課程設(shè)計的整體思

想,鍛煉編寫程序、調(diào)試程序的能力,學(xué)習(xí)文檔編寫規(guī)范,培養(yǎng)獨立學(xué)習(xí)、吸取

他人經(jīng)驗、探索前沿知識的習(xí)慣,樹立團隊協(xié)作精神。

指導(dǎo)書中的綜合選題可以分成幾個小項目供學(xué)生分工合作,其中給出的代碼

已經(jīng)有意識地予以變化或刪減,在一些關(guān)鍵之處有意設(shè)置了一點錯誤,直接復(fù)制

一般難以調(diào)試通過,或難以達(dá)到預(yù)期的目的。同學(xué)們應(yīng)該加以分析,補充完整,

并盡可能地增加功能。同學(xué)們應(yīng)注意小組成員之間共同研究技術(shù)難題,培養(yǎng)團隊

協(xié)作精神。

書中給出的實例概念清楚,體系完整,內(nèi)容豐富,采用循序漸進的方式,提

高學(xué)生實際動手能力,完成“知識+實踐=技能”的整個學(xué)習(xí)過程。

課件之家精心整理資料-歡迎你的欣賞

目錄

前言...............................................................I

選題一幻方.............................................................1

一、奇數(shù)階幻方的制作........................................................1

二、偶數(shù)階幻方的制作........................................................3

三、設(shè)計要求.................................................................6

選題二矩陣操作........................................................7

一、矩陣翻轉(zhuǎn).................................................................7

二、矩陣卷動.................................................................7

三、矩陣旋轉(zhuǎn).................................................................8

四、設(shè)計要求.................................................................9

選題三漢諾塔..........................................................10

一、基本涵義................................................................10

二、常規(guī)解法................................................................10

三、設(shè)計要求................................................................11

選題四八皇后..........................................................12

一、基本涵義................................................................12

二、設(shè)計要求................................................................12

選題五成績管理.......................................................14

一、設(shè)計要求................................................................14

二、參考代碼................................................................14

選題六H編碼.........................................................29

一、二元H碼...............................................................29

二、m元H碼...............................................................30

選題七數(shù)據(jù)排序.......................................................33

一、基本概念...............................................................33

二、插入排序...............................................................33

三、交換排序...............................................................35

四、選擇排序...............................................................37

五、歸并排序...............................................................39

六、設(shè)計要求...............................................................40

選題八數(shù)據(jù)查找.......................................................42

一、基本概念...............................................................42

二、順序查找...............................................................42

三、二分查找...............................................................44

四、索引查找...............................................................46

五、散列查找...............................................................49

選題九最短路徑.......................................................60

一、圖概念..................................................................60

二、圖的表示方法...........................................................64

三、帶權(quán)圖的最短路徑.......................................................66

四、設(shè)計要求...............................................................69

課件之家精心整理資料-歡迎你的欣賞

選題十表達(dá)式求值.................................................70

一、基本概念...............................................................70

二、棧的存儲和運算.........................................................70

三、表達(dá)式求值.............................................................73

四、設(shè)計要求...............................................................76

五、參考代碼(不能直接運行)...............................................76

附錄A課程設(shè)計操作規(guī)程............................................81

一、課程設(shè)計的目的.........................................................81

二、實踐環(huán)境與教學(xué)要求.....................................................81

三、實施原則、方案與步驟...................................................81

四、課程設(shè)計報告要求.......................................................82

五、成績評定規(guī)則...........................................................83

六、說明....................................................................83

附錄BC/C++常用函數(shù)..............................................85

B.1緩沖區(qū)操作函數(shù).........................................................85

B.2字符分類函數(shù)..........................................................86

B.3數(shù)據(jù)轉(zhuǎn)換函數(shù)...........................................................88

B.4目錄控制函數(shù)...........................................................91

B.5文件處理函數(shù)...........................................................92

B.6數(shù)學(xué)函數(shù)...............................................................96

B.7輸入和輸出函數(shù)........................................................101

B.8進程控制函數(shù)..........................................................116

B.9查找和分類函數(shù)........................................................116

B.10字符串操作函數(shù)......................................................117

課件之家精心整理資料-歡迎你的欣賞

選題一幻方

所謂幻方,就是一個n行n列的正方形,共有r?個格子,將1、2、3.............「這些數(shù)

字放到這些格子里,使其每行的和、每列的和及兩條對角線的和都是一個相同的數(shù)S,S稱

為幻和。當(dāng)n為奇數(shù)時,稱為奇數(shù)階幻方,當(dāng)n為偶數(shù)時,稱為偶階幻方。當(dāng)n可被4整除

時,稱方為雙偶幻方。當(dāng)n不可被4整除時,稱為單偶幻方。

多少年來,許多數(shù)學(xué)家都在研究這個古老而有趣的問題,試圖找出一般的解法,但?般

都是針對當(dāng)n是奇數(shù)和n是4的倍數(shù)的情況。

當(dāng)n是奇數(shù)時的算法:

首先,將1放在第一行中間一個格子里。

其次,依次將后一個數(shù)放到前一個數(shù)的右上格,如:將2放到1的右上格。將3放到2

的右上格等等。可能出現(xiàn)下面的情況。

①若右上格從上面超出,則將后一數(shù)放到與右上格同列的最后一行。

②若右上格從右面超出,則將后一數(shù)放到與右上格同行的最后一列。

③若右上格既從右面超出又從上面超出,則將后?數(shù)放到前?數(shù)的下面。

④若右上格已被數(shù)字填充,則將后一數(shù)放到前一數(shù)的下面

依以上法則,你可以很快的寫出奇數(shù)階幻方!當(dāng)然,這中寫法只是其中一個答案,而不

是唯一答案。

一、奇數(shù)階幻方的制作

1.連續(xù)擺數(shù)法

例:一個5x5格子,由最上面一行中間一格開始,依次填1,2,3等等。下一個格子填在

左上位置。但是要注意兩點:

>出了幻方的范圍,右邊接到左邊,下邊接到上邊。

>某一格右上已經(jīng)有了數(shù)字,改填在這個格子的下面一格,然后延續(xù)前面的方法。

17241815

23571416

46132022

101219213

11182529

也不一定按照斜卜.方寫字,可以走馬步,或其他方法。下面用的是馬步,得到的是泛對

角幻方。

課件之家精心整理資料-歡迎你的欣賞

81711524

11259182

193122110

22620413

51423716

哪些“步子”是可行的,是需要注意的?個問題。

2.階梯法

例:以5階為例。

第一步:畫一個9x9的方格。如下斜著填數(shù)字。注意中間的5x5格子才是要作的幻方

的位置,已經(jīng)涂成了黃色。

第二步:黃色范圍以外的數(shù)字,平移到黃色格子中沒有數(shù)字的位置。

去掉外圍的格子,就得到所要作的幻方。

課件之家精心整理資料-歡迎你的欣賞

31692215

20821142

72513119

24125186

114171023

二、偶數(shù)階幻方的制作

偶數(shù)階幻方的制作比較復(fù)雜,下面介紹幾個方法。

1.對稱法,適用于雙偶數(shù)階幻方

例:以8階幻方為例。

第一步:在左上4x4格子中,取一半的格子,要求每行每列都取到2個。如下圖黃色

格子所示。

第三步:從左上角開始,從左到右從上到下,從1開始填數(shù)。不過只填沒有選中的格子

(即沒有涂黃色的格子)

課件之家精心整理資料-歡迎你的欣賞

2457

9111416

17192224

26282931

31363739

41434648

49515456

58606163

第四步:從右下角開始從右到左從下到上在選中的格子里填進剛才沒有填的數(shù)字。

642624559757

955115352145016

1747194544224224

4026382829353133

3234303637273925

4123432120461848

4915511312541056

858660613631

制作成功。

這個方法可以產(chǎn)生不同的雙偶數(shù)階幻方。

思考:能否算出這個方法可以產(chǎn)生多少個8階幻方?

2.斯特雷奇法,適用于單偶數(shù)幻方

例:設(shè)階數(shù)n=2(2m+l)=6,m=l.

第一步:把方陣分為4個小方陣,位置依次為A左上,B右下,C右上,D左下。

用連續(xù)擺數(shù)法,把1一a”放在A中成第一個幻方;把aA2+l?2aA2放在B中成第二

個幻方。把2a人2+1?3a八2放在C中成第三個幻方。把3aA2+1?4a八2放在D中成第四個幻

課件之家精心整理資料-歡迎你的欣賞

816261924

357212325

492222720

352833171015

303234121416

313629131822

第三步:在C的各行右起取m—l個方格,與B中相應(yīng)位置對換。此例m-l=O,無需交

換。

3516261924

3327212325

3192222720

82833171015

30534121416

43629131822

3.LUX方法這是劍橋大學(xué)康韋教授發(fā)明的方法

例:設(shè)階數(shù)n=2(2m+1)=10,m=2。

第一步:任取一個2m+l階幻方,例如5階幻方。如下。

12316421

151471811

24171392

20819126

53102225

第二步:在上面的m+1行(此處為3行)的每個格子里填入?個字母L:接下去一行填

字母U,余下m-l行填字母X。最后把中間的一個L與它下面的一個U交換一下。

1L23L16L4L21L

15L14L7L18L11L

24L17L13U9L2L

20U8U19L12U6U

5X3X10X22X25X

第三步:作一個10x10方格,設(shè)想為每2x2為一個單位,每個單位相應(yīng)于上面一個格子。

課件之家精心整理資料-歡迎你的欣賞

對應(yīng)于5階幻方中數(shù)字1的單位填1,2,3,4。對應(yīng)于5階幻方中數(shù)字2的填5,6,7,8。

等等。但是標(biāo)有字母L的按照“右上一左下一右下一左上”次序;標(biāo)有字母U的按照“左上

一左下一右下一右上”次序;標(biāo)有字母X的按照“左上一右下一左下一右上”次序。

419289646116138481

239091626314158283

60575653282572694441

58595455262770714243

969368654952363385

949566675051343567

77802932767345482124

78793031747546472223

17209123740858897100

19181110393887869998

當(dāng)然,這個方法也產(chǎn)生很多幻方,并不唯一。

三、設(shè)計要求

編寫代碼,實現(xiàn)奇、偶數(shù)幻方的制作。運行程序后,出現(xiàn)下面的參考界面:

幻方制作

1.奇數(shù)階幻方

2.偶數(shù)階幻方

請選擇(1或2,0:退出):

選擇一個菜單后,要求輸入幻方的階數(shù)n。n的取值范圍為3?10。輸入n后,首先判斷

是否存在對應(yīng)階的幻方,如果存在,則顯示幻方制作效果。

課件之家精心整理資料-歡迎你的欣賞

選題二矩陣操作

一、矩陣翻轉(zhuǎn)

沿某中心軸翻轉(zhuǎn),或垂直,或水平翻轉(zhuǎn)。翻轉(zhuǎn)的實質(zhì)是,矩陣的每行(或每列)元素進

行倒序排放。

01230123

1

121'412124121

65:923239;56

38:734347;83

4556:67787867:5645

二、矩陣卷動

可以左右、上下卷動。如下圖:

01230123

1241224121

6592359236

3873487343

4556677856677845

矩陣卷動涉及二個問題:

(1)卷動方向,或左右卷動,或上下卷動。

(2)卷動幅度T,如上下卷動行數(shù),左右卷動列數(shù)。

卷動的實質(zhì)是將某行或某列元素循環(huán)移位。上下卷動時,是將每列元素循環(huán)移位,左右

卷動時是將每行元素循環(huán)移位,卷動方向決定是左移還是右移。

一維數(shù)組的循環(huán)移位問題:

如,已知inttemp[10],將其循環(huán)右移一位。

顯然,移位后,

課件之家精心整理資料-歡迎你的欣賞

temp[8]?temp[O]

依次存入

temp[9]?temp[l]

而原來的temp[9]則返回數(shù)組起始部位,存入tcmp[O]。

那么,循環(huán)右移W位呢?循環(huán)左移W位呢?

了解了一維數(shù)組循環(huán)移位問題后,顯然,矩陣卷動無非是多個一維數(shù)組循環(huán)移位,只要

在外層加個大循環(huán)就解決了。

三、矩陣旋轉(zhuǎn)

矩陣旋轉(zhuǎn)(繞中心點)涉及二個方面:

(1)旋轉(zhuǎn)方向,順時針還是逆時針。

(2)旋轉(zhuǎn)角度,如90°、180°、270°、360°等。

分析:

(1)考慮旋轉(zhuǎn)方向、角度

(2)此處僅考慮方陣情況,即矩陣行、列數(shù)相同。

(3)考慮是奇次方陣還是偶次方陣。

(4)旋轉(zhuǎn)時,實質(zhì)是數(shù)組元素的重新組合,對應(yīng)交換元素值。

(5)設(shè)方陣有K圈,每圈操作過程相似。

因此,問題的關(guān)鍵是某圈元素的旋轉(zhuǎn)、交換。

如下圖。

課件之家精心整理資料-歡迎你的欣賞

考慮幾種特殊情況,如90°,180°,270°,360°等。

(1)其它角度都是90°的整數(shù)倍。因此,設(shè)計時僅需要考慮90°情況,其它情況只需

重復(fù)操作若干次即可。以順時針旋轉(zhuǎn)為例,如需旋轉(zhuǎn)180°,只需將旋轉(zhuǎn)90°操作連續(xù)

執(zhí)行兩次即能實現(xiàn)。

(2)逆時針旋轉(zhuǎn)可以看作為“過度”旋轉(zhuǎn),如逆時針90°,可認(rèn)為是順時針旋轉(zhuǎn)270°。

當(dāng)然,也可設(shè)計新的交換規(guī)則。

四、設(shè)計要求

編寫代碼,實現(xiàn)矩陣的翻轉(zhuǎn)、卷動和旋轉(zhuǎn)。運行程序后,隨機生成一個元素為三位正整

數(shù)的5X5矩陣,并顯現(xiàn)下面的參考界面:

矩陣操作

1.矩陣翻轉(zhuǎn)

2.矩陣卷動

3.矩陣旋轉(zhuǎn)

請選擇(1、2或3,0:退出):

選擇一個菜單后,要求輸入操作的方向、行數(shù)或列數(shù)或角度,輸入后,顯示操作結(jié)果。

課件之家精心整理資料-歡迎你的欣賞

選題三漢諾塔

一、基本涵義

在印度,有這么一個古老的傳說:在世界中心貝拿勒斯(在印度北部)的圣廟里,一塊

黃銅板匕插著三根寶石針。印度教的主神梵天在創(chuàng)造世界的忖候,在其中一根針上從下到上

地穿好了由大到小的64片金片,這就是所謂的漢諾塔(如下圖)。不論白天黑夜,總有一

個僧侶在按照下面的法則移動這些金片:?次只移動一片,不管在哪根針上,小片必在大片

上面。當(dāng)所有的金片都從梵天穿好的那根針上移到另外一概針上時,世界就將在一聲霹靂中

消滅,梵塔、廟宇和眾生都將同歸于盡。故漢諾塔問題又被稱為“世界末日問題?!?/p>

港盤塔周題的初始模型

1廠一

2廣

??r—1

1

611

BC

這是一個典型問題。由于問題中給出的圓盤移動條件是:一次僅能移動一個盤,且不允

許大盤放在小盤的上面,這樣64個盤子的移動次數(shù)為:

18,446,744,073,709,511,615(次)

這是個天文數(shù)字,若每一微秒可以計算(并不輸出)一次移動,那麼也需要幾乎一百萬

年。我們僅能找出問題的解決方法并解決較小N值時的漢諾塔,但目前計算機的速度還不能

解決64曾的漢諾塔。

二、常規(guī)解法

按照上面的方法分析問題,找到移動圓盤的的遞歸算法:

設(shè)要解決的的漢諾塔共有N個圓盤,對A桿上的全部N個圓盤從小到大順序編號,最小

的圓盤為1號,次之為2號,依次類推,則最下面的圓盤的編號為N。

第一步:先將問題簡化。假設(shè)A桿上只有一個圓盤,即漢諾塔只有一層N1,則只要

將1號盤從A桿上移到B桿上即可。

第二步:對於一個有N(N>1)個圓盤的漢諾塔,將N個圓盤分成兩部分:上面的N

-1個圓盤和最下面的N號圓盤。

第三步:將“上面的N—1個圓盤”看成一個整體,為了解決N個圓盤的漢諾塔,可以

按下面圖示的方式逕行操作:

(1)將A桿上面的N—1個盤子,借助B桿,移到C桿上;

課件之家精心整理資料-歡迎你的欣賞

2

NT1N-l

BC

(2)將A桿上剩余的N號盤子移到B桿上;

-n1

--2

I,,,

|N-l

C

(3)將C桿上的N―1個盤子,借助A桿,移到B桿上。

r—2

II…

,r------------h,N-i

NII

BC

整理上述結(jié)果,把第一步中化簡問題的條件作為遞歸結(jié)束條件,將第三步分析得到的算

法作為遞歸算法,可以寫出如下完整得遞歸算法描述。

三、設(shè)計要求

編寫代碼,用兩種方法解決盤子的移動。運行程序后,顯現(xiàn)下面的參考界血:

漢諾塔

1.遞歸解法

2.非遞歸解法

請選擇(1或2,0:退出):

選擇一個菜單后,要求輸入盤片數(shù)目,輸入后,顯示移動過程及結(jié)果。

課件之家精心整理資料-歡迎你的欣賞

選題四八皇后

一、基本涵義

八皇后問題是一個古老而著名的問題。該問題是十九世紀(jì)著名的數(shù)學(xué)家高斯1850年提

出:在8X8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處

于同一行、同一列或同一斜線上,問有多少種擺法。

高斯認(rèn)為有76種方案。1854年在柏林的象棋雜志上不同的作者發(fā)表了40種不同的解,

后來有人用圖論的方法解出92種結(jié)果。

顯然問題的鍵在于如何判定某個皇后所在的行、歹人斜線上是否有別的皇后;可以從矩

陣的特點上找到規(guī)律,如果在同一行,則行號相同;如果在同一列上,則列號相同;如果同

在“/”斜線上的行列值之和相同;如果同在“\”斜線上的行列值之差相同;如果斜線不

分方向,則同一斜線上兩皇后的行號之差的絕對值與列號之差的絕對值相同。從下圖可以驗

證上面的說法:

對于一組布局我們可以用一個一維數(shù)組來表示:X:ARRAY[1..8]OFINTEGER;X[I]的下

標(biāo)I表示第1個皇后在棋盤的第I行,X[I]的內(nèi)容表示在第I行的第X[I]列,例如:X[3]=5

就表示第3個皇后在第3行的第5歹人在這種方式下,要表示兩個皇后A和B不在同一列

或斜線上的條件可以描述為:

X[A]oX[B]ANDABS(A-B)oABS(X[A]-X[B]){A和B分別表示兩個皇后的行號}。

二、設(shè)計要求

編寫代碼,用至少三種方法解決八皇后問題。運行程序后,顯現(xiàn)下面的參考界面:

八皇后問題

課件之家精心整理資料-歡迎你的欣賞

1.方法一

2.方法二

3.方法三

請選擇(1、2或3,0:退出):

選擇一個菜單后,要求輸入棋盤的階層,即N。輸入后,顯示共有多少種布局方案,并

顯示每一種方案的具體情況,如下圖:

77:(0,2)(1,0)(2,6)(3,4)(4,7)(5,1)(6,3)(7⑸

78:(0,7)(1,1)(2,4)(3,2)(4,0)(5,6)(6,3)(7⑸

第77種狀態(tài)為:第78種狀態(tài)為:

****

**@**

****

Q***Q***

課件之家精心整理資料-歡迎你的欣賞

選題五成績管理

一、設(shè)計要求

由于同學(xué)們一經(jīng)學(xué)習(xí)了指針、鏈表、文件讀寫等基本知識,為了與后續(xù)課程,如數(shù)據(jù)結(jié)

構(gòu)、數(shù)據(jù)庫系統(tǒng)等有一個知識體系上的銜接,特設(shè)置個信息管理類的課題《成績管理系統(tǒng)》,

其它諸如人事管理、學(xué)籍管理、圖書管理、通訊錄管理等,結(jié)構(gòu)類似,僅管理對象有所不同。

管理內(nèi)容包括:

學(xué)號、姓名、班級、五門課成績。

主要功能有:

添加、修改、刪除、讀出、寫入、查找、排序、計算總分、平均分、分類匯總等。

編寫代碼,運行程序后,顯現(xiàn)下面的參考界面:

成績管理

1.輸入學(xué)生成績

2.修改學(xué)生成績

3.刪除學(xué)生成績

|4.計算每位學(xué)生的總分

5.計算每位學(xué)生的平均分

6.按學(xué)號或姓名查詢學(xué)生成績

7.按班級查詢學(xué)生成績

8.成績排序

9.按班級統(tǒng)計學(xué)科總分、平均分等

請選擇(1~9,0:退出):

選擇一個菜單后,顯示結(jié)果。

二、參考代碼

注意:部分代碼被抽去,不能直接運行。

#include"stdio.h"/*I/0函數(shù)*/

#includc"stdlib.h/*其它說明*/

#include"string.h/*字符串函數(shù)*/

#include"conio.h/*屏幕操作函數(shù)*/

#include"mem.h1/*內(nèi)存操作函數(shù)*/

#includc"ctype.h/*字符操作函數(shù)*/

#include"alloc.h"/*動態(tài)地址分配函數(shù)*/

#defineN3/*定義常數(shù)*/

typedefstructzl/*定義數(shù)據(jù)結(jié)構(gòu)*/

課件之家精心整理資料-歡迎你的欣賞

charno[ll];

charname[15];

intscore[N];

floatsum;

floataverage;

intorder;

structzl*next;

{STUDENT;

/*以下是函數(shù)原型*/

STUDENT*init();/*初始化函數(shù)*/

STUDENT*create();/*創(chuàng)建鏈表*/

STUDENT*delete(STUDENT*h);/*刪除記錄*/

voidprint(STUDENT*h);/*顯示所有記錄*/

voidsearch(STUDENT*h);/*查找*/

voidsave(STUDENT*h);/*保存*/

STUDENT*load();/*讀入記錄*/

voidcomputer(STUDENT*h);/*計算總分和均分*/

STUDENT*insert(STUDENT*h);/*插入記錄*/

voidappend();/*追加記錄*/

voidcopy();/*復(fù)制文件*/

STUDENT*sort(STUDENT*h);/*排序*/

STUDENT*index(STUDENT*h);/*索弓I*/

voidtotal(STUDENT*h);/*分類合計*/

intmenu_select();/*菜單函數(shù)*/

/******主函數(shù)開始*******/

main()

inti;

STUDENT*head;/*鏈表定義頭指針*/

head=init();/*初始化鏈表*/

clrscr();/*清屏*/

fbr(;;)/*無限循環(huán)*/

{

switch(menu_select())/*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語句的條件*/

{/*值不同,執(zhí)行的函數(shù)不同,break不能省略*/

case0:head=init();break;/*執(zhí)行初始化*/

case1:head=create();break;/*創(chuàng)建鏈表*/

case2:head=delete(head);break;/*冊!|除記錄*/

case3:print(head);break;/*顯示全部記錄*/

case4:search(head);break;/*查找記錄*/

case5:save(head);break;/*保存文件*/

case6:head=load();break;/*讀文件*/

case7:computer(head);break;/*計算總分和均分*/

課件之家精心整理資料-歡迎你的欣賞

case8:head=insert(head);break;/*插入記錄*/

case9:copy();break;/*復(fù)制文件*/

caseIO:head=sort(head);break;/*排序*/

case11:append();break;/*追加記錄*/

case12:head=index(head);break;/*索引*/

case13:total(head);break;/*分類合計*/

case14:exit(0);/*如菜單返回值為14程序結(jié)束*/

}

)

}

/*菜單函數(shù),返回值為整數(shù)*/

menu_select()

char*menu[]=

/*定義菜單字符串?dāng)?shù)組*/

”0.initlist”,/*初始化*/

n1.Enterlist",/*輸入記錄*/

"2.Deletearecordfromlist",/*從表中刪除記錄*/

”3.printlistn,/*顯示單鏈表中所有記錄*/

"4.Searchrecordonname”,/*按照姓名查找記錄*/

"5.Savethefile",/*將單鏈表中記錄保存到文件中*/

"6.Loadthefile”,/*從文件中讀入記錄*/

"7.computethescore1,,/*計算所有學(xué)生的總分和均分*/

"8.insertrecordtolist",/*插入記錄到表中*/

"9.copythefiletonewfile”,/*復(fù)制文件*/

n10.sorttomakenewfile",/*排序*/

"11.appendrecordtofile”,/*追加記錄到文件中*/

n12.indexonnomberH,/*索弓I*/

n13.totalonnombern,/*分類合計*/

”14.Quit”

};/*退出*/

chars[3];/*以字符形式保存選擇號*/

intc,i;/*定義整形變量*/

gotoxy(l,25);/*移動光標(biāo)*/

printf(npressanykeyentermenu.....\nM);/*壓任一鍵進入主菜單*/

getch();/*輸入任一鍵*/

clrscr();/*清屏幕*/

gotoxy(l,l);/*移動光標(biāo)*/

textcolor(YELLOW);/*設(shè)置文本顯示顏色為黃色*/

textbackground(BLUE);/*設(shè)置背景顏色為藍(lán)色*/

gotoxy(10,2);/*移動光標(biāo)*/

putch(0xc9);/*輸出左上角邊框「*/

fbr(i=l;i〈44;i++)

putch(Oxcd);/*輸出上邊框水平線*/

課件之家精心整理資料-歡迎你的欣賞

putch(Oxbb);/*輸出右上角邊框-|*/

fbr(i=3;i<20;i++)

{

gotoxy(10,i);putch(Oxba);/*輸出左垂直線*/

gotoxy(54,i);putch(0xba);

}/*輸出右垂直線*/

gotoxy(10,20);putch(0xc8);/*輸出左上角邊框」*/

fbr(i=l;i<44;i++)

putch(Oxcd);/*輸出下邊框水平線*/

putch(Oxbc);/*輸出右下角邊框」*/

window。1,3,53,19);/*制作顯示菜單的窗口,大小根據(jù)菜單條數(shù)設(shè)計*/

clrscr();/*清屏*/

for(i=0;i<16;i++)/*輸出主菜單數(shù)組*/

(

gotoxy(10,i+l);

cprintf(H%s,,,menu[i]);

}

textbackground(BLACK);/*設(shè)置背景顏色為黑色*/

window。,1,80,25);/*恢復(fù)原窗口大小*/

gotoxy(10,21);/*移動光標(biāo)*/

do{

printf("\nEnteryouchoice(0-14):");/*在菜單窗口外顯示提示信息*/

scanf("%s",s);/*輸入選擇項*/

c=atoi⑸;/*將輸入的字符串轉(zhuǎn)化為整形數(shù)*/

}while(c<0||c>14);/*選擇項不在0~14之間重輸*/

returnc;/*返回選擇項,主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/

)

STUDENT*init()

(

returnNULL;

/*創(chuàng)建鏈表*/

STUDENT*create()

{

inti;ints;

STUDENT*h=NULL,*info;/*STUDENT指向結(jié)構(gòu)體的指針*/

for(;;)

{

info=(STUDENT*)malloc(sizeof(STUDENT));/*申請空間*/

ifljinfo)/*如果指針infb為空*/

(

printf("\noutofmemory");/*輸出內(nèi)存溢出*/

returnNULL;/*返回空指針*/

課件之家精心整理資料-歡迎你的欣賞

}

inputs(uenterno:H,infb->no,ll);/*輸入學(xué)號并校驗*/

if(info->no[0]=,@,)break;/*如果學(xué)號首字符為@則結(jié)束輸入*/

inputs(nentername:H,info->name,15);/*輸入姓名,并進行校驗*/

printf(npleaseinput%dscore\nn,N);/*提示開始輸入成績*/

s=0;/*計算每個學(xué)生的總分,初值為0*/

for(i=0;i<N;i-H-)/*N門課程循環(huán)N次*/

(

do

printf(Hscore%d:",i+1);/*提示輸入第幾門課程*/

scanfC%d\&infb?>score[i]);/*輸入成績*/

if(infb->score[i]>100||infb->score[i]<0)/*確保成績在0-100之間*/

printf("baddata,repeatinput\nH);/*出錯提示信息*/

}while(infb->score[i]>100||info->score[i]<0);

s=s+info->score[i];/*累加各門課程成績*/

}

info->sum=s;/*將總分保存*/

infd->average=(float)s/N;/*求出平均值*/

infb->order=0;/*未排序前此值為0*/

infb->next=h;/*將頭結(jié)點做為新輸入結(jié)點的后繼結(jié)點*/

h=info;/*新輸入結(jié)點為新的頭結(jié)點*/

}

retum(h);/*返回頭指針*/

}

/*輸入字符串,并進行長度驗證*/

inputs(char*prompt,char*s,intcount)

{

charp[255];

do{

printf(prompt);/*顯示提示信息*/

scanf(',%sl\p);/*輸入字符串*/

if(strlen(p)>count)printf(,,\ntoolong!\n");/*進行長度校驗,超過count值重輸入*/

}while(strlen(p)>count);

strcpy(s,p);/*將輸入的字符串拷貝到字符串s中*/

)

/*輸出鏈表中結(jié)點信息*/

voidprint(STUDENT*h)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論