《c++程序设计与实践.docx》由会员分享,可在线阅读,更多相关《c++程序设计与实践.docx(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、江苏科技大学课程实践报告设计题目:程序设计(VC+)实践设计时间:至学 院:专业班级:学生姓名:学号指导老师:1.试建立一个类PP,求出下列多项式的前n项的值。具体要求如下:(1)私有数据成员int n:前若干项的项数。double x:存放x的值。double *p:根据n的大小动态申请存放Pn(x)前n项的数组空间。(2)公有成员函数PP(int num,double xl):构造函数,初始化数据成员n和x,使p指向动态申请的数组空 间。PP():析构函数,释放p指向的动态内存空间。double fun(int nl,double x):递归函数,用于求多项式的第nl项。注意:将递归公式中
2、 的n用作函数参数。本函数供process函数调用。void process():完成求前n项的工作,并将它们存放到p指向的动态数组中。void show():输出n和x,并将前n项以每行4个数的形式输出到屏幕上。(3)在主函数中完成对该类的测试。先输入num和xl,并定义个PP类的对象items, 用num和xl初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num 项的值。程序源代码#includeclass ppint n;double x;double *p;public:pp(int num,double xl);PP();double fun(int nl
3、,double x);void process();void show(););pp:pp(int num,double xl)(n=num;x=xl;p=new doublenum+l;)pp:pp()delete p;)double pp:fun(int nl,double x)if(nl=O)return 1;if(nl=l)return x;if(nll)return (2*nl-l)*x*fun(nl-l,x)-(nl-l)*fun(nl-2,x)/nl;)void pp:process()int i;for(i=0;i=n;i+)*(p+i)=fun(i,x);)void pp:s
4、how()(cout,n=,nAt,x=Hxendl;fbr(int i=0,m=l;in;i+,m+)(cout*(p+i)*t,;if(m%4=0)coutnr;)void main()(int num;double xl;coutMput in num and xl vvendl;cinnumxl;pp items(num,xl);items.process();items.show();)运行结果2.试建立一个类SP,求,另有辅助函数power(mm)用于求。 具体要求如下:(1)私有成员数据。int n, k:存放公式中n和k的值:(2)公有成员函数。SP(int nl,int kl
5、):构造函数,初始化成员数据n和匕int power(int m, int n): 求 mnint fun():求公式的累加和。void show():输出求得的结果。(3)在主程序中定义对象s,对该类进行测试。程序源代码#includeclass SPint n,k;public:SP(int nljnt kl);int power(int m,int n);int fun();void show(););SP:SP(int nljnt ml)(n=nl;k=ml;int SP:power(int mjnt n)int i;if(n=O)return 1;elsefor(i=l;in;i+)
6、m*=m;return m;)intSP:fun()(int y=Ozx;for(x=l;x=n;x+) y+=power(x,k);return y;void SP:show()coutcv”前 n 项的和为:fun()endl;void main()int nlzkl;cout输入nl和kl的值,endl;cinnlkl;SPs(nlzkl);s.fun();s.show();运行结果:3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平 均值的兀素放到数组的右边。具体要求如下:(1)私有数据成员float array20: 维整型数组。intn:数组中元素的
7、个数。(2)公有成员函数MOVE(float b,int m):构造函数,初始化成员数据。void average():输出平均值,并将数组中的元素按要求重新放置。void print():输出维数组。(3)在主程序中用数据1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3对该类进行测试。程序源代码#includeclass MOVEfloat array20;int n;public:MOVE(float b,int m);void average();void print();;MOVE:MOVE(float b,int m)int i;n=m;for(i=0;im;i+)
8、 arrayij=bij;void MOVE:average()(int i,x;float a=0;for(i=0;in;i+) a+=arrayi;a/=n;cout v v ” 平均值为 ” vvavvendl;float ff20;for(i=0,x=0;in;i+4-) if(arrayia) (ffx=arrayi;x+;)for(i=0;ia) (ffx=arrayil;x+;)for(i=0;in;i+) arrayi=ffij;void MOVE:print()(int q,p=l;for(q=0;qn;q+) (cou tarray qj*t *; if(p%5=0)cou
9、 t*n P+;)void main()(float b= 1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,23;int m=9;MOVE aa(b,m);aa.average(); aa.print();)运行结果I *C:U serspzqDeskto pDe bu gC ppl.exe平均值为5.433331.334.82.36.29.17.45.69.2Pressany key to continue4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。 具体要求如下:(1)私有数据成员int * array: 维整型数组。intn:数组中元素的个数。(2)公有成
10、员函数MOVE(int b,int m):构造函数,初始化成员数据。voidexchan():输岀平均值,并将数组中的元素按要求重新放置。void print():输出维数组。MOVE():析构函数。(3)在主程序中用数据21,65,43,87,12,84,44,97,32,55)对该类进行测试。 程序源代码#includeclass MOVEint *array;int n;public:MOVE(intb,intm);void exchange();void print();-MOVE();;MOVE:MOVE(int b,int m)n=m;array=new intn;for(int
11、x=0;xn;x+) arrayx=bx;)void MOVE:exchange()float a=0;int i,*pl,*p2;for(i=0;in;i+)a+=arrayi;a/=n;coutThe average of the number is:aendl;pl=p2=&array0;for(i=0;in;i+)(if(arrayi* p2)p2=&arrayi;i=*pl;*pl=*p2;*p2=i;)void MOVE:print()int iznum=l;for(i=0;in;i+)(coutarrayit;if(num%5=0)coutn;num+;)MOVE:-MOVE()
12、delete array;void main()(int b=21,65,43,87,12,84,44,97,32,55,n=10;MOVE ff(b,n);ff.exchange();ff.print();)运行结果 *C:UserspzqDesktopDebugCppl.exeThe average of the number is:54 21654387978444123255Press any key to continue5.定义个类Palindrome实现绝对回文数。设计个算法实现对任意整型数字判断是否 为绝对回文数。所谓绝对回文数,是指十进制数和二进制数均对称的数。具体要求如下:
13、(1)私有数据成员intn:整型数字。inty:标记是否为回文数。(2)公有成员函数Palindrome (int x);构造函数,根据x参数初始化数据成员n, y初始化为0。void huiwen ():判断数n是否为绝对回文数。void show():若该数为回文数,则在屏幕显示。(3)在主程序中定义int a,由键盘输入数字。定义个Palindrome类对象p,用a初始 化P,完成对该类的测试。程序源代码#includeclass palindromeint n;int y;public:palindrome(int x);void huiwen();void show(););pali
14、ndrome:palindrome(int x)n=x;y=o;)void palindrome:huiwen()(int b20,c50,m,i,p=0,tl=l,t2=l;m=n;for(i=0;m0;m/=10) (P+;bi=m%10;i+;)for(i=0;i0;m/=2)P+;ci=m%2;i+;)for(i=0;ip;i+)if(ci!=cp-i-l)|t2=0;break;)if(tl&t2)y=l;)void palindrome:show()(if(y=0)cout该数不是回文数! endl; elsecout该回文数是:nendl;void main()(int a;co
15、utc输入a的值endl;cina;palindrome p(a);p.huiwen();p.show();)运行结果: C:UserspzqDesktopDebugCppl.exe输入a的值该数不绝对是回文数!Press any key to continue6 .定义个字符串类String实现判断该字符串是否为回文字符串。所谓回文字符串,是 指该字符串左右对称。例如字符串“12332是回文字符串。具体要求如下:(1)私有数据成员char *str;int y:标记是否为回文字符串。(2)公有成员函数String (char *s):构造函数,用给定的参数s初始化数据成员str。y初始化为0
16、。void huiwen ():判断str所指向的字符串是否为回文字符串。void show():在屏幕上显示字符串。(3)在主程序中定义字符串char s= ababcedbaba”作为原始字符串。定义个String 类对象test,用s初始化test,完成对该类的测试。程序源代码#include#includeclass stringchar *str;int y;public:string(char *s);void huiwen();void show(););string:string(char *s)(str=new charstrlen(s);strcpy(strzs);y=o;
17、void string:huiwen()(char *pl,*p2;p2=pl=str;for(int i=O;stri;i+,p2+);P2-;for(;pl!=p2;pl+/p2-)(if(*pl!=*p2)y=O;break;elsey=i;)void string:show()(cout字符串为:/zstrendl;if(y0)cout字符串不是回文数! endl;else coutyendl;)void main()(char s 二 ababced baba;string test(s);test.huiwen();test.show();)运行结果: C:UserspzqDesk
18、topDebugCppl.exe子将中$ : ababcedbaba手转雷不是回文数!Press any key to continue7 .建立一个类PHALANX,生成并显示个折叠方阵。折叠方阵如下图所示。折叠方阵的 生成过程为:起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。具体要求如下:(1)私有数据成员int(*p)2O:指向按照折叠规律存放方阵的二维整型数组。int startnum:折叠方阵的起始数。intn:存放方针的层数。(2)公有成员函数PHALANX (int s, int m):构造函数,初始化成员数据。void process():生成起始数为star
19、tnum的n行方阵。void print():输出折叠方阵。 PHALANX():析构函数。(3)在主程序中对该类进行测试。程序源代码#include#includeclass phalanxint(*p)2O;int starnum;int n;public:phalanx(int s,int m);void process();void print();phalanx(););phalanx:phalanx(int s,int m)starnum=s;n=m;)void phalanx:process()(int num=starnum;int y=n,i,j,x;p=new int202
20、0;for(x=0;xy;x+)(for(i=0,j=x;i=0;j-)(pij=num;num+;)void phalanx:print()(int i,j,m=0;for(i=0;in;i+)(for(j=0;jn;j+)(coutsetw(5)pij;coutn;)phalanx:phalanx()|delete p;void main()(int s,m;cout输入 s 和 m 的值endl;cinsm;phalanx pp(s,m);pp.process();pp.print();)运行结果8 .建立一个MATRIX,生成并显示个螺旋方阵。螺旋方阵如下图所示,起始数置于方阵 的左上
21、角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。具体要求如下:(1)私有数据成员int a20 20:二维整型数组存放螺旋方阵。int startnum:螺旋方阵的起始数。int n:存放方针的层数。(2)公有成员函数MATRIX (int s, int m):构造函数,初始化成员数据startnum和n。void process():生成起始数为startnum的n行螺旋方阵。void print():输出螺旋方阵。(3)在主程序中定义MATRIX类的对象t对该类进行测试。程序源代码#include#includeclass matrixinta2020;int starnu
22、m;int n;public:matrix(int sjnt m);void process();void print();;matrix:matrix(int sjnt m)(starnum=s;n=m;)void matrix:process()int st=starnum;int i,j,x=O,y=n;for(;x=(y-l)/2;x+)(for(i=xj=x;j(y-x-l);j+)|aij=st;st+;)for(;ix;j-)aij=st;st+;)for(;ix;i-)aij=st;st+;)if(x=(y-l)/2)aij=st;)void matrix:print()(in
23、t i,j;for(i=0;in;i+)(for(j=0;jn;j+)coutsetw(8)aij; coutn;)void main()|int s,m;cout输入s和m的值”endl;cinsm;matrix pp(s,m); pp.process(); PPprint();运行结果9 .定义个字符串类CString,并设计个算法对该串中各个不同字符出现的频率进行统计。 具体要求如下:(1)私有数据成员char*str:指向要统计的字符串。char (*p)2J:动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的 次数(次数在存放时,用该数字对应的ASCII值存放;在输出次
24、数时,输出该ASCII字符 对应的ASCII值即可)。int size;存放字符串中出现的所有不同的字符的个数。(2)公有成员函数CString (char *s):根据s参数初始化数据成员str; p和size初始值为。void Count(): p根据s所指字符串长度分配空间。然后把str所指字符串中的每个字符 放入p数组中,设置每个字符的出现次数为1。根据p数组统计不同字符出现的频率,并求 得size的实际大小。最后根据size的实际大小,重新分配p所指空间,并把不同字符及其 出现次数重新放回P数组(提示:可以借助临时数组或指针来实现)。void Show():屏幕显示字符串、字符串的每
25、个字符和与之对应的次数。-CStringO;糅放动态分配的空间。(3)在主程序中定义字符串charsabdabcdesffffd定义个CString类对象test, 用s以初始化test,完成对该类的测试。程序源代码#include#includeclass cstringchar*str;char(*p)2;int size;public:cstring(char *s);void count();void show();cstring(););cstring:cstring(char*s)P=0;size=0;str=s;void cstring:count()p=new charstrl
26、en(str)2;char n;char *pl,*p2;for(int i=O;stri;i+)n=0;pl=&stri;for(int m=0;strm;m+)(p2=&strm;if(*pl=*p2)n+;p2+;piO=stri;pil=n;void cstring:show()for(int i=O;istrlen(str);i+)(intfor(m=0;mi;m+)(if(pm0=pi0)(x=0;break;)if(x=l)coutpi0t(int)pilendl;)cstring:cstring()delete p; void main()chars=abdabcdesffff
27、d;cstring test(s);test.count();test.show();10.定义个字符串类CString,并设计一个算法实现,给定关健字strl在字符串str中出现 时用关键字str2进行替换的功能。具体要求如下:(1)私有数据成员char *str;原始字符串。char *strl;冃标关键字。char *str2i替换关键字。int flagi标记替换是否完成替换。(2)公有成员函数CString (char *s,char si ,char *s2)Z用给定的参数s、si和s2相对应的初始化数据成 员str, str!和str2o flag设置缺省void Replace
28、 ():判断str字符串中是否出现strl,若出现就用str2替换,否则什么都不 做。若替换成功了标记flag为1,若替换不成功则标记flag为0。voidShowO :若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始 字符串;若不成功则显示原始字符串。-CStringO :样放动态分配的空间。(3) 在主程序中定义字符串 char s=w I am student, you are student too, we are all student.”作为原始字符串,定义charsl= student”作为目标关键字,定义char s2= teacher 作为替换关键字。定义个CS
29、tring类对象test,用s, si和s2初始化test,完成对该类的测 试。程序源代码#include#includeclass cstringchar *str;char *strl;char *str2;int flag;public:cstring(char*szchar sl,char *s2);void replace();void show();cstring();;cstring:cstring(char*s,char sl,char *s2)(str=new charstrlen(s)+l;strl=new charstrlen(sl)+l;str2=new charstr
30、len(s2)+l;strcpy(str;s);strcpy(strl,sl);strcpy(str2,s2);flag=O;void cstring:replace()int i/nl/n2/y=l;for(i=0;stri;i+)(if(stri=strlO)(for(nl=i/n2=0;strln2;nl+/n2+)if(strnl!=strln2)| |(strnl=O)y=o; break; )if(y=i)(char pp100;for(int x=O/p=i;x(strlen(strl);p+/x+) strp=str2x; flag=l;)void cstring:show()
31、if(flag=l) cout改后” strendl;else cout “未改 vstrendl;)cstring:cstring()delete str;delete strl;delete str2;void main()char s=l am student,you are student too,we are all student.;char sinstudent;char s2 。=”teacher”;cstring test(s,sl,s2);test.replace();test.show();运行结果 *C:UserspzqDesktopDebugCppl.exe改后I a
32、n teacher,srou are teacher too,we are all teacher. Press any key to continue11.建立一个STRING,将一个字符串交叉插入到另个字符串中(假定两字符串等长)。例如将字符串“abcde” 交叉插入字符串“ABCDE ”的结果为aAbBcCdDeE ”或 AaBbCcDdEe.具体要求如下:(1)私有数据成员charstrl(80:存放被插入的字符串。charstr240:存放待插入的字符串。(2)公有成员函数STRING (char *sl, char *s2 ):构造函数,用 si 和 s2 初始化 strl 和 s
33、tr2。void process():将str2中的字符串插入到strI中。void print():输出插入后的字符串。(3)在主程序中定义STRING类的对象test对该类进行测试。 程序源代码#include#includeclass STRINGchar strl80;char str240;public:STRING(char *sl,char *s2);void process();void print(););STRING:STRING(char*sl,char *s2)(for(int i=0;i80;i+)strli=sli;for(int j=0;j40;j+)str2j=
34、s2j;)void STRING:process()(char s40;strcpy(s,strl);int i=0,j=0;while(str2i)(strlj+=str2i;strlj+=si;i+;)strlj=O;) void STRING:print()|cout交叉后的字符串为: coutstrlendl;) void main()(char strl80,str240;cout输入字符串!end!;cin.getline(strl,39);coutv输入字符串2endl;cin.getline(str2,39);STRING test(strlzstr2);test.proces
35、s();test.print();)运行结果 C:UserspzqDesktopDebugCppl.exe*输入字符串1abcdefg输入字符串2ABCDEPG交叉后的字符串为:AaBbCcDdEeFfGgPress any key to continue12.建立一个STRING,将一个字符串交叉插入到另个字符串中(假定两字符串不等长)。 例如将字符串“abcde”交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或 “AaBbCcDdEeFG”。具体要求如下:(1)私有数据成员charstrl60:存放被插入的字符串。charstr240:存放待插入的字符串。charst
36、r3 100:存放插入后的字符串。(2)公有成员函数STRING (char *s 1, char *s2 ):构造函数,用 si 和 s2 初始化 strl 和 str2。void process():将str2中的字符串插入到str!中,存放到str3中。void print():输出插入后的字符串。(3)在主程序中定义STRING类的对象test对该类进行测试。程序源代码#include#includeclass STRINGchar strl60;char str240;char str3100;public:STRING(char *slzchar *s2);void process
37、();void print();;STRING:STRING(char *sl,char *s2) for(int i=0;i60;i+) strli=sli;for(int j=0;j40;j+) str2j=s2j;)void STRING:process()int i=O,j=O,x;while(strli&str2i)str3j+=str2i;str3j+=strli;i+;)x=i;if(str2x) while(str2x) str3j+=str2x+;if(strli) while(strli) str3j+=strli+;str3j+=O,;)voidSTRING:print(
38、)coutvc合并后的字符串为:coutstr3endl;void main()char strl60,str240;cout输入字符串lHendl;cin.getline(strl,59);cout输入字符串2endl;cin.getline(str2,39);STRING test(strlzstr2);test.process();test.print();)运行结果 C:UserspzqDesktopDebugCppl.exe输入字符串1abcdefg输入字符串2ABCDEFGHIJKLMN合并后的字符串为:AaBbCcDdEeFfGgH IJKLMNPress any key to
39、continue13 .建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元 素移到最前面。具体要求如下:(1)私有数据成员int array20: 一维整型数组。intn:数组中元素的个数。(2)公有成员函数MOVE(int b,int m):构造函数,初始化成员数据。void change():进行循环换位。void print():输出维数组。(3)在主程序中用数据21,65,43,87,12,84,44,97,32,55对该类进行测试。程序源代码#includeclass MOVEint array20;int n;public:MOVE(int bJnt m);void change();void print();;MOVE:MOVE(int bJnt m)n=m;for(int i=0;in;i+) arrayi=bi;)void MOVE:change()int a20;for(int i=0;in-3;i+)ai+3=arrayi;aO=arrayi+;al=arrayi+;a2=arrayi;for(i=0;in;i+) arrayi=ai;void MOVE:print()(for(int i=0;in;i+)coutarrayit:;coutendl;void main()intb20=
限制150内