C程序設計報告_第1頁
C程序設計報告_第2頁
C程序設計報告_第3頁
免費預覽已結束,剩余6頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、設計題目:編寫程序提示用戶輸入一個班級中的學生人數 n, 再依次提示用戶輸入 n個人在課程 A中的考試成 績,然后計算出平均值,顯示出來。 要求用到第 九章中的數組類模板 Array 定義浮點型數組存儲 考試成績。姓名:馬雪峰學號:20141030106專業班級:計科一班完成日期:2016年6月26日1設計任務編寫程序提示用戶輸入一個班級中的學生人數n,再依次提示用戶輸入n個人在課程A中的考試成績,然后計算出平均值,顯示出來。要求用到第九章中的數組類模板Array定義浮點型數組存儲考試成績。1.1設計目的(1)、加強C+課程學習,將課本上的理論知識運用于實踐,通過實際的程序操作來提高 自己編寫

2、程序的能力,達到理論與實踐相結合的目的。(2) 、培養自己動腦思考,動手操作的能力,在實際操作過程中體會C+中面向對象的思 想。(3)、在實際的操作過程中去衡量自己理論知識掌握的程度,通過設計流程,編寫程序, 上機調試去尋找并發現知識的缺陷,并想辦法彌補。(4)、在本程序中主要是要達到能對類的定義及用法,數組的定義及用法,數組類模版, 運算符重載,多文件結構,成員函數的實現等的熟練運用。1.2設計內容用數組類模板、析構函數、構造函數、賦值構造函數、運算符重載、指針等語法來完成一個班級在某門課程中考試的平均值的程序。1.3設計指標或者要求設計指標:用C+完成一個班級在某門課程中的成績儲存并計算平

3、均值的程序,要求用 到數組類模板。輸入要求:在程序運行的頁面根據提示輸入班級學生人數n,再依次輸入每個人在課程A中的成績。輸出要求:輸出n個人在課程A中的平均成績。2設計過程(1) 、分析程序的功能:使用戶能根據程序提示輸入班級學生人數n和n個人在某門課中 考試成績,并能儲存成績然后計算平均值,顯示出來。(2)、思考程序要用到的算法原理:使用數組類模板定義浮點型數組存儲考試成績;利用 班級總人數與其在課程 A中的總分之比的原理求平均值。(3)、設計程序流程圖(見 2.3 )。(4)、編寫程序(見 2.4 )。2.1程序功能使用戶能根據程序提示輸入班級學生人數n和n個人在某門課中考試成績,并能儲

4、存成績然后計算平均值,顯示出來。2.2算法原理(1 )、使用數組類模板定義浮點型數組存儲考試成績;2.3程序流程圖S出 AverScore結束2.4程序主要模塊或者函數#ifndef ARRAY_H#defi ne ARRAY_H#in elude <iostream.h>#i nclude <stdlib.h>#ifndef NULLcon st int NULL = 0;#en difenum ErrorType/錯誤類型集合,共有三種類型in validArraySize, memoryAllocatio nError, i ndexOutOfRa nge;cha

5、r *errorMsg="In valid array size", "Memory allocatio n error","In valid in dex:"template <class T>class Arrayprivate:T* alist; /T類型指針,用于存放動態分配的數組內存首地址int size;void Error(ErrorType error,i nt badI ndex=0) con st;public:Array(i nt sz = 50);Array(c onst Array<T>

6、;& A);Array(void);/重載"="使數組對象可以整體賦值Array<T>& operator= (const Array<T>& rhs);T& operator(i nt i);operator T* (void) con st;int ListSize(void) con st;void Resize(i nt sz);/以下為類成員函數的實現template <class T>void Array<T>:Error(ErrorType error, i nt bad In d

7、ex) constcout << errorMsgerror;if (error = in dexOutOfRa nge)cout << badI ndex; /如果是下標越界錯,輸出錯誤的下標cout << en dl;exit(1);template <class T>Array<T>:Array(i nt sz)if (sz <= 0) /sz為數組大小(元素個數),若小于0,則輸出錯誤信息 Error(i nvalidArraySize);size = sz;alist = new Tsize; /動態分配size個T類

8、型的元素空間if (alist = NULL) /如果分配內存不成功,輸出錯誤信息Error(memoryAllocatio nError);template <class T>Array<T>:Array(void)delete alist;template <class T>Array<T>:Array(c onst Array<T >& X)/從對象X取得數組大小,并賦值給當前對象的成員int n = X.size;size = n;alist = new Tn;if (alist = NULL) /如果分配內存不成功,

9、輸出錯誤信息Error(memoryAllocatio nError)T* srcptr = X.alist;T* destptr = alist;while (n-)*destptr+ = *srcptr+;/重載"="運算符,將對象rhs賦值給本對象。實現對象之間的整體賦值template <class T>Array<T>& Array<T>:operator= (const Array<T>& rhs)int n = rhs.size;if (size != n)delete alist;alist =

10、 new Tn; /重新分配n個元素的內存if (alist = NULL)Error(memoryAllocatio nError);size = n; /記錄本對象的數組大小/從rhs向本對象復制元素T* destptr = alist;T* srcptr = rhs.alist;while (n-)*destptr+ = *srcptr+;return *this;/重載下標操作符,實現與普通數組一樣通過下標訪問元素,并且具有越界檢查功能template <class T>T& Array<T>:operator (i nt n)/檢查下標是否越界if (

11、n < 0 | n > size-1)Error(i ndexOutOfRa nge, n);/返回下標為n的數組元素return alist n;template <class T>Array<T>:operator T* (void) const/返回當前對象中私有數組的首地址return alist;/取當前數組的大小template <class T>int Array<T>:ListSize(void) constreturn size;/將數組大小修改為sztemplate <class T>void Arra

12、y<T>:Resize(i nt sz)if (sz <= 0)Error(i nvalidArraySize);if (sz = size)return;T* n ewlist = new Tsz;if (n ewlist = NULL)Error(memoryAllocatio nError);int n = (sz <= size) ? sz : size;/將原有數組中前n個元素復制到新數組中T* srcptr = alist;T* destptr = n ewlist;while (n-)*destptr+ = *srcptr+;delete alist;al

13、ist = n ewlist;size = sz;#en difvoid mai n()int n;double AverScore,TotalScore = 0;cout << "請輸入學生人數:”;cin >> n;Array<float> Score (n);for (in t i=0; i<n; i+)cout << "請輸入第"<< i+1 <<" 個學生的課程 A成績(0100):" cin >> Scorei;TotalScore += Sc

14、orei;AverScore = TotalScore/n;cout << " 平均成績為 ” << AverScore << endl;3軟件運行或者測試結果若一個班學生人數為 10,他們的在課程 A中的考試成績分別為 88、78、90、93、69、89、 95、77、79、90,根據程序提示依次輸入,則程序運行結果如圖所示:I H:DEbuigqq 心貳123456789主冃土冃至冃主冃主冃至冃主冃至口0 0- 0 00 0 0 0 0 -0 0 R- 0 0 0 0 0 1曠 0 0 0 0 0- 0 0 0 0 ( <<<

15、<<<<< 貝 績績績績績績績績薯 e- 成成成成成成成成成昉nu AAAAAAAAACf i 口王口王口至口王口王口王口王口王口王t 古4JA 丄 K 亠員ZCA三4ZCA梟 n rnp mrmkmFCmKIL D 0il課isililisilil內 c T二三 二-一二一二一二 三一二二-些 t f-L.二上3匸一53匸二空些苣8 d 123456789 1 y-. y- 學第第第第第第第第第第績斷 入入兀入入兀入入兀入入成S “ j j j . j s88 ?890936989957779904軟件設計過程中遇到的問題以及解決辦法在這次設計程序的過程中遇到了

16、許多問題:比如對類模板、數組的內存分配、指針、析構函數等知識掌握不牢固,使得拿到題目無從下手;不知道重載運算符“=”可以對數組整體賦值;對this指針概念模糊;但最后都通過請教別人和翻課本,上網查找相關資料等途 徑解決了。參考文獻:C+語言程序設計(第四版)、C+程序設計(第二版)譚浩強著、Visual C+編程之道。5總結這兩周的C+課程設計,時間上說長不長,說短也不短,卻讓我學到了很多:對很多函數 有了新的認識,對 C+有了更深刻的了解,增強了程序的編寫能力,鞏固了專業知識。在寫 程序的過程中我學到了自己曾經不知道或一些不會用的函數,特別是多文件結構,類模板, 運算符的重載等;也讓我明白了學好 C+是多么重要;在自己基礎知識掌握不牢固的情況下, 要設計一個程序是多么難??偟膩碚f

溫馨提示

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

評論

0/150

提交評論