第一篇: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 -
110nnn 二、详细设计 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