課程設計報告

2022-11-17 08:51:04 字數 4286 閱讀 1820

合肥學院c語言課程設計報告

一、 需求分析

我的課程設計名稱:保齡球計分管理系統。

課程設計的目的:將理論教學中涉及到的知識點貫穿起來,對不同的資料型別、程式控制結構、資料結構作一比較和總結,結合設計題目進行綜合性應用,對所學知識達到融會貫通的程度。通過課程設計,學生在下述各方面的能力應該得到鍛鍊:

(1)進一步鞏固、加深學生所學專業課程《c語言教程》的基本理論知識,理論聯絡實際,進一步培養學生綜合分析問題,解決問題的能力。

(2)全面考核學生所掌握的基本理論知識及其實際業務能力,從而達到提高學生素質的最終目的。

(3)利用所學知識,開發小型應用系統,掌握運用c語言編寫除錯應用系統程式,訓練獨立開發應用系統,進行資料處理的綜合能力。

(4)對於給定的設計題目,如何進行分析,理清思路,並給出相應的數學模型。

(5)掌握自頂而下的設計方法,將大問題進行模組化,領會結構化程式設計的方法。

(6)熟練掌握c語言的基本語法,靈活運用各種資料型別。

設計內容:設計乙個保齡球計分管理系統,該系統要求對保齡球計分資訊進行管理和維護。

(7)進一步掌握在整合環境下如何除錯程式(單步除錯,設定斷點、觀察表示式,分塊除錯)和修改程式。

任務和要求:打保齡球是用乙個滾球去撞擊10個站立的瓶,將瓶擊倒。一局分10 輪,每輪可滾球1次或多次,以擊到的瓶數為依據計分,一局得分為10輪得分之和,而每輪的得分不僅與本輪的滾球情況有關,還可能與後一輪或兩輪的滾球情況有關,即:

某輪某次滾球擊倒的瓶數不僅要計入本輪得分,還可能會計入前一輪或兩輪得分。

計分規則如下:

①若某一輪的第一次滾球就擊倒全部10個瓶,則本輪不再滾球(若是第10輪還需加2次滾球),該輪得分為本次擊倒瓶數10與以後2次滾球所擊倒瓶數之和。

②若某一輪的第一次滾球未擊倒全部10個球,則對剩下未擊倒的瓶再滾球一次,如果這2次滾球擊倒全部10個瓶,則本輪不再滾球(若是第10輪還需加1次滾球),該輪得分為這2次擊倒瓶數10與以後1次滾球所擊倒瓶數之和。

③若某一輪2次滾球未擊倒全部10個瓶,則本輪不在滾球,該輪得分為這2次滾球所擊倒瓶數之和.

要求實現的功能:

①模擬10個人各打一局保齡球比賽過程,統計每局各輪得分和累計總分。

②逐人逐輪逐次輸入一次滾球擊倒的瓶數。

③對10人的得分由低到高排序並顯示。

④ 最後,把排序的存入檔案中。

二、演算法設計

1、設計思想:

根據題目要求,要逐人逐輪逐次輸入,一次先輸入第一人第一輪第一次出手出的得分,如果等於10則直接進行第二輪第一次的出手;如果這一次的得分小於10,則進行第一輪第二次的出手,兩次的得分總和為第一輪的得分,然後再進行第二輪第一次的出手,如果第二輪第一次的出手得分等於10,則直接進行第三輪第一次的出手;如果這一次的得分小於10,則進行第二輪第二次的出手,兩次的得分總和為第二輪的得分,。依此類推,進行第三次,第四次……直到第10輪,如果這一輪的出手為10分,則可以另外加兩次出手的機會,則第10輪的得分為三次的得分之和;如果這一輪的出手小於10,則進行第二次的出手,如果兩次之和等於10,則可以另外加一次出手的機會,則第10輪的得分為三次的得分之和,如果不等於10,則第10輪的得分為兩次得分之和;然後把每人每輪得分和總分算出並列印,對總分進行排序再列印.

2.流程圖通過對題目的分析和理解,我做了乙個簡單的流程圖,如下:

3、設計表示

程式中定義了子函式order()用來完成10人總分排序並列印的功能。在主數中計算各人的總分並用動態一維陣列q來儲存,然後傳給子函式order(),由於是一維陣列,我們可以選擇氣泡排序和選擇排序方法來實現,這裡我選擇了選擇排序。之前我定義了動態二維陣列p來儲存10人10輪的得分,在總分排序的同時,把各個人和各個人的每輪得分進行交換,並把排序結果寫入檔案中進行儲存。

選擇排序演算法的基本思想:

n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果:

①初始狀態:無序區為r[1..n],有序區為空。

②第1趟排序在無序區r[1..n]中選出關鍵字最小的記錄r[k],將它與無序區的第1個記錄r[1]交換,使r[1..1]和r[2..

n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。

③第i趟排序第i趟排序開始時,當前有序區和無序區分別為r[1..i-1]和r[i..n](1≤i≤n-1)。

該趟排序從當前無序區中選出關鍵字最小的記錄r[k],將它與無序區的第1個記錄r[i]交換,使r[1..i]和r[i+1..n]分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區。

這樣,n個記錄的檔案的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。

4.實現注釋

每個函式的功能order()函式的功能是將每人每輪的得及分總分進行排序,首先order()接受主函式傳來的形參p代表每人每輪得分的二維動態陣列和q代表每人總分的一維動態陣列的位址,為其申請動態儲存空間,利用一維陣列的選擇排序方法對總分進行降序排序,同時將每人交換和每輪得分交換,開啟檔案,將排序結果和交換結果寫到指定檔案中,然後關閉檔案。

5、演算法設計中一些新的想法和思路

在此程式中我用的是動態一維陣列和動態二維陣列,動態申請空間,避免了資源的浪費。對於此程式我們可以用結構體來完成,定義乙個結構體陣列用來儲存人數,定義乙個成員陣列來儲存10輪的得分,在定義乙個整形陣列sum()來儲存10人的總分,最後進行排序並把結果儲存到指定的檔案中。我們也可以用鍊錶來完成,動態申請記憶體空間用p來儲存第乙個人的每輪的得分以及總分,用p->next來儲存第二人的每輪得分以及總分,用p->next->next儲存第三人的每輪得分以及總分,依此類推,最後對總分進行排序並把鍊錶輸出,最後把排序結果儲存在指定檔案中。

還有,略微改一下人數本程式可以輸入和顯示更多人的資訊和情況,應用很廣泛!

三、使用者手冊

使用該程式時使用者要注意:本系統可在turbo c、vc++、c++ builder環境下進行,在輸入格式方面只要是整形直接輸入就行,中間不用什麼分隔符。在輸入每人每輪第一次出手的得分時,如果不等於10時,此時緊接著應該輸入第二次的出手的得分;然後再輸入下一輪第一次出手的得分,在輸入過程中有提示,只要按照提示資訊輸入就不會有錯,當所有的輸入都完成之後,除錯編譯,只要開啟你所指向的檔案中,即可看到你要的結果。

四、 除錯及測試

當我完成源**,開始除錯時,遇到了很多問題,如程式無法執行、提示資訊多餘、記憶體不可讀、編譯錯誤、出現隨機數等等,當提示資訊多餘時,我選擇的是把一些模組交換,就可避免累贅;還有當我把每人的總分排序之後,結果發現對應的人沒有交換,此時我定義了乙個動態的一維陣列,來儲存每個人,當排序的同時,將對應的人進行交換,就能實現。當我設計和編碼時,我一開始選擇了鍊錶,考慮到我的鍊錶操作不如陣列,因此我選擇了使用動態陣列,我定義了動態二維陣列p,它的外迴圈控制人數,內迴圈控制每人的每輪的得分,用一維陣列q儲存總分,再用一維陣列的選擇排序方法對總分進行排序,再進行程式實踐操作,一步乙個腳印,穩紮穩打,最終成功。通過除錯以及測試,我收穫了c語言在vc++中的除錯方法。

五、小結

本程式在剛開始除錯時有許多錯誤,但在我的努力及同學的幫助下都被一一克服,現在在操作本程式時可根據提示進行相關操作,能正確輸出結果。在剛開始的幾次除錯中曾經出現過不能執行、排序不成功、總分出現隨機數、資料不能交換等等一系列問題能和錯誤,幸好在指導老師及同學們的幫助,這些問題得到克服,並且使程式的功能也得到了一定的完善。現在、它能對總分進行排序並把人們的位置進行交換,能在檔案中顯示並且給出正確答案。

最後還能得到正確的結果。

在這次設計過程中,不僅複習課本上所學知識,還通過查資料、問同學學到了課本上沒有的知識。從而啟發我,要想寫好程式,在寫好課本知識的同時還需要多讀和專業有關的一些書籍,同時還需要多動腦子,盡量把所學的知識綜合起來應用,力爭寫出完美的程式。除此之外,我還得到了一些有用的教訓:

寫程式時必須要細心,不能輸錯乙個字元標點,就連全形半形也得注意。在修改時要有耐心,編譯出錯後必須逐個錯誤去改正,絕不能心急浮躁,否則修改之後還會有新的錯誤。通過這次的課程設計讓我將理論教學中涉及到的知識點貫穿起來,對不同的資料型別、程式控制結構、資料結構作一比較和總結,結合設計題目進行綜合性應用,對所學知識達到融會貫通。

熟練掌握c語言的基本語法,靈活運用各種資料型別。但本系統有一些不足的情況,有待進一步完善。

六、參考文獻

[1] 賈宗璞、許合利,c語言程式設計,江蘇:中國礦業大學出版社,2007.6

[2] 譚浩強,c程式設計(第二版),北京:清華大學出版社,2001.1

[3]附錄:1、程式源**:

#include ""

#include ""

#include ""

/*函式功能:將每人每局難總分從小到大排序

然後輸出*/

void order(int *p,int *q)

fp=fopen("","a+");/*將排序結果追加到檔案中*/

fprintf(fp,"排序後1-10輪的分數及總分\n");

球閥課程設計報告 ProE課程設計

一.課題名稱 球閥班級 12機自a1 小組成員 李軍帥 組長 李軍帥 二.球閥的功能和工作原理描述 1.球閥的工作原理 球閥的主要驅動原件是裝配於閥杆上端的扳手,球閥的啟閉元件是位於閥桿下端的球體。球閥的主要工作原理是 當給扳手施加某一轉矩,扳手驅動閥桿旋轉,閥桿將扳手的轉矩傳遞給位於閥桿下端的球體...

課程設計報告

數位電路課程設計報告 題目姓名 班級學號 同組人報告得分 南京航空航天大學金城學院 目錄一 課設內容及要求 1 設計任務 2 設計指標 二 設計方案 1 總體設計方案說明 2 模組結構與方框圖 三 電路設計與器件選擇 1 功能模組一 實際名 1 模組電路及引數計算 2 工作原理和功能說明 3 器件說...

課程設計報告

題目院 系電子與資訊工程學院 專業電子資訊科學與技術 班級姓名 設計日期 報告書寫要求 1 報告的撰寫要求條理清晰 語言準確 表述簡明。報告中段首空兩個字元,中文字型為宋體五號,數字 字元 字母為times new roman五號,且單倍行距。2 報告中插圖應與文字緊密配合,文圖相符,技術內容正確。...