您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > c++面向对象程序设计课程设计报告
面向对象程序设计课程设计报告1《面向对象程序设计》课程设计报告学号:班级序号:姓名:指导老师:花卫华成绩:中国地质大学(武汉)信息工程学院遥感系2013年6月面向对象程序设计课程设计报告2实习题目一【题目需求】题号及题目:(1)有0、1、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。□□□+□□□=□□□□,如437+589=1026问题描述:将0-9这10个数以特定顺序不重复排列成一个正确的加法算式,输出并统计这样的算式的个数。问题分析:因为三位数相加最多为两千以内的四位数,而四位数首位又不能为零,即四位数首位为一。则两个三位数首位从二开始循环。【算法设计】(1)设计思想:把三位数逐位判别,先得到两个各个位皆不相等的三位数,相加得到四位数,再判断选出四位数与两个三位数各个位皆不相等的数,即所求排列。(2)实现过程:逐位判断得出第一个三位数,同理得出第二个三位数,再求得四位数的各个位,判断,若符合要求则输出并计数。【感想】代码设计过程中,借鉴学长思路,但未用数组,造成此程序有局限性,适用范围降低。设计程序过程中应考虑到程序的适用性。【附录】#includeiostreamusingnamespacestd;voidmain(){intNumG1,NumS1,NumB1;intNumG2,NumS2,NumB2;intRosult;intn1,n2,n3,n4,n=0;for(NumB1=2;NumB110;NumB1++)面向对象程序设计课程设计报告3{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)||(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;n4=Rosult-1000*n1-100*n2-10*n3;//取出四位数的各个位;if((n1!=NumG1)&&(n1!=NumS1)&&(n1!=NumB1)&&(n1!=NumG2)&&(n1!=NumS2)&&(n1!=Nu面向对象程序设计课程设计报告4mB2)&&(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!=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;}面向对象程序设计课程设计报告5实习题目二【题目需求】题号及题目:(2)超级指针使用练习:C++里使用new运算符时,一般要求手动利用delete语句进行内存释放。这是因为普通的new申请的内存和普通变量所占的内存不同:普通变量在定义时,有系统在栈中按照变量类型申请相应大小的内存,变量的生命周期结束后,其内存自动释放,而new语句则是在堆上申请内存,指针变量生命周期结束后,堆中申请的内存依然占有,需要用户手动delete释放。为了避免忘记delete指针变量带来的内存泄漏,可以利用超级指针的思想通过栈变量的特征来管理堆变量内存:即栈变量的生命周期结束时,自动寻找关联的堆变量,进而释放其内存。问题描述:(1)定义一个基类baseObject,实现ref()和unref()两个对象引用计数接口。(2)定义一个模板类ref_ptr,实现任意类的泛化特征。(3)编写测试接口,实现类对象内存的自动释放。问题分析:注意运算符的重载,模板类的定义以及基类的派生。【算法设计】设计思想:定义基类和模板类,对运算符进行重载,通过对构造函数及析构函数的调用,实现超级指针。【附录】#includeiostreamusingnamespacestd;classbaseObject{public:baseObject(){count=0;std::coutObjecthascreatestd::endl;}~baseObject(){std::coutObjecthasdestroystd::endl;}voidref(){count++;}voidunref(){count--;面向对象程序设计课程设计报告6if(!count){delete(this);}}voidFun(){cout超级指针练习成功!endl;}private:intcount;};templateclassTclassref_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;}operatorT*()const{return_ptr;}T*operator-(){return_ptr;}T&operator*(){return*_ptr;}ref_ptr&operator=(T*pa){T*temp=_ptr;面向对象程序设计课程设计报告7_ptr=pa;if(_ptr){_ptr-ref();}if(temp){temp-unref();}return*this;}private:T*_ptr;};voidmain(){ref_ptrbaseObjectadvPtr=newbaseObject;advPtr-Fun();}实习题目三【题目需求】题号及题目:综合题:借助于第三方的开发库,实现二维矢量图形和图像数据文件在视图窗口中的显示,并能够对图像进行简单的处理和分析,锻炼编写类较大型程序的能力。要求:(1)打开线数据文件china.wal,可以显示出文件里面的线图形——中国地图。可对面向对象程序设计课程设计报告8照MapGIS67软件打开的效果进行比较。有余力的同学可以考虑实现点文件和区文件的打开和显示。矢量图形显示需要借助于CDC的图像绘制函数(CDC::MoveTo(),CDC::LineTo()等)。问题描述分析:题目需在MFC编写对话窗口程序,实现界面化操作,并显示中国地图。【算法设计】(1)设计思想:先打开数据文件,读取每个点的坐标数据并存储,处理坐标数据为适合屏幕的坐标值,调用函数画出曲线,重复此操作,画出中国地图。(2)实现过程:【附录】GisFileMng.h:#pragmaonce#includefstream#includevector#includemath.husingnamespacestd;typedefstructD_DOT{doublex,y;}D_DOT;typedefstructD_RECT{doublexmin,ymin,xmax,ymax;打开数据文件读入数据并存储处理数据在窗口显示图像画出图像面向对象程序设计课程设计报告9}D_RECT;typedefvectorD_DOTLinStru;classCGisFileMng{public:CGisFileMng(void);virtual~CGisFileMng(void);public:voidReadMap(char*fileName);voidDispMap(CDC*pDC);longm_lLinNum;vectorLinStrum_linList;CRectm_screenRect;D_RECTm_mapRect;};GisFileMng.cpp:#includeStdAfx.h#includeGisFileMng.hCGisFileMng::CGisFileMng(void){面向对象程序设计课程设计报告10m_lLinNum=0;m_mapRect.xmin=100000000;m_mapRect.ymin=100000000;m_mapRect.xmax=-100000000;m_mapRect.ymax=-100000000;}CGisFileMng::~CGisFileMng(void){}voidCGisFileMng::ReadMap(char*fileName){fstreamfile;charszBuf[256]=;file.open(fileName);//WMAP9021file.getline(szBuf,256);//线的条数file.getline(szBuf,256);m_lLinNum=atoi(szBuf)-1;for(longi=0;im_lLinNum;++i){longlLinDotNum=0;vectorD_DOTlinDots;//线参数面向对象程序设计课程设计报告11file.getline(szBuf,256);file.getline(szBuf,256);lLinDotNum=atoi(szBuf);//线文件结构//逻辑结构:文件头线数一号线二号线...//具体为://A、文件头,8字节//WMAP9021(老的文件为WMAP6021、WMAP7021、WMAP8021)//B、线数n//C、1一号线//线型号辅助线型号线色线宽X系数Y系数辅助色图层透明输出//线点数m1//x1y1//x2y2//...//xm1xm2//ID线长度for(longj=0;jlLinDotNum;++j){D_DOTdot;file.getline(szBuf,256);char*temX=strtok(szBuf,,);dot.x=atof(temX);char*temY=strtok(NULL,,);dot.y=atof(temY);面向对象程序设计课程设计报告12linDots.push_back(dot);m_mapRect.xmin=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_lin
本文标题:c++面向对象程序设计课程设计报告
链接地址:https://www.777doc.com/doc-3534802 .html