c++实践报告.docx_第1页
c++实践报告.docx_第2页
c++实践报告.docx_第3页
c++实践报告.docx_第4页
c++实践报告.docx_第5页
免费预览已结束,剩余13页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江苏科技大学课程实践报告设计题目: 计算机程序设计实践(VC+) 设计时间: 2011. 11.13 至 2011. 11.17 学 院: 电子信息学院 专业班级: 10级自动化专业2班 学生姓名: 孔祥轩 学号 1040301208指导老师: 邹 晓 华 2011 年 11 月一、 实践任务任务一:试建立一个类PP,求出下列多项式的前n项的值。 具体要求如下(1)私有数据成员l int n:前若干项的项数。l double x:存放x的值。l double *p:根据n的大小动态申请存放Pn(x) 前n项的数组空间。(2)公有成员函数l PP(int num,double x1):构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。l PP():析构函数,释放p指向的动态内存空间。l double fun(int n1,double x):递归函数,用于求多项式的第n1项。注意:将递归公式中的n用作函数参数。本函数供process函数调用。l void process( ):完成求前n项的工作,并将它们存放到p指向的动态数组中。l void show( ):输出n和x,并将前n项以每行4个数的形式输出到屏幕上。(3)主要函数设计在主函数中完成对该类的测试。先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num项的值。任务二:建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。1、类的描述与定义(1)私有数据成员l int *array:一维整型数组。l int n:数组中元素的个数。(2)公有成员函数l MOVE(int b,int m):构造函数,初始化成员数据。l void exchange():输出平均值,并将数组中的元素按要求重新放置。l void print():输出一维数组。l MOVE():析构函数。2、主要函数设计在主程序中用数据21,65,43,87,12,84,44,97,32,55对该类进行测试任务三:定义一个类Palindrome,实现绝对回文数。设计一个算法实现对任意整型数字判断是否为绝对回文数。所谓绝对回文数,是指十进制数和二进制数均对称的数。1、类的描述与定义(1)私有数据成员l int n:整型数字。l int y: 标记是否为回文数。(2)公有成员函数l Palindrome (int x) :构造函数,根据x参数初始化数据成员n,y初始化为0。l void huiwen () :判断数n是否为绝对回文数。l void show( ) :若该数为回文数,则在屏幕显示。(3)主要函数设计在主程序中定义int a,由键盘输入数字。定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。任务四:定义一个字符串类String,实现判断该字符串是否为回文字符串。所谓回文字符串,是指该字符串左右对称。例如字符串“123321”是回文字符串。1、类的描述与定义(1)私有数据成员l char *str; l int y:标记是否为回文字符串。(2)公有成员函数l String (char *s) :构造函数,用给定的参数s初始化数据成员str。y初始化为0。l void huiwen () :判断str所指向的字符串是否为回文字符串。l void show( ) :在屏幕上显示字符串。(3)主要函数设计在主程序中定义字符串char s=”ababcedbaba”作为原始字符串。定义一个String类对象test,用s初始化test,完成对该类的测试。任务五:7建立一个类PHALANX,生成并显示一个折叠方阵。折叠方阵如下图所示。折叠方阵的生成过程为:起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。1 2 5 104 3 6 119 8 7 1216 15 14 131 2 4 3 11、类的描述与定义(1)私有数据成员l int (*p)20:指向按照折叠规律存放方阵的二维整型数组。l int startnum:折叠方阵的起始数。l int n:存放方针的层数。(2)公有成员函数l PHALANX (int s, int m ):构造函数,初始化成员数据。l void process():生成起始数为startnum的n行方阵。l void print():输出折叠方阵。l PHALANX( ):析构函数。(3)主要函数设计在主程序中对该类进行测试。任务六:建立一个类Intersection求两个整数集合的交集。1、类的描述与定义(1)私有数据成员l int set20:用数组空间set存储集合。l int len:表示该集合中元素的个数(2)公有成员函数l Intersection(int *s,int l):用s初始化集合,用变量l初始化其长度。l Intersection( ):把set中各元素和长度初始化为0。l int f(int num):判断整数num是否属于集合,是返回1,否则返回0;l Intersection operator&(Intersection t):重载&,求当前对象的集合和参数对象t的集合的交集,方法是用对象t的集合中的每个元素作为参数调用f函数,若该元素属于当前对象的集合,则把它复制给交集。l void show():输出集合。(3)在主函数中对定义的类进行测试。定义数组s1:1,3,4,5,7,8、s2:1,2,3,5,7,9,11,并用它们初始化类Intersection的对象obj1和obj2,然后调用相关的成员函数输出集合;定义对象obj3,并用obj1和obj2的与运算符结果(交集)初始化该对象,并输出交集。二、 系统设计任务一1. 任务(系统)分析1.建立一个PP类,定义私有成员 int n,douuble x,指针double*p。定义公有数据成员public:PP(int num,double x1):构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。Show的函数主体为void PP:show()coutn=nendlx=xendl;for(int i=0;in;i+)coutpitt;if(i+1)%4=0) coutendl;2.定义析构函数PP()释放p指向的动态内存空间。3.递归函数double fun(int n1,double x):,用于求多项式的第n1项。4.将递归公式中的n用作函数参数。本函数供process函数调用。5.定义函数void process( ):完成求前n项的工作,并将它们存放到p指向的动态数组中。通过void show( ):输出n和x,并将前n项以每行4个数的形式输出到屏幕上2. 系统测试输入6 3观察输出结果是否为1 3 13 63 321 1638任务二1任务(系统)分析1.定义私有成员private: float array20; int n; 公有成员public:其中定义构造函数MOVE. 构造函数MOVE如下:MOVE(float b,int m)for(int i=0;im;i+)arrayi=bi;n=m;1.定义函数void exchange():输出平均值,并将数组中的元素按要求重新放置。void print():输出一维数组。MOVE():析构函数。2.定义函数 average()输出平均值,并将数组中的元素按要求重新放置。void MOVE:average()float ave=0;int i,j;for(i=0;in;i+)ave+=arrayi;3. 定义void print():输出一维数组。2.系统测试在主程序中用数据21,65,43,87,12,84,44,97,32,55对该类进行测试,输入4 2观察输出结果是否为f=38任务三.1. 任务分析建立一个名为Palindrome的类,建立私有数据成员int n:整型数字。int y: 标记是否为回文数。公有成员函数Palindrome (int x) :构造函数,根据x参数初始化数据成员n,y初始化为0。void huiwen () :判断数n是否为绝对回文数。void show( ) :若该数为回文数,则在屏幕显示。其中回文huiwen()主体程序如下:void Palindrome:huiwen()int i=0,j=0; int m; m=n;while(m)m/=10;i+;m=n; while(m)m/=2;j+;2.系统测试在主程序中定义int a,由键盘输入数字。定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。输入99,观察输出是否为:该数为绝对回文数!十进制表示为:99 二进制表示为:1100011任务四.1. 任务分析定义一个字符串类String私有数据成员char *str; int y:标记是否为回文字符串。公有成员函数String (char *s) :构造函数,用给定的参数s初始化数据成员str。y初始化为0。void huiwen () :判断str所指向的字符串是否为回文字符串。void show( ) :在屏幕上显示字符串。用函数void String:huiwen()/判断str所指向的字符串是否为回文字符串;int n,judge=0;n=strlen(str);for(int i=0;i=0;k-)/按照折叠方阵的生成过程进行赋值;for(i=0,j=n-k-1;i=0;j-)pij=+turn;2、系统测试在主程序中对该类进行测试。输入1 4观察结果是否为1 2 5 104 3 6 119 8 7 1216 15 14 13任务六.1.任务分析1 类的描述与定义私有数据成员int set20:用数组空间set存储集合。int len:表示该集合中元素的个数公有成员函数Intersection(int *s,int l):用s初始化集合,用变量l初始化其长度。Intersection( ):把set中各元素和长度初始化为0。int f(int num):判断整数num是否属于集合,是返回1,否则返回0;Intersection operator&(Intersection t):重载&,求当前对象的集合和参数对象t的集合的交集,方法是用对象t的集合中的每个元素作为参数调用f函数,若该元素属于当前对象的集合,则把它复制给交集。void show():输出集合。定义函数Intersection operator&(Intersection t)Intersection turn;int i;for(i=0;it.len;i+)if(f(t.seti)turn.setturn.len+=t.seti;return turn;2、系统测试在主函数中对定义的类进行测试。定义数组s1:1,3,4,5,7,8、s2:1,2,3,5,7,9,11,并用它们初始化类Intersection的对象obj1和obj2,然后调用相关的成员函数输出集合;定义对象obj3,并用obj1和obj2的与运算符结果(交集)初始化该对象,并输出交集。输入集合1:1 3 4 5 7 8集合2:1 2 3 5 7 9 11交集:1 3 5 7 三、 实践小结通过这几天的c+实训总结,感觉自己不知道的真的还很多,考完c+有一段时间了,一些东西也忘记了,又重新回忆起来,c+是一门考察逻辑思维能力的课程,在做一些题时,有时想不到思路就很难做出来,于是就转而去做下一题,很多时候是突然有了灵感再去看前面的题,感觉也不是那么难了。感觉能做好c+题,关键是要静下心来,这样才能让逻辑思维不再混乱,按照一般步骤,心一定要细,不能急躁,特别是遇到一些做不出来的题时,可以先把眼前的题放一放,去做另外的题,。其实有一些题是差不多的,平时注重总结,做题时就很方便,比如可以把一些题分成一些大的类,比如求素数,倒叙,求因数等等,这些方法虽然不会单独考察,但往往会在一个大题的某些步骤中出现,所以总结一些常见的函数很重要。四、 参考文献 1 李光明主编,Visual C+6.0经典实例大制作M,中国人事出版社,20012 陈文宇,张松梅编著,C+语言教程,电子科技大学出版社M,2004 3 陈光明主编,实用Visual C+编程大全M,西安电子科技大学出版社,2000五、源程序清单任务一:#includeclass PPprivate:int n;double x;double*p;public:PP(int num,double x1)n=num;x=x1;p=new doublen;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(n11) return (2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x)/n1;void PP:process()for(int i=0;in;i+)pi=fun(i,x);void PP:show()coutn=nendlx=xendl;for(int i=0;in;i+)coutpitt;if(i+1)%4=0) coutendl;void main()int num;double x1;coutnumx1;PP items(num,x1);cess();items.show();任务二:#includeclass MOVEprivate:int *array;int n;public:MOVE(int b,int m)array=new intm;n=m;for(int i=0;im;i+)arrayi=bi;void exchange();void print();MOVE()if(array) delete array;void MOVE:exchange() float ave=0; for(int i=0;in;i+)ave+=arrayi;ave/=n;cout平均值为aveendl;int max,min;max=min=array0;int m;for(i=0,m=0;i=max) m=i,max=arrayi;int l;for(i=0,l=0;in;i+) if(arrayimax) l=i,max=arrayi;i=arraym,arraym=arrayl,arrayl=i; void MOVE:print() for(int i=0;in;i+)coutarrayi ;void main() 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();coutendl;s.exchange();s.print();任务三:#includeclass Palindromeprivate: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 inti; int*s2=new intj; m=n; for(int k=0;ki;k+)s10i-1-k=m%10;m/=10;m=n; for(k=0;kj;k+)s2j-1-k=m%2;m/=2;int num10=0; for(k=0;ki/2;k+)if(s10i-1-k=s10k) num10+;else break;int num2=0; for(k=0;kj/2;k+)if(s2j-1-k=s2k) 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 inti+1; int*s2=new intj+1; m=n; for(int k=0;ki;k+)s10i-1-k=m%10;m/=10;m=n; for(k=0;kj;k+)s2j-1-k=m%2;m/=2;if(y) cout该数为绝对回文数!:endl;cout十进制表示为:;for(k=0;ki;k+)couts10k;cout二进制表示为:;for(k=0;kj;k+)couts2k;elsecout该数不是绝对回文数!:endl;cout十进制表示为:;for(k=0;ki;k+)couts10k;cout二进制表示为:;for(k=0;kj;k+)couts2k;coutendl;void main()int a;couta;Palindrome p(a);p.huiwen();p.show();任务四:#include#includeclass Stringprivate:char*str;int y;public:String(char*s)int n=strlen(s);str=new charn+1;strcpy(str,s);y=0;void huiwen();void show();String()if(str) delete str;void String:huiwen()/判断str所指向的字符串是否为回文字符串;int n,judge=0;n=strlen(str);for(int i=0;i(n/2);i+)if(stri=strn-1-i) judge+;if(judge=i) y=1;void String:show()/输出;if(y=1) couty=1,该字符串是回文数strendl;else couty=0,该字符串不是回文数strendl;void main()/测试;char s=ababcedbaba;String test(s);test.huiwen();test.show();任务五:#includeclass PHALANXprivate:int(*p)20;int startnum;int n;public:PHALANX(int s,int m)startnum=s;n=m;p=new intm20;void process();void print();PHALANX()if(p) deletep;void PHALANX:process()/生成起始

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论