c++课程实践报告.docx
- 文档编号:19064219
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:21
- 大小:77.87KB
c++课程实践报告.docx
《c++课程实践报告.docx》由会员分享,可在线阅读,更多相关《c++课程实践报告.docx(21页珍藏版)》请在冰豆网上搜索。
c++课程实践报告
江苏科技大学
课程实践报告
设计题目:
计算机程序设计实践(VC++)
设计时间:
2011-09-19至2011-09-30
学院:
电子信息学院
专业班级:
电子信息工程
学生姓名:
学号
指导老师:
王芳
2011年09月
一、
实践任务
试建立一个类PP,求下列多项式的钱n项值。
Pn(x)=1n=0
Xn=1
((2n-1)xP(n-1)(x)-(n-1)P(n-2)(x))/nn>1
具体要求如下:
(1)私有成员数据:
intn:
前若干项的项数。
doublex;存放x值.
double*p;根据n的大小动态申请存放Pn(x)前n项的数组空间。
(2)公有成员函数:
PP(intnum,doublex1);构造函数,初始化数据成员n和想,使p指向动态申请数组空间。
~PP();析构函数,释放p指向的动态内存空间。
doublefun(intn1,doublex);递归函数,用于求多项式Pn(x)的第n1项。
注意:
将递归公式中的n用作函数参数。
本函数共process函数调用。
voidprocess();完成求前n项的工作,并将它们存放到p指向的动态数组中。
voidshow();输出n和x,并将前n项一每行4个数的形式输出到屏幕上。
。
(3)在主函数中完成对该类的测试。
先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,并调用items的成员函数,求出并输出多项式前num项的值。
二、系统测试
三,实践小结
四,源程序清单
#include
classpp{
intn;
doublex;
double*p;
public:
pp(intnum,doublex1){
n=num;
x=x1;
p=newdouble[];
}
~pp(){
delete[]p;}
doublefun(intn1,doublex);
voidprocess(){
for(inti=0;i p[i]=fun(i,x); } voidshow(){ cout<<"n="< cout<<"x="< inti; for(i=0;i if(i%4==0) cout< cout< } } }; doublepp: : fun(intn1,doublex){ if(n1==0) return1; if(n1==1) returnx; else return((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1; } voidmain() { intnum;doublex1; cin>>num>>x1; ppitems(num,x1); items.show(); } 2.试建立一个类SP,求f(n,k)=1^k+2^k+3^k+……+n^k,另有辅助函数power(m,n)用于求m^n。 (1)私有成员数据: *: intn,k: 用于存放公式中n和k的值; (2)公有成员函数: *SP(intn1,intk1): 构造函数,初始化成员数据n和;k; *intpower(intm,intn): 求m^n; *intfun(): 求公式的累加和; *voidshow(): 输出求得的结果。 (3)在主函数中定义对象s,对该类进行测试。 三、系统测试 三,实践小结 做这一题我们首先要学会类的定义及使用,中心就是求幂值和累加和的函数,求积时要记得定义的变量初值为1,求和时要记得定义的变量初值为0。 四,源程序清单 #include classSP{ intn,k; public: SP(intn1,intk1){ n=n1;k=k1; } intpower(intm,intn); intfun(); voidshow(){ cout< } }; intSP: : power(intm,intn){ inti,f=1; for(i=1;i<=n;i++) f=f*m; returnf; } intSP: : fun(){ inti,s=0; for(i=1;i<=n;i++) s=s+power(i,k); returns; } voidmain() { intn1,k1; cin>>n1>>k1; SPs(n1,k1); s.show(); } 一,实践任务 3,建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。 具体要求如下: (1)私有数据成员 *floatarray[20]一维整型数组; *intn数组中元素的个数。 (2)公有成员函数 *MOVE(floatb[],intm)构造函数,初始化成员数据; *voidaverage()输出平均值,并将数组中的元素按要求重新放置; *voidprint()输出一维数组。 (3)在主程序中用数据{1.3,6.2,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。 二,系统测试 三,实践小结 这一题的难度主要在其算法,调换数据的办法有很多种,但怎样选择最简单的算法才是关键。 这一题采用的是从两头的数据一起开始借助循环结构,用两边的数据值与平均值进行比较,根据大小进行位置的调换,方法简便易实现。 四,源程序清单 #include classMOVE{ floatarray[20]; intn; public: MOVE(floatb[],intm); voidaverage(); voidprint(); }; MOVE: : MOVE(floatb[],intm){ inti; for(i=0;i array[i]=b[i]; n=m; } voidMOVE: : average(){ floats=0,t; inti,j; for(i=0;i s+=array[i]; s/=n; cout< i=0,j=n-1; for(;i if(array[i]<=s)i++; if(array[j]>=s)j--; t=array[i]; array[i]=array[j]; array[j]=t; } } voidMOVE: : print(){ inti; for(i=0;i cout< cout<<'\n'; } voidmain(){ floataa[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}; intn=sizeof(aa)/4; MOVEobj(aa,n); obj.average(); obj.print(); } 一,实践任务 4.建立一个类MOVE,,将数组中最大元素与最小元素的值进行互换。 具体要求如下: (1)私有数据成员 *int*array一维整型数组; *intn数组中元素的个数。 (2)公有成员函数 *MOVE(floatb[],intm)构造函数,初始化成员数据; *voidaverage()输出平均值,并将数组中的元素按要求重新放置; *voidprint()输出一维数组。 (3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。 二,系统测试 三,实践小结 这一题与第三题题目很类似,就字符数组与整形数组的差别,虽然只是数组类型不同,可是其中的差别很大,算法也与上一题的算法大相径庭,字符型数据值的比较跟整形数据值的比较不同。 四,源程序清单 #include classMOVE{ int*array; intn; public: MOVE(intb[],intm){ n=m; array=newint[n]; for(inti=0;i array[i]=b[i]; } voidexchange(){ ints=0,min,max,x,y,ave; max=min=array[0]; for(inti=0;i s+=array[i]; if(max max=array[i]; x=i; } if(min>array[i]){ min=array[i]; y=i; } } ave=s/n; cout<<"该组数的平均值为: "< cout<<"排序后: "; array[x]=min; array[y]=max; } voidprint(){ for(inti=0;i cout< } ~MOVE(){ delete[]array; } }; voidmain() { intb[]={21,65,43,87,12,84,44,97,32,55}; MOVEx(b,10); x.exchange(); x.print(); } 一实践任务 5.试建立一个类Palindrom,实现绝对回文数。 设计一个算法实现对任意数型数字判断是否为绝对回文。 所谓绝对回文数,是指十进制数和二进制数均对称的数。 (1)私有成员数据: intn;整型数字。 inty;标记是否为回文数。 (2)公有成员函数: Palindrome(intx);构造函数,根据x参数初始化成员函数n,y初始化为0。 voidhuiwen();判断数n是否为绝对回文数。 voidshow();若该数为回文数,则在屏幕显示 (3)在主函数中定inta,由键盘输入数字。 定义一个Palindrom类对象p,用a初始化p,对该类进行测试。 二,系统测试 三,实践小结 将数字放入数组中,是题目的算法变得简单很多。 要注意判断条件的选取,有无漏选。 以及判断的顺序。 四,源程序清单 #include classPalindrome{ intn; inty; public: Palindrome(intx){ n=x; y=0; } voidhuiwen(); voidshow(){ if(y==1) cout<<"回文"< else cout<<"非回文"< } }; voidPalindrome: : huiwen(){ intb[100]; inta[100],s,z,m=n; for(inti=0;m%10;i++){ b[i]=m%10; m=m/10; s=i; } for(intj=0;m%2;j++){ a[j]=m%2; m=m/2; z=j; } for(intk=0;k<=s;k++){ if(b[k]! =b[s-k]){ y=0; break; } else y=1; } if(y==1) for(inti=0;i<=z;i++) if(a[i]! =a[z-i]){ y=0; break; } } voidmain(){ inta; cin>>a; Palindromep(a); p.huiwen(); p.show(); } 一,实践任务 6.定义一个字符串String,实现判断该字符串是否为回文字符串,是指该字符串左右对称。 例如字符串“123321”。 具体要求如下: (1)私有成员数据: char*str; inty;是否为回文字符串。 (2)公有成员函数: String(char*s);构造函数,用给定的参数s初始化数据成员str.y初始化为0。 voidhuiwen();判断str所指向的字符串是否为回文字符串。 voidshow();在屏幕上显示字符串。 (3)在主程序中定义字符串chars[]=”ababcedbaba”作为原始字符串。 定义一个String类对象text,用s初始化test,完成对该类进行测试。 二,系统测试 三,实践小结 将字符放入数组中,是题目的算法变得简单很多。 要注意判断条件的选取,有无漏选。 以及判断的顺序。 四,源程序清单 #include #include classString{ char*str; inty; public: String(char*s){ str=s; y=0; } voidhuiwen(); voidshow(){ if(y==1) cout< else cout< cout<<"非回文字符串"< } }; voidString: : huiwen(){ intl=strlen(str); for(inti=0;i if(str[i]! =str[l-i-1]){ y=0; break; }else y=1; } } voidmain(){ chars[]="ababcedbaba"; Stringtest(s); test.huiwen(); test.show(); } 一,实践任务 11.建立一个STRING,,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。 例如字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE” 具体要求如下: (1)私有成员数据: charstr1[80];存放被插入的字符串。 charstr2[40];存放待插入的字符串。 (2)公有成员函数: STRING(char*s1,char*s2);构造函数,用s1和s2初始化str1和str2. voidprocess();将str2中的字符串插入到str1中。 voidprint(): 输出插入后的字符串。 (3)在主程序中定义STRING类的对象test对该类进行测试。 二,系统测试 三,实践小结 这是一类题目,利用指针将字符串数组进行相应的转换。 利用数组的拷贝,赋值。 这题的思路值得借鉴。 四,源程序清单 #include #include classSTRING{ charstr1[80]; charstr2[40]; public: STRING(char*s1,char*s2){ strcpy(str1,s1); strcpy(str2,s2); } voidprocess(); voidprint(){ cout< } }; voidSTRING: : process(){ chart[100]; strcpy(t,str1); inti=0,j=0; while(str2[i]){ str1[j++]=str2[i]; str1[j++]=t[i]; i++; str1[j]='\0'; } } voidmain(){ chars2[]="abcde",s1[]="ABCDE"; STRINGtext(s1,s2); text.process(); text.print(); } 实践任务 13.建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素一到最前面。 具体要求如下: (1)私有成员数据: intarray[20];一维整型数组。 intn;数组中元素的个数。 (2)公有成员函数: MOVE(intb[],intm);构造函数,初始化函数成员数据。 voidchange();进行循环换位。 voidprint();输出一维数组 (3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。 二,系统测试 三,实践小结 主要就是数组的替换,排序等转换。 四,源程序清单 #include classMOVE{ intarray[20]; intn; public: MOVE(intb[],intm){ for(inti=0;i array[i]=b[i]; n=m; } voidchange(); voidprint(){ for(inti=0;i cout< } }; voidMOVE: : change(){ intt[sizeof(array)/4]; for(inti=0;i t[i]=array[i]; for(i=0;i<=(n-4);i++){ array[i+3]=t[i]; } array[0]=t[n-3]; array[1]=t[n-2]; array[2]=t[n-1]; } voidmain(){ intb[]={21,65,43,87,12,84,44,97,32,55}; intm=sizeof(b)/4; MOVEtest(b,m); test.change(); test.print(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 课程 实践 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)