版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《面向對象程序設計》</p><p><b> 課程設計報告</b></p><p> 學 號: </p><p> 班級序號: </p><p> 姓 名: </p><p>
2、 指導老師: </p><p> 成 績: </p><p><b> 2013年6月</b></p><p><b> 實習題目一</b></p><p><b> 【題目需求】</b></p>&l
3、t;p> 題號及題目:(1)有0、1、2、3、4、5、6、7、8、9十個數(shù),按要求填入下列算式中,要求每個數(shù)只使用一次,首位數(shù)不能為零,輸出時顯示所有可能的組合并統(tǒng)計個數(shù)。</p><p> □ □ □ + □ □ □ = □ □ □ □, 如437+589 = 1026</p><p> 問題描述:將0-9這10個數(shù)以特定順序不重復排列成一個正確的加法算式,輸出并統(tǒng)計這樣的算
4、式的個數(shù)。</p><p> 問題分析:因為三位數(shù)相加最多為兩千以內的四位數(shù),而四位數(shù)首位又不能為零,即四位數(shù)首位為一。則兩個三位數(shù)首位從二開始循環(huán)。</p><p><b> 【算法設計】</b></p><p> (1)設計思想:把三位數(shù)逐位判別,先得到兩個各個位皆不相等的三位數(shù),相加得到四位數(shù),再判斷選出四位數(shù)與兩個三位數(shù)各個位皆不
5、相等的數(shù),即所求排列。</p><p> ?。?)實現(xiàn)過程:逐位判斷得出第一個三位數(shù),同理得出第二個三位數(shù),再求得四位數(shù)的各個位,判斷,若符合要求則輸出并計數(shù)。</p><p><b> 【感想】</b></p><p> 代碼設計過程中,借鑒學長思路,但未用數(shù)組,造成此程序有局限性,適用范圍降低。設計程序過程中應考慮到程序的適用性。<
6、;/p><p><b> 【附錄】</b></p><p> #include<iostream></p><p> using namespace std;</p><p> void main()</p><p><b> {</b></p>
7、<p> int NumG1,NumS1,NumB1;</p><p> int NumG2,NumS2,NumB2;</p><p> int Rosult;</p><p> int n1,n2,n3,n4,n=0;</p><p> for (NumB1=2;NumB1<10;NumB1++)</p&
8、gt;<p><b> {</b></p><p> for (NumS1=0;NumS1<10;NumS1++)</p><p><b> {</b></p><p> for (NumG1=0;NumG1<10;NumG1++)</p><p><b>
9、; {</b></p><p> if ((NumG1==NumS1)||(NumG1==NumB1)||(NumS1==NumB1)) //得出符合要求的一個三位數(shù);</p><p><b> continue;</b></p><p> for (NumB2=2;NumB2<10;NumB2++)</p&
10、gt;<p><b> {</b></p><p> for (NumS2=0;NumS2<10;NumS2++)</p><p><b> {</b></p><p> for (NumG2=0;NumG2<10;NumG2++)</p><p><b>
11、; {</b></p><p> if((NumG1==NumG2)||(NumG1==NumS2)||(NumG1==NumB2)||(NumS1==NumG2)||(NumS1==NumS2)||(NumS1==NumB2)||(NumB1==NumG2)||(NumB1==NumS2)||(NumB1==NumB2)||(NumG2==NumS2)||(NumG2==NumB2)||(Num
12、S2==NumB2))//得出符合要求且符合第一個三位數(shù)的數(shù);</p><p><b> continue;</b></p><p> Rosult=100*(NumB1+NumB2)+10*(NumS1+NumS2)+NumG1+NumG2;</p><p> if(Rosult<1000)</p><p>
13、;<b> continue;</b></p><p> n1=Rosult/1000;</p><p> n2=(Rosult-1000*n1)/100;</p><p> n3=(Rosult-1000*n1-100*n2)/10;</p><p> n4=Rosult-1000*n1-100*n2-10*
14、n3;</p><p> //取出四位數(shù)的各個位;</p><p> if((n1!=NumG1)&&(n1!=NumS1)&&(n1!=NumB1)&&(n1!=NumG2)&&(n1!=NumS2)&&(n1!=NumB2)&&(n2!=NumG1)&&(n2!=NumS
15、1)&&(n2!=NumB1)&&(n2!=NumG2)&&(n2!=NumS2)&&(n2!=NumB2)&&(n3!=NumG1)&&(n3!=NumS1)&&(n3!=NumB1)&&(n3!=NumG2)&&(n3!=NumS2)&&(n3!=NumB2)&&am
16、p;(n4!=NumG1)&&(n4!=NumS1)&&(n4!=NumB1)&&(n4!=NumG2)&&(n4!=NumS2)&&(n4!=NumB2)&&(n1!=n2)&&(n1!=n3)&&(n1!=n4)&&(n2!=n3)&&(n2!=n4)&&(n
17、3!=n4))</p><p> {cout<<NumB1<<NumS1<<NumG1<<"+"<<NumB2<<NumS2<<NumG2<<"="<<Rosult<<endl;</p><p> n=n+1;//
18、得出符合要求的四位數(shù),并計數(shù);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }
19、</b></p><p><b> }</b></p><p><b> }</b></p><p> cout<<"一共有"<<n<<"組結果。"<<endl;</p><p><b&
20、gt; }</b></p><p><b> 實習題目二</b></p><p><b> 【題目需求】</b></p><p> 題號及題目:(2)超級指針使用練習:C++里使用new運算符時,一般要求手動利用delete語句進行內存釋放。這是因為普通的new申請的內存和普通變量所占的內存不同:普通變
21、量在定義時,有系統(tǒng)在棧中按照變量類型申請相應大小的內存,變量的生命周期結束后,其內存自動釋放,而new語句則是在堆上申請內存,指針變量生命周期結束后,堆中申請的內存依然占有,需要用戶手動delete釋放。為了避免忘記delete指針變量帶來的內存泄漏,可以利用超級指針的思想通過棧變量的特征來管理堆變量內存:即棧變量的生命周期結束時,自動尋找關聯(lián)的堆變量,進而釋放其內存。</p><p> 問題描述:(1)定義一
22、個基類baseObject,實現(xiàn)ref()和unref()兩個對象引用計數(shù)接口。(2)定義一個模板類ref_ptr,實現(xiàn)任意類的泛化特征。(3)編寫測試接口,實現(xiàn)類對象內存的自動釋放。</p><p> 問題分析:注意運算符的重載,模板類的定義以及基類的派生。</p><p><b> 【算法設計】</b></p><p> 設計思想:定
23、義基類和模板類,對運算符進行重載,通過對構造函數(shù)及析構函數(shù)的調用,實現(xiàn)超級指針。</p><p><b> 【附錄】</b></p><p> #include<iostream></p><p> using namespace std;</p><p> class baseObject</
24、p><p><b> {</b></p><p><b> public:</b></p><p> baseObject () {count = 0;std::cout<<"Object has create"<<std::endl;}</p><p&
25、gt; ~baseObject () {std::cout<<"Object has destroy"<<std::endl;}</p><p> void ref(){ count ++; }</p><p> void unref()</p><p><b> {</b></p&g
26、t;<p><b> count --;</b></p><p> if(!count){delete(this);}</p><p><b> }</b></p><p> void Fun(){cout<<"超級指針練習成功!"<<endl;}<
27、/p><p><b> private:</b></p><p> int count;</p><p><b> };</b></p><p> template <class T></p><p> class ref_ptr </p>&
28、lt;p><b> {</b></p><p><b> public:</b></p><p> ref_ptr(){_ptr = NULL;}</p><p> ref_ptr(T *ptr) </p><p><b> {</b></p>&
29、lt;p> _ptr = ptr;</p><p> if(_ptr){_ptr->ref();} </p><p><b> }</b></p><p> ~ref_ptr() </p><p><b> {</b></p><p> if(_pt
30、r){_ptr->unref();}</p><p><b> }</b></p><p> T* get(){return _ptr;}</p><p> operator T* () const{return _ptr;}</p><p> T* operator ->(){return _pt
31、r;}</p><p> T& operator*(){return *_ptr;}</p><p> ref_ptr& operator= (T *pa)</p><p><b> {</b></p><p> T *temp = _ptr;</p><p> _ptr
32、 = pa;</p><p> if(_ptr){_ptr->ref();}</p><p> if(temp){temp->unref();}</p><p> return *this;</p><p><b> }</b></p><p><b> priva
33、te:</b></p><p><b> T *_ptr;</b></p><p><b> };</b></p><p> void main() </p><p><b> {</b></p><p> ref_ptr<b
34、aseObject>advPtr = new baseObject; </p><p> advPtr->Fun();</p><p><b> }</b></p><p><b> 實習題目三</b></p><p><b> 【題目需求】</b><
35、/p><p> 題號及題目:綜合題:</p><p> 借助于第三方的開發(fā)庫,實現(xiàn)二維矢量圖形和圖像數(shù)據(jù)文件在視圖窗口中的顯示,并能夠對圖像進行簡單的處理和分析,鍛煉編寫類較大型程序的能力。要求:</p><p> ?。?)打開線數(shù)據(jù)文件china.wal,可以顯示出文件里面的線圖形——中國地圖??蓪φ誐apGIS67軟件打開的效果進行比較。有余力的同學可以考慮
36、實現(xiàn)點文件和區(qū)文件的打開和顯示。矢量圖形顯示需要借助于CDC的圖像繪制函數(shù)(CDC::MoveTo(),CDC::LineTo()等)。</p><p> 問題描述分析:題目需在MFC編寫對話窗口程序,實現(xiàn)界面化操作,并顯示中國地圖。</p><p><b> 【算法設計】</b></p><p> ?。?)設計思想:先打開數(shù)據(jù)文件,讀取每
37、個點的坐標數(shù)據(jù)并存儲,處理坐標數(shù)據(jù)為適合屏幕的坐標值,調用函數(shù)畫出曲線,重復此操作,畫出中國地圖。</p><p><b> (2)實現(xiàn)過程:</b></p><p><b> 【附錄】</b></p><p> GisFileMng.h:</p><p> #pragma once
38、</p><p> #include <fstream></p><p> #include <vector></p><p> #include <math.h></p><p> using namespace std;</p><p> typedef struct
39、D_DOT</p><p><b> {</b></p><p> double x,y;</p><p><b> }D_DOT;</b></p><p> typedef struct D_RECT</p><p><b> {</b>&l
40、t;/p><p> double xmin, ymin, xmax, ymax;</p><p><b> }D_RECT;</b></p><p> typedef vector<D_DOT>LinStru;</p><p> class CGisFileMng</p><p&g
41、t;<b> {</b></p><p><b> public:</b></p><p> CGisFileMng(void);</p><p> virtual ~CGisFileMng(void);</p><p><b> public:</b></p&
42、gt;<p> void ReadMap(char *fileName);</p><p> void DispMap(CDC* pDC);</p><p> longm_lLinNum;</p><p> vector<LinStru>m_linList;</p><p> CRectm_scr
43、eenRect;</p><p> D_RECTm_mapRect;</p><p><b> };</b></p><p> GisFileMng.cpp:</p><p> #include "StdAfx.h"</p><p> #include "
44、;GisFileMng.h"</p><p> CGisFileMng::CGisFileMng(void)</p><p><b> {</b></p><p> m_lLinNum = 0;</p><p> m_mapRect.xmin = 100000000;</p><p&
45、gt; m_mapRect.ymin = 100000000;</p><p> m_mapRect.xmax = -100000000;</p><p> m_mapRect.ymax = -100000000;</p><p><b> }</b></p><p> CGisFileMng::~CGisFi
46、leMng(void)</p><p><b> {</b></p><p><b> }</b></p><p> void CGisFileMng::ReadMap(char *fileName)</p><p><b> {</b></p><
47、p> fstreamfile;</p><p> charszBuf[256]="";</p><p> file.open(fileName);</p><p> //WMAP9021</p><p> file.getline(szBuf, 256);</p><p>&
48、lt;b> //線的條數(shù)</b></p><p> file.getline(szBuf, 256);</p><p> m_lLinNum = atoi(szBuf)-1;</p><p> for(long i=0; i<m_lLinNum; ++i)</p><p><b> {</b&
49、gt;</p><p> longlLinDotNum = 0;</p><p> vector<D_DOT>linDots;</p><p><b> //線參數(shù)</b></p><p> file.getline(szBuf, 256);</p><p> file
50、.getline(szBuf, 256);</p><p> lLinDotNum = atoi(szBuf);</p><p><b> //線文件結構 </b></p><p> //邏輯結構:文件頭 線數(shù) 一號線 二號線 ...</p><p><b> //具體為:</b></
51、p><p> //A、文件頭,8字節(jié)</p><p> //WMAP9021(老的文件為WMAP6021、WMAP7021、WMAP8021)</p><p><b> //B、線數(shù) n</b></p><p><b> //C、1一號線</b></p><p> //
52、線型號 輔助線型號 線色 線寬 X系數(shù) Y系數(shù) 輔助色 圖層 透明輸出</p><p><b> //線點數(shù)m1</b></p><p><b> //x1 y1</b></p><p><b> //x2 y2</b></p><p><b> //...&
53、lt;/b></p><p><b> //xm1 xm2</b></p><p><b> //ID線長度</b></p><p> for(long j=0; j<lLinDotNum; ++j)</p><p><b> {</b></p>
54、<p> D_DOT dot;</p><p> file.getline(szBuf, 256);</p><p> char* temX = strtok(szBuf, ",");</p><p> dot.x = atof(temX);</p><p> char* temY = strto
55、k(NULL, ",");</p><p> dot.y = atof(temY);</p><p> linDots.push_back(dot);</p><p> m_mapRect.xmin = min(m_mapRect.xmin, dot.x);</p><p> m_mapRect.ymin = mi
56、n(m_mapRect.ymin, dot.y);</p><p> m_mapRect.xmax = max(m_mapRect.xmax, dot.x);</p><p> m_mapRect.ymax = max(m_mapRect.ymax, dot.y);</p><p><b> }</b></p><p&
57、gt; m_linList.push_back(linDots);</p><p> linDots.clear();</p><p><b> //線ID</b></p><p> file.getline(szBuf, 256);</p><p><b> }</b></p>
58、;<p> file.close();</p><p><b> }</b></p><p> void CGisFileMng::DispMap(CDC* pDC)</p><p><b> {</b></p><p> for(long i=0; i<m_lLinN
59、um; ++i)</p><p><b> {</b></p><p> long lLinDotsNum = m_linList[i].size();</p><p> if(lLinDotsNum<=1)</p><p><b> continue;</b></p>
60、<p> CPoint*pnts = new CPoint[lLinDotsNum];</p><p> for(long j=0; j<lLinDotsNum; ++j)</p><p><b> {</b></p><p> pnts[j].x = (m_linList[i][j].x - m_mapRect.xm
61、in)/(m_mapRect.xmax-m_mapRect.xmin)*m_screenRect.Width()*.7;</p><p> pnts[j].y = m_screenRect.Height() - (m_linList[i][j].y - m_mapRect.ymin)/(m_mapRect.ymax-m_mapRect.ymin)*m_screenRect.Height();</p>
62、<p><b> }</b></p><p> pDC->Polyline(pnts, lLinDotsNum);</p><p><b> if(pnts)</b></p><p><b> {</b></p><p> delete pnts;
63、</p><p> pnts = NULL;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> HHGView.cpp</p><p>
64、 #include "stdafx.h"</p><p> #include "HHG.h"</p><p> #include "HHGDoc.h"</p><p> #include "HHGView.h"</p><p> #ifdef _DEBUG
65、</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> static char THIS_FILE[] = __FILE__;</p><p><b> #endif</b></p><p> // CHHGV
66、iew</p><p> IMPLEMENT_DYNCREATE(CHHGView, CView)</p><p> BEGIN_MESSAGE_MAP(CHHGView, CView)</p><p> //{{AFX_MSG_MAP(CHHGView)</p><p> ON_COMMAND(NNNNN, OnNNNNN)<
67、/p><p> //}}AFX_MSG_MAP</p><p> // Standard printing commands</p><p> ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)</p><p> ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnF
68、ilePrint)</p><p> ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)</p><p> END_MESSAGE_MAP()</p><p> // CHHGView construction/destruction</p><p> CHHGVi
69、ew::CHHGView()</p><p><b> {</b></p><p> // TODO: add construction code here</p><p><b> }</b></p><p> CHHGView::~CHHGView()</p><p&
70、gt;<b> {</b></p><p><b> }</b></p><p> BOOL CHHGView::PreCreateWindow(CREATESTRUCT& cs)</p><p><b> {</b></p><p> // TODO: Mo
71、dify the Window class or styles here by modifying</p><p> // the CREATESTRUCT cs</p><p> return CView::PreCreateWindow(cs);</p><p><b> }</b></p><p> //
72、 CHHGView drawing</p><p> void CHHGView::OnDraw(CDC* pDC)</p><p><b> {</b></p><p> CHHGDoc* pDoc = GetDocument();</p><p> ASSERT_VALID(pDoc);</p>
73、<p> // TODO: add draw code for native data here</p><p> if(m_fileMng.m_linList.size()>0)</p><p> m_fileMng.DispMap(pDC);</p><p><b> }</b></p><p&
74、gt; // CHHGView printing</p><p> BOOL CHHGView::OnPreparePrinting(CPrintInfo* pInfo)</p><p><b> {</b></p><p> // default preparation</p><p> return DoP
75、reparePrinting(pInfo);</p><p><b> }</b></p><p> void CHHGView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)</p><p><b> {</b></p><p>
76、 // TODO: add extra initialization before printing</p><p><b> }</b></p><p> void CHHGView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)</p><p><b> {</b
77、></p><p> // TODO: add cleanup after printing</p><p><b> }</b></p><p> // CHHGView diagnostics</p><p> #ifdef _DEBUG</p><p> void CHHGV
78、iew::AssertValid() const</p><p><b> {</b></p><p> CView::AssertValid();</p><p><b> }</b></p><p> void CHHGView::Dump(CDumpContext& dc) c
79、onst</p><p><b> {</b></p><p> CView::Dump(dc);</p><p><b> }</b></p><p> CHHGDoc* CHHGView::GetDocument() // non-debug version is inline</
80、p><p><b> {</b></p><p> ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHHGDoc)));</p><p> return (CHHGDoc*)m_pDocument;</p><p><b> }</b></p&
81、gt;<p> #endif //_DEBUG</p><p> // CHHGView message handlers</p><p> void CHHGView::OnNNNNN() </p><p><b> {</b></p><p> // TODO: Add your comman
82、d handler code here</p><p> m_fileMng.ReadMap("d:\\china.wal");</p><p> GetClientRect(&m_fileMng.m_screenRect);</p><p> Invalidate();</p><p><b>
83、 }</b></p><p> china.wal文件</p><p><b> WMAP9021</b></p><p><b> 4639</b></p><p> 3,0,141,1.000000,1.000000,1.000000,0,100,0</p>&
84、lt;p><b> 2</b></p><p> 121.500000,53.333820</p><p> 121.491600,53.333183</p><p> 1,0.008424</p><p> 3,0,141,1.000000,1.000000,1.000000,0,100,0</p
85、><p><b> 2</b></p><p> 121.500000,53.333820</p><p> 121.500000,53.316879</p><p> 2,0.016941</p><p> 3,0,141,1.000000,1.000000,1.000000,0,100,
86、0</p><p><b> 2</b></p><p> 121.491600,53.333183</p><p> 121.500000,53.316879</p><p> 3,0.018341</p><p> 3,0,141,1.000000,1.000000,1.000000
87、,0,100,0</p><p><b> 6</b></p><p> 126.000000,51.067307</p><p> 126.004463,51.066872</p><p> 126.010468,51.069382</p><p> 126.013809,51.067
88、867</p><p> 126.012627,51.064438</p><p> 126.000000,51.057987</p><p> 4,0.032468</p><p> 3,0,141,1.000000,1.000000,1.000000,0,100,0</p><p><b> 2
89、</b></p><p><b> 總 結</b></p><p> 此次C++課程設計持續(xù)一個禮拜,主要做了三題。題目第一題較為簡單,經過學長提示,比較順利的編寫出程序。但因為考慮不周到,編寫的代碼有較大局限性,適用范圍不廣,應該使用數(shù)組,可有效使程序使用范圍得到延展。第二第三題涉及之前較多內容,需要對之前內容融會貫通,靈活應用,同時有較多之前未接
90、觸過內容,且因為知識運用不熟練,程序編寫過程中十分困難,無從下手。題目中學習到很多,第二題教會我們超級指針的使用。第三題由于題目需要,要求使用MFC,這個新奇的工具引起大家的好奇心,大家都較為認真的學習,學習過程中,老師教了我們很多之前尚未學過的函數(shù),如vector函數(shù),strtok函數(shù)等等。整個程序較之前接觸的非常龐大繁雜,難以理清順序,摸不著頭緒,但經過老師和學長以及同學的多次講解,雖然任然無法順利編寫程序,但已經能夠讀懂程序。&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設計-- c++面向對象程序設計
- c++面向對象程序設計課程設計報告---學籍管理系統(tǒng)
- c++面向對象程序設計
- c++面向對象課程設計報告
- c++程序設計課程設計報告
- 面向對象程序設計與c++
- 面向對象程序設計題庫(c++)
- 《c++面向對象程序設計》課程設計——職工信息管理系統(tǒng)
- 面向對象程序設計課程設計報告
- 面向對象程序設計課程設計報告
- 《c++語言程序設計》課程設計報告
- c++課程設計--c++程序設計語言
- 面向對象程序設計課程設計
- 面向對象的程序設計課程設計報告
- 《c++程序設計》課程設計報告--訂票系統(tǒng)
- 【課程設計】面向對象程序設計
- 面向對象程序設計課程設計
- 面向對象程序設計課程設計
- c++面向對象程序設計第5版
- 面向對象程序設計c++課后題答案
評論
0/150
提交評論