c++面向对象程序设计课程设计报告_第1页
c++面向对象程序设计课程设计报告_第2页
c++面向对象程序设计课程设计报告_第3页
c++面向对象程序设计课程设计报告_第4页
c++面向对象程序设计课程设计报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 面向对象程序设计课程设计报告面向对象程序设计课程设计报告学 号: 班级序号: 姓 名: 指导老师:花卫华 成 绩: 中国地质大学(武汉)信息工程学院遥感系2013年6月实习题目一【题目需求】题号及题目:(1)有0、1、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。 + = , 如437+589 = 1026问题描述:将0-9这10个数以特定顺序不重复排列成一个正确的加法算式,输出并统计这样的算式的个数。问题分析:因为三位数相加最多为两千以内的四位数,而四位数首位又不能为零,即四位数首位为一。则两个三位数首

2、位从二开始循环。【算法设计】(1)设计思想:把三位数逐位判别,先得到两个各个位皆不相等的三位数,相加得到四位数,再判断选出四位数与两个三位数各个位皆不相等的数,即所求排列。(2)实现过程:逐位判断得出第一个三位数,同理得出第二个三位数,再求得四位数的各个位,判断,若符合要求则输出并计数。【感想】代码设计过程中,借鉴学长思路,但未用数组,造成此程序有局限性,适用范围降低。设计程序过程中应考虑到程序的适用性。【附录】#includeusing namespace std;void main()int numg1,nums1,numb1;int numg2,nums2,numb2;int rosul

3、t;int n1,n2,n3,n4,n=0;for (numb1=2;numb110;numb1+)for (nums1=0;nums110;nums1+)for (numg1=0;numg110;numg1+)if (numg1=nums1)|(numg1=numb1)|(nums1=numb1) /得出符合要求的一个三位数;continue;for (numb2=2;numb210;numb2+)for (nums2=0;nums210;nums2+)for (numg2=0;numg210;numg2+)if(numg1=numg2)|(numg1=nums2)|(numg1=numb2

4、)|(nums1=numg2)|(nums1=nums2)|(nums1=numb2)|(numb1=numg2)|(numb1=nums2)|(numb1=numb2)|(numg2=nums2)|(numg2=numb2)|(nums2=numb2)/得出符合要求且符合第一个三位数的数;continue;rosult=100*(numb1+numb2)+10*(nums1+nums2)+numg1+numg2;if(rosult1000)continue;n1=rosult/1000;n2=(rosult-1000*n1)/100;n3=(rosult-1000*n1-100*n2)/10

5、;n4=rosult-1000*n1-100*n2-10*n3;/取出四位数的各个位;if(n1!=numg1)&(n1!=nums1)&(n1!=numb1)&(n1!=numg2)&(n1!=nums2)&(n1!=numb2)&(n2!=numg1)&(n2!=nums1)&(n2!=numb1)&(n2!=numg2)&(n2!=nums2)&(n2!=numb2)&(n3!=numg1)&(n3!=nums1)&(n3!=numb1)&(n3!=numg2)&(n3!=nums2)&(n3!=numb2)&(n4!=numg1)&(n4!=nums1)&(n4!=numb1)&(n4

6、!=numg2)&(n4!=nums2)&(n4!=numb2)&(n1!=n2)&(n1!=n3)&(n1!=n4)&(n2!=n3)&(n2!=n4)&(n3!=n4)coutnumb1nums1numg1+numb2nums2numg2=rosultendl;n=n+1;/得出符合要求的四位数,并计数;cout一共有n组结果。endl;实习题目二【题目需求】题号及题目:(2)超级指针使用练习:c+里使用new运算符时,一般要求手动利用delete语句进行内存释放。这是因为普通的new申请的内存和普通变量所占的内存不同:普通变量在定义时,有系统在栈中按照变量类型申请相应大小的内存,变量的生

7、命周期结束后,其内存自动释放,而new语句则是在堆上申请内存,指针变量生命周期结束后,堆中申请的内存依然占有,需要用户手动delete释放。为了避免忘记delete指针变量带来的内存泄漏,可以利用超级指针的思想通过栈变量的特征来管理堆变量内存:即栈变量的生命周期结束时,自动寻找关联的堆变量,进而释放其内存。问题描述:(1)定义一个基类baseobject,实现ref()和unref()两个对象引用计数接口。(2)定义一个模板类ref_ptr,实现任意类的泛化特征。(3)编写测试接口,实现类对象内存的自动释放。问题分析:注意运算符的重载,模板类的定义以及基类的派生。【算法设计】设计思想:定义基类

8、和模板类,对运算符进行重载,通过对构造函数及析构函数的调用,实现超级指针。【附录】#includeusing namespace std;class baseobjectpublic:baseobject () count = 0;std:coutobject has createstd:endl;baseobject () std:coutobject has destroystd:endl;void ref() count +; void unref()count -;if(!count)delete(this);void fun()cout超级指针练习成功!endl;private:in

9、t count;template class ref_ptr public:ref_ptr()_ptr = null;ref_ptr(t *ptr) _ptr = ptr;if(_ptr)_ptr-ref(); ref_ptr() if(_ptr)_ptr-unref();t* get()return _ptr;operator t* () constreturn _ptr;t* operator -()return _ptr;t& operator*()return *_ptr;ref_ptr& operator= (t *pa)t *temp = _ptr;_ptr = pa;if(_pt

10、r)_ptr-ref();if(temp)temp-unref();return *this;private:t *_ptr;void main() ref_ptradvptr = new baseobject; advptr-fun();实习题目三【题目需求】题号及题目:综合题:借助于第三方的开发库,实现二维矢量图形和图像数据文件在视图窗口中的显示,并能够对图像进行简单的处理和分析,锻炼编写类较大型程序的能力。要求:(1)打开线数据文件china.wal,可以显示出文件里面的线图形中国地图。可对照mapgis67软件打开的效果进行比较。有余力的同学可以考虑实现点文件和区文件的打开和显示。矢量

11、图形显示需要借助于cdc的图像绘制函数(cdc:moveto(),cdc:lineto()等)。问题描述分析:题目需在mfc编写对话窗口程序,实现界面化操作,并显示中国地图。【算法设计】(1)设计思想:先打开数据文件,读取每个点的坐标数据并存储,处理坐标数据为适合屏幕的坐标值,调用函数画出曲线,重复此操作,画出中国地图。(2)实现过程:打开数据文件读入数据并存储处理数据在窗口显示图像画出图像【附录】gisfilemng.h:#pragma once#include #include #include using namespace std;typedef struct d_dotdouble

12、x,y;d_dot;typedef struct d_rectdouble xmin, ymin, xmax, ymax;d_rect;typedef vectorlinstru;class cgisfilemngpublic:cgisfilemng(void);virtual cgisfilemng(void);public:void readmap(char *filename);void dispmap(cdc* pdc);longm_llinnum;vectorm_linlist;crectm_screenrect;d_rectm_maprect;gisfilemng.cpp:#inc

13、lude stdafx.h#include gisfilemng.hcgisfilemng:cgisfilemng(void)m_llinnum = 0;m_maprect.xmin = 100000000;m_maprect.ymin = 100000000;m_maprect.xmax = -100000000;m_maprect.ymax = -100000000;cgisfilemng:cgisfilemng(void)void cgisfilemng:readmap(char *filename)fstreamfile;charszbuf256=;file.open(filename

14、);/wmap9021file.getline(szbuf, 256);/线的条数file.getline(szbuf, 256);m_llinnum = atoi(szbuf)-1;for(long i=0; im_llinnum; +i)longllindotnum = 0;vectorlindots;/线参数file.getline(szbuf, 256);file.getline(szbuf, 256);llindotnum = atoi(szbuf);/线文件结构 /逻辑结构:文件头 线数 一号线 二号线 ./具体为:/a、文件头,8字节/wmap9021(老的文件为wmap6021

15、、wmap7021、wmap8021)/b、线数 n/c、1一号线/线型号 辅助线型号 线色 线宽 x系数 y系数 辅助色 图层 透明输出/线点数m1/x1 y1/x2 y2/./xm1 xm2/id线长度for(long j=0; jllindotnum; +j)d_dot dot;file.getline(szbuf, 256);char* temx = strtok(szbuf, ,);dot.x = atof(temx);char* temy = strtok(null, ,);dot.y = atof(temy);lindots.push_back(dot);m_maprect.xm

16、in = min(m_maprect.xmin, dot.x);m_maprect.ymin = min(m_maprect.ymin, dot.y);m_maprect.xmax = max(m_maprect.xmax, dot.x);m_maprect.ymax = max(m_maprect.ymax, dot.y);m_linlist.push_back(lindots);lindots.clear();/线idfile.getline(szbuf, 256);file.close();void cgisfilemng:dispmap(cdc* pdc)for(long i=0; i

17、m_llinnum; +i)long llindotsnum = m_linlisti.size();if(llindotsnum=1)continue;cpoint*pnts = new cpointllindotsnum;for(long j=0; jpolyline(pnts, llindotsnum);if(pnts)delete pnts;pnts = null;hhgview.cpp#include stdafx.h#include hhg.h#include hhgdoc.h#include hhgview.h#ifdef _debug#define new debug_new#

18、undef this_filestatic char this_file = _file_;#endif/ chhgviewimplement_dyncreate(chhgview, cview)begin_message_map(chhgview, cview)/afx_msg_map(chhgview)on_command(nnnnn, onnnnnn)/afx_msg_map/ standard printing commandson_command(id_file_print, cview:onfileprint)on_command(id_file_print_direct, cvi

19、ew:onfileprint)on_command(id_file_print_preview, cview:onfileprintpreview)end_message_map()/ chhgview construction/destructionchhgview:chhgview()/ todo: add construction code herechhgview:chhgview()bool chhgview:precreatewindow(createstruct& cs)/ todo: modify the window class or styles here by modif

20、ying/ the createstruct csreturn cview:precreatewindow(cs);/ chhgview drawingvoid chhgview:ondraw(cdc* pdc)chhgdoc* pdoc = getdocument();assert_valid(pdoc);/ todo: add draw code for native data hereif(m_filemng.m_linlist.size()0)m_filemng.dispmap(pdc);/ chhgview printingbool chhgview:onprepareprintin

21、g(cprintinfo* pinfo)/ default preparationreturn doprepareprinting(pinfo);void chhgview:onbeginprinting(cdc* /*pdc*/, cprintinfo* /*pinfo*/)/ todo: add extra initialization before printingvoid chhgview:onendprinting(cdc* /*pdc*/, cprintinfo* /*pinfo*/)/ todo: add cleanup after printing/ chhgview diag

22、nostics#ifdef _debugvoid chhgview:assertvalid() constcview:assertvalid();void chhgview:dump(cdumpcontext& dc) constcview:dump(dc);chhgdoc* chhgview:getdocument() / non-debug version is inlineassert(m_pdocument-iskindof(runtime_class(chhgdoc);return (chhgdoc*)m_pdocument;#endif /_debug/ chhgview mess

23、age handlersvoid chhgview:onnnnnn() / todo: add your command handler code herem_filemng.readmap(d:china.wal);getclientrect(&m_filemng.m_screenrect);invalidate();china.wal文件wmap902146393,0,141,1.000000,1.000000,1.000000,0,100,02121.500000,53.333820121.491600,53.3331831,0.0084243,0,141,1.000000,1.000000,1.000000,0,100,02121.500000,53.333820

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论