地大2013C++课程实习报告

  • 格式:pdf
  • 大小:596.70 KB
  • 文档页数:34

计算机高级语言课程设计报告姓名:学号:学院:专业:目录1、实习题目一 (3)2、实习题目二 (5)3、实习题目三 (9)4、实习题目四 (13)5、实习题目五 (17)6、实习题目六 (23)8、总结 (36)实习题目一【需求规格说明】1、有1、2、3、4、5、6六个数,能组成多少个互不相同且无重复数字的三位数?都是多少?问题描述及分析:这道题是数学中的排列组合问题,可以利用三个for循环来解决。

【算法设计】(1)设计思想:利用for循环,使输出三位数的百位、十位和个位都小于7,并用判断语句限定个、十、百位均不相同,然后输出百位数*100+十位数*10+个位数的结果。

而求输出数字的个数,只要从0开始,每次判断通过就加1,一直到循环结束即可。

最后利用MFC,将程序结果呈现出来。

(2)设计表示:本程序结构较为简单,需注意细节。

有三个大循环,for(i=1;i<7;i++)for(j=1;j<7;j++)for(k=1;k<7;k++),用i!=j&&j!=k&&k!=i限制i j k,输出结果100i+10j+k然后再运用到MFC中保存在对话框的cpp源文件里。

【调试报告】开始不知道怎么用MFC文本框,就直接用cpp运行保存。

后来学习了解了MFC对话框,就对原程序稍加更改,用MFC对话框运行程序。

--------------------Configuration:1-Win32Debug--------------------1.exe-0error(s),0warning(s)【附录】(1)源程序清单//1Dlg.cpp:implementation file#include"stdafx.h"#include"1.h"#include"1Dlg.h"#ifdef_DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#endif//函数void CMy1Dlg::OnButton1(){UpdateData();CString str;int i,j,k;m_count=0;//个十百位在1~6之间for(i=1;i<7;i++){for(j=1;j<7;j++){for(k=1;k<7;k++){if(i!=j&&j!=k&&k!=i)//3个位数之间无重复{int b=i*100+j*10+k;str.Format("%d",b);//10进制数转换为cstringm_a.AddString(str);//将结果在编辑框中显示出来m_count++;}}}}UpdateData(FALSE);//TODO:Add your control notification handler code here}(2)运行结果:实习题目二【需求规格说明】5、文本文件中有一组整数,以空格分隔,要求排序后输出到另一个文件中。

问题描述及分析:此题需要利用到输入输出流以及排序。

【算法设计】(1)设计思想:在.txt的文档中输入一组数字,以空格分开,保存后能在C++中将程序打开并读出这一列的数据在另一个txt文件中输出。

(2)设计表示:用输出输入流打开输入文件并用getline函数读取文档文本中的数字。

【算法设计】(1)设计思想:用输入输出流建立对象,然后调用这个对象的open,close函数来打开和关闭文件。

当打开文件后再用冒泡法排序文件里的整数,并输出到另一个文件中。

再用MFC中的ShellExecute函数将文本文件打开。

【调试报告】刚开始输入的数据之间只能用空格间隔,不支持换行,后来进行了改进。

刚开始对MFC 不是很熟练的应用,致使开始无法用MFC中的函数打开文本文件,只能手动打开,后来用ShellExecute改进了。

--------------------Configuration:05-Win32Debug--------------------Compiling...05Dlg.cppLinking...LINK:LNK6004:Debug/05.exe not found or not built by the last incremental link;performing full link05.exe-0error(s),0warning(s)【附录】(1)源程序清单//05Dlg.cpp:implementation file//#include"stdafx.h"#include"05.h"#include"05Dlg.h"#include"fstream.h"#ifdef_DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#endif//打开原文本void CMy05Dlg::OnButton1(){ShellExecute(NULL,"open","1.txt",NULL,NULL,SW_SHOWNORMAL);//打开处理后的新文本void CMy05Dlg::OnButton3(){ShellExecute(NULL,"open","2.txt",NULL,NULL,SW_SHOWNORMAL);}void CMy05Dlg::OnButton2(){ifstream infile;infile.open("1.txt");ofstream outfile;outfile.open("2.txt");int a=1;char s;infile.get(s);while(!infile.eof()){if(s==''||s=='\n'){a++;}infile.get(s);}infile.close();infile.open("1.txt");int*p=new int[a];for(int i=1;i<a;i++){infile>>p[i];}for(int m=1;m<a;m++)//对文件里的整数排序{int j=m;int k=p[m];while(j>0&&k<p[j-1]){p[j]=p[j-1];j--;}p[j]=k;}for(int n=1;n<a;n++){outfile<<p[n]<<"";}MessageBox("已经处理完毕!");}(2)运行结果实习题目三【需求规格说明】6、计算正方体、球体和圆柱体的表面积和体积(要求使用虚函数)。

问题描述及分析:此题利用虚函数,计算表面积和体积,然后再MFC 中编。

【算法设计】(1)设计思想:这道题主要用到类的继承与派生、虚函数等在MFC 中的应用。

首先要理解虚函数,实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数。

所以将这些基类与派生类、虚函数调用等代码写在里面,然后再在对话框中对各种按钮进行编写代码(2)设计表示:Base型的指针对象是指向派生类同名覆盖函数的基类指针。

派生类、基类直接的关系图:A<<const,virtual>>+getArea():void<<const,virtual>>+getVolume ():voidCube<<const,virtual>>+getArea():void Cylinder <<const,virtual>>+getAre a():voidGlobe <<const,virtual>>+getAr ea():void【调试报告】刚开始对调用成员函数产生困然,后来反复操作解决了。

--------------------Configuration:06-Win32Debug--------------------Compiling...06Dlg.cppLinking...LINK:LNK6004:Debug/06.exe not found or not built by the last incremental link; performing full link06.exe-0error(s),0warning(s)【附录】//6_计算体积和表面积Dlg.cpp:implementation file//#include"stdafx.h"#include"6.h"#include"6Dlg.h"#ifdef_DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#endifconst double PI=3.14;class Shape//基类{public:virtual double GetArea()=0;virtual double GetVolume()=0;};class Cube:public Shape//正方体的类{public:Cube(double a):l(a){};double GetArea(){return6*l*l;}double GetVolume(){return l*l*l;}private:double l;};class Sphere:public Shape//球的类{public:Sphere(double radius):r(radius){};double GetArea(){return4*PI*r*r;}double GetVolume(){return4*PI*r*r*r/3;}private:double r;};class Cylinder:public Shape//圆柱体的类{public:Cylinder(double high,double radius):h(high),r(radius){};double GetArea(){return2*PI*r*r+2*PI*r*h;}double GetVolume(){return PI*r*r*h;}private:double h;double r;};double fun1(Shape*str)//计算表面积{return str->GetArea();}double fun2(Shape*str)//计算体积{return str->GetVolume();}void CMy6_Dlg::OnButton1() {UpdateData();Cube str1(m_2);m_6=fun1(&str1);m_9=fun2(&str1);Sphere str2(m_1);m_5=fun1(&str2);m_8=fun2(&str2);Cylinder str3(m_3,m_4);m_7=fun1(&str3);m_10=fun2(&str3);UpdateData(false);}(2)运行结果实习题目四【需求规格说明】9、定义复数的类Complex并测试其功能:(1)复数由实部、虚部两个部分组成,在类的定义中应包含保存这两部分信息的内容。