C++实习报告.docx
- 文档编号:9017025
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:26
- 大小:64.53KB
C++实习报告.docx
《C++实习报告.docx》由会员分享,可在线阅读,更多相关《C++实习报告.docx(26页珍藏版)》请在冰豆网上搜索。
C++实习报告
1教学实习的内容
综合运用课堂上所学的《C++程序设计》知识,实现一个综合C++程序设计。
复数计算器程序
程序说明
该程序是设计一个小型实用复数计算器,可以完成复数的加减操作
程序设计要求
(1)增加运算符重载功能,可以重载+=、-=、++、――、>=、<=、!
=运算符,其中,>=、<=是针对复数的模进行运算;
(2)设计复数加减法运算,要求在两位数以内进行,且减法运算结果不能是负数,增加乘法运算功能,要求乘法为一位数的运算;
(3)定义重载函数,要求可以接收从键盘输入的a+i*b形式的复数,在程序中可以识别出实部、虚部并正确赋值;
(4)定义用户类,可以记录不同用户使用计算器的记录,记录以文件的形式保存在计算机内,开机时要求用户输入用户名,显示该用户以前的记录;
(5)用户记录包括:
做了多少次加减法、乘法,进行测试的次数,后3次的测试平均分等,在退出计算器程序时用新的用户记录代替原有的记录。
2教学实习的目的
《C++程序设计》课程是高校计算机科学与技术专业的一门重要专业基础课,也是相关专业(如软件工程、信息管理与信息系统等)的专业基础课。
是《算法与数据结构》、《软件工程》、《算法与分析与设计》等课程的先修课程,在整个专业教学体系中占有非常重要的地位。
《C++程序设计》不仅具有很强的理论性,更是一门实践性非常强的课程,其实践教学环节的效果直接影响着理论教学的效果。
本课程注重边学边练,但由于课堂教学和实验的深度与广度有限,练习的深度也受到一定的限制。
为了弥补这一点,而设置了《C++程序设计》实践教学方案,主要以教学实习的方式对学生进行综合训练,培养实际分析问题、编程和动手能力,通过教学实习,帮助学生系统地掌握面向对象程序设计方法及各种编程技巧,努力成为自由驾驭程序设计语言的软件编程能手。
3教学实习的要求
通过综合性教学实习训练,使学生达到以下的目的和要求:
1)结合《C++程序》课程中所学的理论知识、按要求独立设计方案,培养学生独立分析与解决问题的能力;
2)学会查阅相关手册和资料,通过查阅手册和资料,进一步熟悉常用方法的用途和技巧,并掌握这些方法的具体含义和如何使用这些方法解决实际问题;
3)掌握系统设计的基本过程;
4)掌握系统开发的调试技术,熟悉常用调试方法的使用;
5)认真撰写总结报告,培养严谨的作风和科学的态度。
4教学实习设计步骤
4.1问题理解和分析
充分地分析和理解问题本身,弄清要求做什么(Whattodo),本阶段要产生软件需求文档,包含在此份报告中。
4.2确定解决问题的方法
找到解决问题的主要思路,要怎么做(Howtodo),此阶段可考虑系统的功能和模块划分等,要产生系统(概要)设计说明书,包含在此份报告中。
4.3详细设计和编码
确定算法的主要流程,再进行编程。
在此阶段可先在纸上写程序,尽量弄清楚了再上机运行。
在编程过程中注意程序结构的清晰性,避免出现明显的程序逻辑错误和语法错误。
本阶段也要编写系统详细设计说明书,但由于时间的限制,可以不必写在报告中。
4.4程序调试和运行
要求掌握程序调试、排错的方法,增加编程的感觉和解决问题的成就感。
4.5完成教学实习报告
本步骤是在系统设计完成后,整理系统开发过程全部资料的过程。
主要内容包括:
1)问题描述
结合《C++程序》课程中所学的理论知识、要求设计一个复数计算器,实现复数的加减乘以及自增自减等功能,通过运算符重载类的定义等实现。
实现一个人性化的复数计算器,方便复数计算。
2)分析、设计、实现描述
见附件。
3)总结
重载问题
定义Ccomplex这个类时,需要重载输入输出,缺少后导致程序无法正常运行,并且必须以友元函数重载。
而且在类外输入复数时,还需要重载输入,因为如果不重载,就默认为输入的为整形数据,当输入复数时,编译就会出错。
可以通过istream&operator>>(istream&is,CComplex&)实现输出重载。
同样,复数的输出也需要重载输出。
重载输出可以通过ostream&operator<<(ostream&os,CComplex&)实现。
复数的输入
这是个比较难的,尤其先要确定复数的符号,这个可以通过数组实现,这是通过网上查询而得到的解决方案。
程序可以参考源代码。
产生随机数问题
主要是rand这个函数没有在课本上涉及到,只好到通过XX了解了一点。
用户信息记录问题
很容易忽略新用户不需记录这一点,一旦忘记,编译时就会出现该用户没有定义,细节确实挺重要的。
清屏问题
清屏需要用到system(“cls”)指令得以实现。
C++程序设计涉及到面向对象程序设计、C++语言语法以及算法等三个方面的内容,语法比较复杂,内容十分广泛,需要熟练这门语言的语法结构才能更好的运用,每个方面都是重点,同时,细节也是相当重要的,忽略细节,就不可能完成任何一个任务。
这要求我们不仅要整体把握C++的各项用法,还得注重细节。
细节决定成败。
5总结与体会
C++涉及概念很多,语法比较复杂,内容十分广泛,刚开始感觉比较难,但是,通过一段时间的学习,感觉其实C++并没有什么难的,这主要还是要归功于老师,是老师教给了我们好的学习方向,引导我们去学习。
其实要教好这门课,绝不是一个纯技术问题,需要综合多方面因素进行考虑,做出合理的决策和安排。
实践是检验真理的唯一标准,实践能积累我们的经验,找到我们的不足,更好的掌握我们所要学习的东西。
这次的教学实践活动,使我学到了很多知识,弥补了我的很多漏洞,让我变得更爱思考,精益求精。
通过这个很小但对我来说却不小的程序,我多少有点体会到C++相对于C的优越性,方便多了。
本来C++语法复杂,内容又多,如果对它缺乏系统的了解,将难以真正应用,编出来的程序将会错误百出,编译出错,事倍功半。
而这次实践活动使我认识到了细节其实很重要,正是认识到了细节的重要性,使得我更加仔细,减少了编译出错几率,真的是事倍功半啊!
同时使我对C++有了些许系统的了解,真正运用到实处,对C++的认识上升了一个层次。
附录一:
系统需求、系统设计说明书
1.该程序主要处理复数运算,因此,输入输出只能为复数,其他数据不能处理。
2.程序说明此程序主要是解决复数计算问题,包括复数的加减成乘、自加自减以及复数的比较等功能。
3.该程序具体用法:
先根据系统提示输入使用者的姓名
进入主页面之后,选择你要进行的复数运算方式:
1.多复数加法2.多复数减法3.测试100以内的复数加减法运算4.多复数乘法5.复数自加6.复数自减7.复数比较0.退出计算器程序,根据你的需要,选择运算方式,例如选择多复数加法,输入1再按回车键,根据提示完成运算。
如果想退出,输入0在回车即可。
在退出前会显示你的操作记录(如做了多少次加法等),再按回车键退出程序。
附录二:
程序代码
/************************************************************************
*《C++程序设计实践指导》
*
*第2章2.1一个复数计算器程序
*
************************************************************************/
#include
#include
#include
#include
#include
#include
//#defineEPSlen-5//定义精度常数
usingnamespacestd;
namespaceNameCComplex//定义命名空间NameCComplex
{
/*-----------------------------------------------------------------------
|部分A:
|复数类CComplex的声明和定义,以及结构体类型用户User的定义|----------------------------------------------------------------------*/
/*---------------------------------
|复数类CComplex的声明
--------------------------------*/
classCComplex
{
private:
doubleReal,Image;//分别为复数的实部和虚部
public:
CComplex(doublereal=0,doubleimage=0)//构造函数
{
Real=real;Image=image;
}
friendistream&operator>>(istream&is,CComplex&com);//重载输入
friendostream&operator<<(ostream&os,CComplex&com);//重载输出
CComplexoperator+(CComplex&com);//加法重载
CComplexoperator-(CComplex&com);//减法重载
CComplexoperator*(CComplex&com);//乘法重载
CComplexoperator+=(CComplex&com);//加法赋值重载
CComplexoperator-=(CComplex&com);//减法赋值重载
CComplexoperator*=(CComplex&com);//乘法赋值重载
CComplexoperator++();//自加
CComplexoperator--();//自减
doublemod(void);
intoperator>(CComplex&com);
intoperator<(CComplex&com);
intoperator!
=(CComplex&com);
intoperator==(CComplex&com);
};
/*------------------------------------
|结构体类型用户User的定义
-----------------------------------*/
structUser
{
charszName[20];//用户名
intnTime;//使用次数
intnTest;//测试次数
doubledlAve;//平均成绩
intnAdd;//加法次数
intnSub;//减法次数
intnMul;//乘法次数
doubledlScore[3];//3次测试得分
}user;
/*---------------------------------------------------------------
|复数类CComplex的类外定义部分
---------------------------------------------------------------*/
//重载运算符“++”,实部与虚部均加1
CComplexCComplex:
:
operator++()
{
Real++;
Image++;
return*this;
}//重载运算符“--”,实部与虚部均减1
CComplexCComplex:
:
operator--()
{
Real--;
Image--;
return*this;
}//求复数的模,返回(实部^2+虚部^2)开方
doubleCComplex:
:
mod()
{
returnsqrt(Real*Real+Image*Image);
}//重载运算符“>”,比较模的大小
intCComplex:
:
operator>(CComplex&com)
{
if(mod()>com.mod())
return1;//若大,则返回1
else
return0;
}//重载运算符“<”,比较模的大小
intCComplex:
:
operator<(CComplex&com)
{
if(mod() return1;//若小,则返回1 else return0; }//重载运算符“! =”,分别判断复数的实部与虚部 intCComplex: : operator! =(CComplex&com) { if(*this==com) return0; else return1; }//重载复数的输入,a+bi的形式 istream&operator>>(istream&is,CComplex&com) { cout<<"输入复数: "; chars[80]; is>>s;//用字符串的形式接收复数 intlen=strlen(s);//求出字符串的长度 intn=0,sign=1;//其中的n值为当前从字符串中提取出的数字,会在下面的while语句中得到确定的值 //sign为状态变量,表示数值的正负符号,以辅助辨认正负值 com.Image=com.Real=0; //判断接收的字符串是否合法 for(intk=0;k { if((s[k]<'0'||s[k]>'9')&&(s[k]! ='+'&&s[k]! ='-'&&s[k]! ='i')) { cout<<"error"< returnis;//错误,输出出错信息并返回 } }//顺序识别字符串中各字符 for(intk=0;k { if(n! =0&&(s[k]=='-'||s[k]=='+'))//当前字符是否为符号位 { com.Real=sign*n;//是符号位,且n! =0,即n已被赋值(通过下面的whlie语句),表明当前读取的是虚部的符号 n=0;//将原n*sign值(带正负号的数值)赋给实部后,将n清零,准备下一次继续接收并判断是否为虚部的值 } if(s[k]=='-')//当前字符若为负号 { sign=-1;k++;//给符号标志变量sign赋值,表示为负数 } if(s[k]=='+')//当前字符若为正号 { sign=1;k++;//给符号标志变量sign赋值,表示为正数 } if(s[k]=='i')//若当前字符为“i” { if(k! =len-1)//判断字符'i'是否为字符串中最后一个字符 cout<<"error\n";//如果不是,说明复数数据格式错误 else com.Image=sign*n;//是最后一个字符,复数对象已接收完,用sign*n为虚部赋值 break; } while(s[k]>='0'&&s[k]<='9')//当前字符若在0~9之间,则将数字字符转换成数字数值 { n=n*10+s[k]-'0'; k++; } } if(s[len-1]! ='i'&&n! =0)//如果最后一个字符不是'i',表示复数对象内只有实部,没有虚部,如: -a com.Real=n*sign; returnis; } //重载复数的输出 ostream&operator<<(ostream&os,CComplex&com) { if(fabs(com.Image)==0)//如果虚部为0 os< elseif(fabs(com.Real)==0)//如果实部为0 os< elseif(com.Image>0) os< else os< returnos; } //加法重载 CComplexCComplex: : operator+(CComplex&com) { CComplexsum; sum.Real=Real+com.Real;//实部相加 sum.Image=Image+com.Image;//虚部相加 returnsum; } //乘法重载 CComplexCComplex: : operator*(CComplex&com) { CComplexmulti; multi.Real=Real*com.Real-Image*com.Image;//乘积实部 multi.Image=Real*com.Image+Image*com.Real;//乘积虚部 returnmulti; } //减法重载 CComplexCComplex: : operator-(CComplex&com) { CComplexsub; sub.Real=Real-com.Real;//实部相减 sub.Image=Image-com.Image;//虚部相减 returnsub; } //加法赋值重载 CComplexCComplex: : operator+=(CComplex&com) { Real=Real+com.Real;//实部 Image=Image+com.Image;//虚部 return*this; } //减法赋值重载 CComplexCComplex: : operator-=(CComplex&com) { Real=Real-com.Real;//实部 Image=Image-com.Image;//虚部 return*this; }//乘法赋值重载 CComplexCComplex: : operator*=(CComplex&com) { doublenReal=Real*com.Real-Image*com.Image;//乘积实部 doublenImage=Real*com.Image-Image*com.Real;//乘积虚部 Real=nReal; Image=nImage; return*this; } //重载==运算符,分别比较两个复数对象的实部和虚部 intCComplex: : operator==(CComplex&com) { if(Real==com.Real&&Image==com.Image) return1;//实部与虚部部分相等,则返回1 else return0; } /*---------------------------------------------------------------------------- |部分B: |测试函数voidTest(void) |实现复数的加法函数voidAdd() |实现复数的减法函数voidSub() |实现复数的乘法函数voidMul() |实现复数的自加函数voidAdd1() |比较两个复数的大小函数voidCompare() |输出本次用户使用计算器的情况记录voiduserprint() |当前用户使用完计算器,保存或更新用户资料函数voidSaveFile() | ----------------------------------------------------------------------------*/ //测试函数,随机出10道运算题,可以打分 voidTest(void) { user.nTest++;//用户测试次数加1 cout<<"共10道题,作10以内的加减运算,满分100分: \n"; doublereal1,real2,image1,image2,real3,real4,image3,image4;//1和2分别代表两个待相加的复数的实部和虚部,3和4则为相乘 CComplexanswer,temp; intscore=0; charop; for(inti=0;i<=9;i++) { real1=rand()%200-100;//产生的随机数是两位数,可以是正数或负数 image1=rand()%200-100; real2=rand()%200-100; image2=rand()%200-100; CComplexa(real1,image1),b(real2,image2);//用产生的随机数对象分别初始化两个复数对象 real3=rand()%20-10;//产生的随机数是一位数,可以是正数或负数 image3=rand()%20-10; real4=rand()%20-10; image4=rand()%20-10; CComplexc(real3,image3),d(r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实习 报告