第一篇:C++實踐報告
中南大學
本科生課程設計(實踐)任務書、設計報告
(C++程序設計)
題 目 學生姓名 指導教師
C++程序設計實踐
* *
孫 岱
學 院 地球科學與信息物理學院 專業班級 信息物理工程類1106班 學生學號
01451106**
計算機基礎教學實驗中心
2012年 7 月 日
C++程序設計實踐報告書
C++是一種使用非常廣泛的電腦程式設計語言,在當今網絡如此發達的時代能夠運用C++語言進行編程顯得尤為重要。它是一種靜態資料類型檢查的,支援多范型的通用程式設計語言。C++支援程序化程式設計、資料抽象化、面向對象程式設計、泛型程式設計、基于原則設計等多種程式設計風格。在系統學習完《C++程序設計基礎》課程后,我們在老師的指導下進行了這次C++程序設計實踐,主要以visual C++6.0為編譯環境,重點使用了visual C++ MFC編程實現實踐所要求的功能。
【任務描述】
這次實踐采用了上機實踐與老師集體輔導結合的方式,以完成輔導老師下發的《C++語言課程設計任務書》中指定任務與要求為目的,要求我們在已學過的《C++程序設計基礎》所掌握的一些C++語言的結構和函數的基礎上,以全新的角度去感知和運用C++語言進行一些具有相關目的和功能的程序設計和編譯。在這次實踐中,我們統一以visual C++ 6.0為編譯系統,使用visual C++ MFC編程來達到和完成輔導老師給的《C++語言課程設計任務書》中給出的題目,其中部分題目以基本對話框為應用程序的框架,另一部分則設計為單文檔界面(SDI)應用程序。這些程序都具有不同的設計目的和應用功能,運用了常用的基本控件,如靜態文本框、命令按鈕、編輯框、復選框、列表框、組合框、滾動條等。
本次實踐可分為三部分:
一、基于對話框的Windows應用程序:
這部分以知識要點掌握與編程實例主輔結合的方式,讓我們基本掌握了基于對話框的應用程序的創建過程,建立基于對話框的 MFC 應用程序框架,放置控件并設置控件屬性,以及為控件連接變量(即為控件命名),添加并且編寫消息處理函數。在這部分實踐中,我按照任務書中要求按照任務書所給的實例,基本掌握了基于對話框的 MFC 應用程序中各常用的基本控件的使用。在完成對MFC編程的初步了解后,我們按《C++語言課程設計任務書》所給出的題目和要求完成了相關基于對話框的 MFC 應用程序的編譯。實踐完成了以下任務和要求:
1.編寫一個如圖所示的應用程序。若單擊“復制”按鈕,則把上面的編輯框中的內容復制到下面的編輯框中;若單擊“結束”按鈕,則退出程序的運行。
2.輸入一元二次方程 ax2 +bx+c=0 的系數 a、b、c,計算并輸出兩個根 x1、x2。
3.編寫一個能對列表框進行項目添加、修改和刪除操作的應用程序。
4.設計如圖所示的對話框。若選定了“日期”或“時間”復選框,則在對應的只讀編輯框中顯示系統當前日期或時間。
5.設計如圖所示的對話框。單擊“確定”按鈕后,在列表框中顯示選擇的信息。
二、文檔/視圖結構應用程序:
文檔/視圖結構的思想是將數據的管理與顯示分離,其中文檔用于管理應用程序的數據,而視圖是用戶界面,用于顯示、打印文檔中的數據,并管理與用戶的交互。在這部分實踐過程中,通過對任務書中介紹的幾種SDI結構的典型應用程序來了解其結構及設計方法,學習和實踐了典型應用包括:?利用畫筆、畫刷等工具及位圖處理的方法實現文字和圖形的輸出。?利用定時器控件制作動畫程序。?對鼠標和鍵盤進行編程的基本方法。?文件、字體、顏色等幾種通用對話框的使用方法及自定義對話框的設計、調用方法。?菜單的設計方法。
通過課程實踐,以及與同學之間的討論,我們完成了這一階段的任務要求:
6.編寫一個程序,繪制如圖所示的-2π~2π 之間的 sin 曲線。
7.設計一個如圖所示的畫圖程序。要求按下鼠標右鍵畫圓,按住鼠標左鍵移動畫線。(圖略)
8.用定時器控制蝴蝶在窗口中飛舞,如圖所示。(圖略)
9.設計一個如圖所示的應用程序。若用戶單擊左鍵,則彈出輸入成績對話框,選擇 OK 后平均成績和總分在窗口的客戶區輸出。(圖略)
10.設計如圖所示的菜單,并編寫相應用的消息處理函數。(圖略)
三、完成綜合題的程序設計:
將實踐過程中選擇3~5題(或類似的題),做成一個綜合程序,要求通過菜單調用各部分功能。可自行組織和發揮,使其安排合適。
【系統設計思想】
首先建立一個單文檔結構的應用程序作為綜合程序的主程序,通過對菜單的設計完成與所需調用的各個對話框功能相適應的編輯。利用對話框類資源創建自己的對話框,然后建立成與實踐中3~5題相對應的對話框,并分別按要求進行相關功能的實現。然后建立對話框類CMyDlg,在調用的地方建立對話框類對象CMyDlg dlg;然后dlg.DoModal();從而實現主程序對各個對話框的調用。在主程序的單文檔界面的菜單中,可以對所需功能進行選擇,然后調用出不同的對話框實現所系的功能,達到設計程序通過菜單調用各部分功能的目的。
【系統功能】
設計的綜合程序以一個文檔類的程序界面為依托,實現其余各個部分功能的調用。對書目管理、時間顯示以及教師綜合信息管理者三部分進行了整合,達到了對各個部分功能之間的調用。在主界面中,我們可以對所需功能進行選擇,從而到達不同的對話框界面進行不同功能的交互。?當我們在菜單中選擇“書目管理”時,程序自動彈出書目管理對話框,然后我們能對列表框進行項目添加、修改和刪除操作等。?而我們如果在主界面的菜單中選擇“時間顯示”,則系統會跳至另一個對話框界面,這個界面可以對當前的時間進行顯示,在對話框中若選擇了“日期”或者“時間”復選框,則在對應的只讀編輯框中顯示系統當前的日期或時間,從而實現了對系統當前時間信息的捕獲。?如果我們在最初的主界面菜單選擇了“教師綜合信息管理”,則在彈出的對話框中我們可以實現對教師姓名、性別、愛好、工齡以及職稱進行選擇。
【設計過程】
首先打開VC++ 6.0編譯系統,因為我設計的綜合程序以一個文檔類的程序界面為依托,實現其余各個部分功能的調用。對書目管理、時間顯示以及教師綜合信息管理者三部分進行了整合,從而達到了對各個部分功能之間的調用。所以創建過程如下:
?按照任務書要求設定工程名為“xw1106_0145110626“,利用 AppWizard 創建一個 SDI 應用程序框架。
?在工作區中選定“ ResourceView ”,展開 Menu,雙擊其中的 IDR_MAINFRAME,可以看到由 AppWizard 生成的標準菜單。首先刪除原有菜單項,然后添加自己所需要的菜單,添加方式為:雙擊空白菜單框,彈出“ Menu Item Properties ”,輸入菜單項的標題(名稱)。若菜單項有一個子菜單(單擊會彈出了一子菜單),則選定“彈出”,否則不要選定“彈出”;要輸入一條分割線,則選定“分隔符”。我將菜單欄設定為三項,分別為“菜單”、“小工具”以及“QQ”,其中菜單包含三個子選項分別為“方程求解/時間顯示/書目管理”,小工具包含“復制/字符游戲”,而“QQ”則是通過進程方式實現對外部軟件QQ的調用。
?利用“CDialog dlg;dlg.DoModal();”來實現各個子菜單項所對應的對話框的調用,而QQ的調用是個人加進去的(不是任務要求),利用了進程方式調用外部exe程序:STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si,sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi,sizeof(pi));if(!CreateProcess(NULL, ”G:Program FilesTencentQQBinQQ.exe “,NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&pi)){ MessageBox(”出錯 “, ”提示 ",MB_OK|MB_ICONINFORMATION);} WaitForSingleObject(pi.hProcess,INFINITE);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);【運行情況】
編譯鏈接后程序運行正常,能實現通過菜單項調出相應的對話框的目的,以一個文檔類的程序界面為依托,實現其余各個部分功能的調用。對書目管理、時間顯示以及教師綜合信息管理者三部分進行了整合,達到了對各個部分功能之間的調用。其中點擊QQ也能很快的彈出QQ登陸界面。在主程序的單文檔界面的菜單中,可以對所需功能進行選擇,然后調用出不同的對話框實現所系的功能,達到設計程序通過菜單調用各部分功能的目的。
【心得體會】
在為期不到兩周的課程設計中,我體會頗多,學到很多東西。我懂得了如何用 MFC編寫可視化界面的應用程序,我加強了對C++的認識,復習了自己以前的知識,自己的邏輯思考能力也提高不少。從而對Microsoft Visual C++ 6.0又有了更深入的認識!在這次課程設計中,我還懂得了程序開發的一些比較重要的步驟,總之,通過這次課程設計,我收獲頗豐,相信會為自己以后的學習和工作帶來很大的好處。最重要的還是激發了我編程的興趣和熱情,讓我從理論變成了能做一些小型程序,讓我對編程更加熱愛了。整體地評價這次課程設計,我認為收獲很大,正如上面所說的那樣,通過課程設計,既復習了以前的舊知識,又學到了一些新的知識;設計增強了我們用所學知識去解決具體問題的能力,進一步培養了我們獨立思考問題和解決問題的能力。特別是學會了在Visual C++ 集成開發環境中如何調試程序的方法。當然,老師的悉心指導和同學的幫助也是不可忽視的,在此感謝本次課程設計中所有輔導老師對我的關心和幫助,誠心誠意感謝老師對我的鼓勵與教導,是老師在我迷茫的時候給了我些許提示,激發了我編程的靈感;還有,我在此也十分感謝本次課程設計中同學們對我的幫助,盡管本次不是團隊合作,但是他們也給了我不少的提示和幫助,我們相互溝通、共同進步。
【參考文獻】
[1] 楊長興、劉衛國.《C++程序設計》.中國鐵道出版社
[2] 劉衛國、楊長興.《C++程序設計實踐教程》.中國鐵道出版社
第二篇:中南大學(C++實踐報告)
中南大學
本科生課程設計(實踐)設計報告(程序設計基礎)題目
MFC課程設計
學生學號
學生姓名
指導教師
學院
專業班級
計算機基礎教學實驗中心 2015年
06月 14
日
一、引言
MFC(Microsoft Foundation Class Library, 微軟基礎類庫)是微軟基Windows平臺下的C++類庫集合。MFC包含了所有與系統相關的類,其中封裝了大多數的API(Application Program Interface)函數,提供了應用程序框架和開發應用程序的工具,如應用程序向導、類向導、可視化資源設計等高效工具,用消息映射處理消息響應,大大簡化了Windows應用程序的開發工作,使程序員可以從繁重的編程工作中解脫出來,提高了工作效率。
程序設計實踐旨在課堂學習的基礎上幫助學生掌握C++應用系統的開發方法和技巧。在系統學習完《C++程序設計》這門課程后,通過實踐對幾個小型C++應用程序實例設計與實現過程分析,幫助學生利用C++開發應用系統的一般方法和步驟,掌握MFC的基本知識。
這次實踐采用學生上機與老師集體輔導的方式,以完成老師下發的《C++語言課程設計任務書》為要求和目的,運用課堂上學習的C++基礎知識,采用Visual C++ MFC編程系統,以全新的角度和感知去認識C++語言在編程方面的優越性。在實踐過程中,基于對話框的MFC應用程序,達到了解基本控件,如靜態文本框、命令按鈕、編輯框、列表框、組合框等的使用的目的。還有理解Windows應用程序采用“消息傳遞、事件驅動”的運行機制。本次實踐的任務主要分為兩個部分: 使用Visual C++ MFC編程實現以下功能:
輸入一元二次方程ax2+bx+c=0 的系數a、b、c,計算并輸出兩個根x1、x2.編寫一個能對列表框進行項目添加、修改和刪除操作的應用程序。編寫一個程序,繪制-2π~2π之間的sin曲線。用定時器控制蝴蝶在窗口中飛舞。等共10道。
將第一部分中選擇3~5題,做一個綜合程序,要求有登陸界面和調用各部分的功能。總體設計
本次實踐的主要目的就是了解和掌握運用MFC編程的一般思想和具體的操作步驟。實踐主要是基于MFC的多文檔對話框和單文檔視圖,通過實踐完成第一大部分的任務之后,還要完成第二部分的綜合題目。第二部分的任務由學生自主發揮,自主找資料,詢問同學和老師。第一部分的任務比較簡單,具體的就不再描述。關于第二部分,我做了一個基于對文檔對話框。首頁為一個登陸頁面,需要輸入用戶名和密碼才能登陸,登陸后的頁面是把第一大部分的幾個題目連接起來。達到預覽的目的。
三、詳細設計
實踐前首先要認識AppWizard的工作環境。其項目工作區一共有三個選項卡分別為“ResourceView”“ClassView”“FileView”,中間是對話框設計界面,右邊是控件工具欄。實踐過程中,我們是先完成第一大部分的任務。雖然在第一次上機實踐前,我仔細地閱讀了老師給我們下發的資料,并且結合《C++程序設計實踐教程》了解相關知識,但是在實踐時結果不理想。主要是對創建對話框程序的步驟沒有掌握。在經過幾次嘗試失敗后,總結其一般步驟為:(1)建立基于對話框的MFC應用程序框架;(2)放置控件;(3)設置控件屬性;(4)為控件連接變量,即為控件命名;(5)添加并且編寫消息處理函數。
基于對話框的MFC程序設計,對各種控件的了解和使用顯得特別重要。這里就不一一詳細介紹它們的功能。控件控制欄一個有26個控件圖標,每一個圖標都可以看做一個對象,消息便是通過函數對它們進行操作。每一個控件都有兩個重要而且必不可少的基本屬性:ID和標題。ID便是該控件的標識,某些函數需要通過ID對控件進行操作。了解一定相關知識后,對課程實踐有了很大的幫助。其中“輸入一元二次方程ax2+bx+c=0 的系數a、b、c,計算并輸出兩個根x1、x2”這個題目比較復雜,而且與C++連續很緊密。其中的有這樣的語句m_x1=(-b+sqrt(b*b-4*a*c))/(2*a);m_x2=(-b-sqrt(b*b-4*a*c))/(2*a),這就是我們在課堂上學習的C++基本語句,在實踐過程中考驗學生的靈活運用能力。完成這個題目的關鍵是把每個編輯框(控件)連接好變量和選的數據類型,接下來的就是編寫消息處理函數。這道題很全面地體現了MFC的“消息傳遞、事件驅動”的思想,在操作步驟方面也在很多地方得到了實踐。
MFC編程除了基于多文本對話框以外,還有很重要的一部分是基于單文檔界面的應用程序,如Windows自帶的Notepad程序。在本次實踐的第一大部分的后5個小題就是基于單文檔的。那么首先要對其有一定的了解:文檔/視圖結構的思想是將數據的管理與顯示分離,其中文檔用于管理應用程序的數據,而視圖是用戶界面,用于顯示、打印文檔中的數據,并管理與用戶的交互。SDI具有文檔/視圖結構的應用程序框架,該框架包括應用程序類、窗口框架類、文檔類和視圖類,編程的任務是在文檔類和視圖類中添加適當的代碼。其中文檔類中一個重要的成員函數是OnNewDocument(),用戶在此添加代碼完成對數據的初始化;而視圖類中最重要的成員函數是OnDraw(),通過在該函數中添加代碼實現窗口內容的輸出。本次實踐是對單文檔的典型實例,包括: ? 利用畫筆、畫刷等工具及位圖處理的方法實現文字和圖形的輸出。? 利用定時器控件制作動畫程序。? 對鼠標和鍵盤進行編程的基本方法。
? 文件、字體、顏色等幾種通用對話框的使用方法及自定義對話框的設計、調用方法。? 菜單的設計方法。
雖然進行充分的準備,實踐中還是遇到了很多的困難和問題。在完成題目“用定時器控制蝴蝶在窗口中飛舞”時,主要的問題就是在插入蝴蝶圖片的,嘗試了幾次都沒有編譯成功。最終再詢問同學后,才知道是要把GIF格式的圖片分割成一幀一幀,然后才能插入。最后用定時器控制,達到動態的效果。在完成了第一大部分的任務后,第二部分的綜合題是一個不小的挑戰對我來說。要靠自己去網上或者圖書館查找資料。在經過一番準備后,最終決定做一個相對簡單的基于多文檔對話框的登陸界面,把幾個原來的程序文件連接起來。但是在這個過程中,完全要靠自己一步一步去探索,當然也遇到了各種各樣的困難和挑戰。關鍵是在連接各部分對話框,經過不斷的實驗,不斷的調試程序,總結的操作步驟如下:(1)創建工程,MFC Application(exe),工程命名按要求命名;(2)工程建立后有如圖對話框,將途中的靜態文本框和按鈕都刪掉,留下空白,再使用靜態文本,編輯框,按鈕和靜態圖片重新排版,并進行命名。注意靜態圖框應該第一個布置,不然運行時圖片會將其他控件覆蓋;(3)右擊密碼對應的編輯框,選擇屬性,選樣式中的密碼;(4)在Dialog上右擊選擇插入DIG,重復插入4個,依次作為菜單,題目1,題目2和題目3的對話框,并對其分別創建類,以菜單對話框為例,改一下表頭為“菜單”,在對話框空白處雙擊,點OK創建類,并對其命名(假如命名為MyMenu);(5)回到登錄界面的對話框,雙擊登錄控件,出現如圖按鈕,點擊OK,在頂端添加#include”MyMenu.h”,并OnButton1下添加以下代碼CString c_user,c_password;m_user.GetWindowText(c_user);m_password.GetWindowText(c_password);if(c_user.IsEmpty()||c_password.IsEmpty()){
MessageBox(“用戶名或密碼不能為空”,“用戶登錄信息”);
return;} if(c_user==“123”&&c_password==“123”){
CMyMenu dlg;
dlg.DoModal();//這兩段代碼是用于調用菜單對話框
}
else {
MessageBox(“用戶名或密碼不正確”,“提示”,MB_ICONINFORMATION);
return;對對話框添加背景圖片。在如下圖文件上右擊,選擇引入,然后導入已準備好的bmp格式的圖片,然后選擇登錄界面的靜態圖框右擊,進行如圖操作,這樣圖片就加入了,它會改掉按鈕和編輯框,這沒關系,運行后會顯示出來的;(7)通過以上操作,已經做好了登錄界面和實現和登錄界面與菜單對話框的連接,現在進行菜單對話框的編輯。將原有的按鈕刪除,自己加入按鈕并命名;(8)雙擊題目1,點OK,在代碼頁的頂端加入如圖代碼,并在OnButton1下加入以下代碼 CT1 dlg;dlg.DoModal();其他的按相同操作。
四、設計總結
為期為兩周的課程實踐中,我體會頗多,學到的東西也很多。我懂得了如何運用MFC編寫可視化界面的應用程序,加強了對C++的認識,復習了以前的知識,自己的邏輯思考能力,解決問題的能力也提高了不少。從而對Microsoft Visual C++有了更加深刻的認識和體會!在這次課程設計實踐過程中我還懂得了一些程序開發的重要步驟,總之,在這次課程設計實踐中,我收獲頗豐。
對于對任務的完成情況,第一部分主要按老師的步驟完成。第二部分,由學生自主選題,自主設計完成。總的來說,我個人對自己的完成情況感覺良好。當然,老師的悉心指導和同學的幫助是不能忽視的,在此感謝所有在本次課程設計實踐過程中對我細心指導的老師和不斷鼓勵和幫助我的同學們。
總之,此次課程實踐是對學生動手動腦的一次很好的鍛煉,為學生的今后發展奠定基礎。
第三篇:C++課程實踐報告試題及答案
任務一 一、實踐任務 1.試建立一個類 PP,求出下列多項式的前 n 項的值。
?????? ? ???n x P n x xP nx x Pnn/))()1()()1 2((1)(2 n 1 -
110???nnn 二、詳細設計 1、類的描述與定義(1)私有數據成員 ? int n:前若干項的項數。
? double
x:存放 x 的值。
? double *p:根據 n 的大小動態申請存放 P n(x)前 n 項的數組空間。
(2)公有成員函數 ? PP(int num,double x1):構造函數,初始化數據成員 n 和 x,使 p 指向動態申請的數組空間。
? ~PP():析構函數,釋放 p 指向的動態內存空間。
? double fun(int n1,double x):遞歸函數,用于求多項式)(x P n 的第 n1 項。注意:將遞歸公式中的 n 用作函數參數。本函數供 process 函數調用。
? void process():完成求前 n 項的工作,并將它們存放到 p 指向的動態數組中。
? void show():輸出 n 和 x,并將前 n 項以每行 4 個數的形式輸出到屏幕上。
2、主要函數設計
在主函數中完成對該類的測試。先輸入 num 和 x1,并定義一個 PP 類的對象 items,用 num 和 x1 初始化 items 的成員 n 和 x,調用 items 的成員函數,求出并輸出多項式前 num 項的值。
三、源程序清單 #include
int n;
double x;
double*p;public:
PP(int num,double x1)
{
n=num;
x=x1;
p=new double[n];
}
~PP()
{
if(p)delete []p;
}
double fun(int n1,double x);
void process();
void show();};double PP::fun(int n1,double x){
if(n1==0)return 1;
else if(n1==1)return x;
else if(n1>1)return((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1;} void PP::process(){
for(int i=0;i { p[i]=fun(i,x); } } void PP::show(){ cout<<“n=”< for(int i=0;i { cout< if((i+1)%4==0)cout< } } void main(){ int num; double x1; cout<<“請輸入 num 和 x1:”; cin>>num>>x1; PP items(num,x1); items.process(); items.show();} 任務二 一、實踐任務 2.試建立一個類 SP,求k k k kn k n f ? ? ? ? ?....3 2 1),(,另有輔助函數 power(m,n)用于求nm。 二、詳細設計 1、類的描述與定義(1)私有數據成員 ? int n,k:存放公式中 n 和 k 的值;(2)公有成員函數 ? SP(int n1,int k1):構造函數,初始化成員數據 n 和 k。 ? int power(int m, int n):求 m n。 ? int fun():求公式的累加和。 ? void show():輸出求得的結果。 2、主要函數設計 在主程序中定義對象 s,對該類進行測試。 三、源程序清單 #include private: int n,k;public: SP(int n1,int k1) { n=n1; k=k1; } int power(int m,int n); int fun(); void show();};int SP::power(int m,int n){ int s=1; for(int i=0;i { s*=m; } return s;} int SP::fun(){ int s=0; for(int i=1;i<=n;i++) { s+=power(i,k); } return s;} void SP::show(){ cout<<“f(”< int n1,k1; cout<<“請輸入 n1,k1:”; cin>>n1>>k1; SP s(n1,k1); s.fun(); s.show();} 任務三 一、實踐任務 3.建立一個類 MOVE,不進行排序,將數組中小于平均值的元素放到數組的左邊,大于平均值的元素放到數組的右邊。 二、詳細設計 1、類的描述與定義(1)私有數據成員 ? float array[20]:一維整型數組。 ? int n:數組中元素的個數。 (2)公有成員函數 ? MOVE(float b[],int m):構造函數,初始化成員數據。 ? void average():輸出平均值,并將數組中的元素按要求重新放置。 ? void print():輸出一維數組。 2、主要函數設計 在主程序中用數據{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}對該類進行測試。 三、源程序清單 #include float array[20]; int n;public: MOVE(float b[],int m) { for(int i=0;i { array[i]=b[i]; } n=m; } void average(); void print(); ~MOVE() {};};void MOVE::average(){ float ave=0; int i,j; for(i=0;i { ave+=array[i]; } ave/=n; cout< float turn[20]; j=0; for(i=0;i { if(array[i]<=ave) { turn[j]=array[i]; j++; } } j=0; for(i=0;i { if(array[i]>ave) { turn[n-1-j]=array[i]; j++; } } for(i=0;i { array[i]=turn[i]; } } void MOVE::print(){ for(int i=0;i cout< float b1[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}; int num; num=sizeof(b1)/sizeof(float); MOVE s(b1,num); s.average(); s.print();} 任務四 一、實踐任務 4.建立一個類 MOVE,將數組中最大元素的值與最小元素的值互換。 二、詳細設計 1、類的描述與定義(1)私有數據成員 ? int *array:一維整型數組。 ? int n:數組中元素的個數。 (2)公有成員函數 ? MOVE(int b[],int m):構造函數,初始化成員數據。 ? void exchange():輸出平均值,并將數組中的元素按要求重新放置。 ? void print():輸出一維數組。 ? ~MOVE():析構函數。 2、主要函數設計 在主程序中用數據{21,65,43,87,12,84,44,97,32,55}對該類進行測試。 三、源程序清單 #include int *array; int n;public: MOVE(int b[],int m) { array=new int[m]; n=m; for(int i=0;i { array[i]=b[i]; } } void exchange(); void print(); ~MOVE() { if(array)delete array; } };void MOVE::exchange() { float ave=0; for(int i=0;i { ave+=array[i]; } ave/=n; cout<<“平均值為”< int max,min; max=min=array[0]; int m; for(i=0,m=0;i { if(array[i]>=max)m=i,max=array[i]; } int l; for(i=0,l=0;i { if(array[i] } i=array[m],array[m]=array[l],array[l]=i; } void MOVE::print() { for(int i=0;i cout< { int text[]={21,65,43,87,12,84,44,97,32,55}; int num; num=sizeof(text)/sizeof(int); MOVE s(text,num); s.print(); cout< s.exchange(); s.print();} 任務五 一、實踐任務 定義一個類 Palindrome,實現絕對回文數。設計一個算法實現對任意整型數字判斷是否為絕對回文數。所謂絕對回文數,是指十進制數和二進制數均對稱的數。 二、詳細設計 1、類的描述與定義(1)私有數據成員 ? int n:整型數字。 ? int y: 標記是否為回文數。 (2)公有成員函數 ? Palindrome(int x):構造函數,根據 x 參數初始化數據成員 n,y 初始化為 0。 ? void huiwen():判斷數 n 是否為絕對回文數。 ? void show():若該數為回文數,則在屏幕顯示。 2、主要函數設計 在主程序中定義 int a,由鍵盤輸入數字。定義一個 Palindrome 類對象 p,用 a 初始化 p,完成對該類的測試。 三、源程序清單 #include int n; int y;public: Palindrome(int x) { n=x; y=0; } void huiwen(); void show();};void Palindrome::huiwen(){ int i=0,j=0; int m; m=n; while(m) { m/=10; i++; } m=n; while(m) { m/=2; j++; } int*s10=new int[i]; int*s2=new int[j]; m=n; for(int k=0;k { s10[i-1-k]=m%10; m/=10; } m=n; for(k=0;k { s2[j-1-k]=m%2; m/=2; } int num10=0; for(k=0;k { if(s10[i-1-k]==s10[k])num10++; else break; } int num2=0; for(k=0;k { if(s2[j-1-k]==s2[k])num2++; else break; } if(num10==(i/2)&&num2==(j/2))y=1; } void Palindrome::show(){ int i=0,j=0; int m; m=n; while(m) { m/=10; i++; } m=n; while(m) { m/=2; j++; } int*s10=new int[i+1]; int*s2=new int[j+1]; m=n; for(int k=0;k { s10[i-1-k]=m%10; m/=10; } m=n; for(k=0;k { s2[j-1-k]=m%2; m/=2; } if(y) { cout<<“該數為絕對回文數!:”< cout<<“十進制表示為:”; for(k=0;k cout< cout<<“二進制表示為:”; for(k=0;k cout< } else { cout<<“該數不是絕對回文數!:”< cout<<“十進制表示為:”; for(k=0;k cout< cout<<“二進制表示為:”; for(k=0;k cout< } cout< int a; cout<<“請輸入一個數字:”; cin>>a; Palindrome p(a); p.huiwen(); p.show();} 任務六 一、實踐任務 6.定義一個字符串類 String,實現判斷該字符串是否為回文字符串。所謂回文字符串,是 指該字符串左右對稱。例如字符串“123321”是回文字符串。 二、詳細設計 1、類的描述與定義(1)私有數據成員 ? char *str; ? int y:標記是否為回文字符串。 (2)公有成員函數 ? String(char *s):構造函數,用給定的參數 s 初始化數據成員 str。y 初始化為 0。 ? void huiwen():判斷 str 所指向的字符串是否為回文字符串。 ? void show():在屏幕上顯示字符串。 2、主要函數設計 在主程序中定義字符串 char s[]=”ababcedbaba”作為原始字符串。定義一個 String 類對象 test,用 s 初始化 test,完成對該類的測試。 三、源程序清單 #include char*str; int y;public: String(char*s) { int n=strlen(s); str=new char[n+1]; strcpy(str,s); y=0; } void huiwen(); void show(); ~String() { if(str)delete []str;} };void String::huiwen(){ int n,judge=0; n=strlen(str); for(int i=0;i<(n/2);i++) { if(str[i]==str[n-1-i])judge++; } if(judge==i)y=1;} void String::show()//輸出; { if(y==1)cout<<“y=1,?該字符串是回文數”< else cout<<“y=0,該字符串不是回文數”< char s[]=“ababcedbaba”; String test(s); test.huiwen(); test.show();} 任務七 一、實踐任務 7.建立一個類 PHALANX,生成并顯示一個折疊方陣。折疊方陣如下圖所示。折疊方陣的生成過程為:起始數置于方陣的左上角,然后從起始數開始遞增,依次折疊構成方陣。 二、詳細設計 1、類的描述與定義(1)私有數據成員 1 … 1 1 4 9 16 ? int(*p)[20]:指向按照折疊規律存放方陣的二維整型數組。 ? int startnum:折疊方陣的起始數。 ? int n:存放方針的層數。 (2)公有成員函數 ? PHALANX(int s, int m):構造函數,初始化成員數據。 ? void process():生成起始數為 startnum 的 n 行方陣。 ? void print():輸出折疊方陣。 ? ~ PHALANX():析構函數。 2、主要函數設計 在主程序中對該類進行測試。 三、源程序清單 #include int(*p)[20]; int startnum; int n; public: phalanx(int s[20][20],int m) { startnum=1; p=s; n=m; } void process() { p[0][0]=startnum; for(int i=0;i for(int j=0;j {if(i>j){p[i][j]=1+i*i+i+i-j;} else{p[i][j]=1+j*j+i;}} } void print() { for(int i=0;i { for(int j=0;j } } ~ phalanx(){ } }; void main() { int m; int s[20][20]; cout<<“請輸入折疊層數:”; cin>>m; cout<<“n”; phalanx pp(s,m); pp.process(); pp.print(); } 中南大學 本科生課程設計(實踐)任務書、設計報告 (C++程序設計) 題目 學生姓名 指導教師 學院 專業班級 學生學號 科學計算器應用程序嚴暉 材料科學與工程學院 1206 計算機基礎教學實驗中心 2013年 7 月5日 在本課程學習過程中我遇到了下面這些問題: 1、剛開始C++實踐理論課的學習時,我的學習興趣很高,總想著自己能夠完全掌握PPT的知識,做成一個完美的程序。隨著學習的進展,調試程序總是出現問題,最夸張的一次出現了204個ERRORS,也經常不知道怎么去在正確的期房插入程序塊。而比較嚴格的語法規則,也讓我一時難以接受,產生畏難情緒,總是怕,最后因為怕學不好而導致沒有學好。 2、注重理論學習,忽視上機編程實踐,造成“只能用筆在紙上編程”的奇怪現象。特別是在剛開始時,我一開始編譯連接就手忙腳亂,總是會出現許多錯誤。有時程序則一再出現錯誤,使我就更不理解該如何查找錯誤,如何排除錯誤了。 3、在前期的學習中我沒有抓得很緊,總覺得不是很難,希望通過突擊搞定課程學習。而事實上,本課程實踐要靠平時的積累,幾乎不能靠臨時突擊,因為前面基礎不夠扎實,到了后面險些無法彌補。 4、我發現自己在后期的學習中有些急于求成,總想編寫綜合性的程序,把老師的要求一次性盡快完成。這直接導致了我編的程序一時很亂,幾乎無法閱讀。 后來才發現為了學好本課程,沒有什么竅門,只能采用一些“笨”技巧: 認真聽講,積極思考,提高上課效率。老師上課講述的都是課程實踐的重點和難點,聽好課程能夠達到“事半功倍”的目的。 主動上機,多多實踐,提高動手才能,實習時不能著急。通過上機實踐來驗證所學的理論,通過在機器上查找錯誤來鞏固概念,通過提高上機才能來促進理論學習,開闊編程思路,提高反映效率,提高分析問題解決問題的才能,鍛煉心理素質,提高心理承受才能。 這是第二次上計算機實踐課程了,第一次是網頁設計。雖然兩次要完成的任務不同,但給人的感覺都是較迷茫的。由于我上課時沒有認真聽C++課程老師的講解,學得相當糟糕,但要設計的又是一個較大的程序,便去請教老師。老師建議我們找一個模板,認真仔細地看,去理解它,看懂它,然后根據自己的實踐內容適當修改,應該就沒多大問題了。 老師的話給了我莫大的鼓勵,但不自覺地滋生了傲慢的態度。只要有個模板不就行了嘛,小事一樁啊!但結果并非如此,在后來的實踐過程中,我還是碰到了許多麻煩。 其中,對于按省份給每個省的總發表篇數進行排序這一問題,剛開始真的不會弄,我一開始以為要用一維數組來排序,可還是不太明白。于是,我詢問了周邊同學,才知道他們用的是Access導入C++,再利用Access的排序功能,并且調試成功了,聽他們講解后我便用了他們的方法。與同學討論、向同學請教有時候也不失為一個好方法,一個人的智慧畢竟是不全面的,集體的力量才是強大的!同時,在運行時老是會出現一些錯誤,但我發現其實里面的參數并不復雜,只要跟著那個error的提示,一個一個的改下去,其實很簡單的。結果事實也是如此,用了一個小時多一點,102個錯誤全部搞定了。錯誤幾乎為以下三類: 1.冒號,分號等符號打錯了; 2.大小寫等造成的對應問題; 3.變量的不完全修改。 改完以后,在執行時我發現界面不好看,于是我又將主界面略加修改了些。看上去美觀了不少。再運行功能,幾乎都能順利運行,但還是存在一些瑕疵,但是我還是不太會弄清怎么回事。于是,又去問同學,在他們的幫助下,成功解決這個問題,在此真要好好謝謝他們! 終于大功告成!欣慰在這次實踐中,我不僅彌補了自己在C++課上所落下的內容,尤其是指針那塊部分,雖然現在概念搞的還不是很懂,但看見程序是能夠理解的。這次C++實踐是給我們這一學期來所學知識的一個總復習,總的實踐。它讓我們把所知道的知識點運用的更好,把不知道的知識點搞得明白了。實踐出真知,通過這次實踐,我也系統的把課本好好的第四次回顧了下。猛然覺得,C++二級考試更有把握了。 在本門課程實踐過程中,我更好的領悟了自學的重要性,并且和同學加強了交流,以便我們互相及時答疑解惑。同時我也學會了采用多種形式進行交流,不僅只是傳統的面對面進行相互答疑,同時也利用網絡通過百度知道、百度文庫、郵件、BBS進行網上交流,也學會了絕對不要將問題積累到最后。 同時在本次實踐中,我還開闊了眼界,打開了思路,閱讀了幾本關于C++編程的教程,從而通過理解不同作者對于C++的不同看法,來提高我對C++的理解,以方便自己在未來對C++的進一步學習。第四篇:中南大學c++計算器實踐報告
第五篇:c++實踐心得體會1600