C++实习报告.docx

上传人:b****6 文档编号:9017025 上传时间:2023-02-02 格式:DOCX 页数:26 大小:64.53KB
下载 相关 举报
C++实习报告.docx_第1页
第1页 / 共26页
C++实习报告.docx_第2页
第2页 / 共26页
C++实习报告.docx_第3页
第3页 / 共26页
C++实习报告.docx_第4页
第4页 / 共26页
C++实习报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

C++实习报告.docx

《C++实习报告.docx》由会员分享,可在线阅读,更多相关《C++实习报告.docx(26页珍藏版)》请在冰豆网上搜索。

C++实习报告.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1