VC课程实践正确答案.doc_第1页
VC课程实践正确答案.doc_第2页
VC课程实践正确答案.doc_第3页
VC课程实践正确答案.doc_第4页
VC课程实践正确答案.doc_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

江苏科技大学 课程实践报告设计题目: 程序设计(VC+)实践 设计时间: 至 学 院: 专业班级: 学生姓名: 学号 指导老师: 1试建立一个类PP,求出下列多项式的前n项的值。 具体要求如下:(1)私有数据成员lint n:前若干项的项数。ldouble x:存放x的值。ldouble *p:根据n的大小动态申请存放Pn(x) 前n项的数组空间。(2)公有成员函数lPP(int num,double x1):构造函数,初始化数据成员n和x,使p指向动态申请的数组空间。lPP():析构函数,释放p指向的动态内存空间。ldouble fun(int n1,double x):递归函数,用于求多项式 的第n1项。注意:将递归公式中的n用作函数参数。本函数供process函数调用。lvoid process( ):完成求前n项的工作,并将它们存放到p指向的动态数组中。lvoid show( ):输出n和x,并将前n项以每行4个数的形式输出到屏幕上。(3) 在主函数中完成对该类的测试。先输入num和x1,并定义一个PP类的对象items,用num和x1初始化items的成员n和x,调用items的成员函数,求出并输出多项式前num项的值。程序源代码#includeclass ppint n;double x;double *p;public:pp(int num,double x1);pp();double fun(int n1,double x);void process();void show();pp:pp(int num,double x1)n=num;x=x1;p=new doublenum+1;pp:pp()delete p;double pp:fun(int n1,double x)if(n1=0)return 1;if(n1=1)return x;if(n11)return (2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x)/n1;void pp:process()int i;for(i=0;i=n;i+)*(p+i)=fun(i,x);void pp:show()coutn=ntx=xendl;for(int i=0,m=1;in;i+,m+)cout*(p+i)t;if(m%4=0)coutn;void main()int num;double x1;coutput in num and x1numx1;pp items(num,x1);cess();items.show();运行结果2试建立一个类SP,求 ,另有辅助函数power(m,n)用于求 。具体要求如下:(1)私有成员数据。lint n,k:存放公式中n和k的值;(2)公有成员函数。lSP(int n1,int k1):构造函数,初始化成员数据n和k。lint power(int m, int n):求mn。lint fun( ):求公式的累加和。lvoid show( ):输出求得的结果。(3)在主程序中定义对象s,对该类进行测试。程序源代码#includeclass SPint n,k;public:SP(int n1,int k1);int power(int m,int n);int fun();void show();SP:SP(int n1,int k1)n=n1;k=k1;int SP:power(int m,int n)int i;if(n=0)return 1;elsefor(i=1;in;i+)m*=m;return m;int SP:fun()int y=0,x;for(x=1;x=n;x+)y+=power(x,k);return y;void SP:show()cout前n项的和为:fun()endl;void main()int n1,k1;cout输入n1和k1的值n1k1;SP s(n1,k1);s.fun();s.show();运行结果:3建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。具体要求如下:(1)私有数据成员lfloat array20:一维整型数组。lint n:数组中元素的个数。(2)公有成员函数lMOVE(float b,int m):构造函数,初始化成员数据。lvoid average():输出平均值,并将数组中的元素按要求重新放置。lvoid 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+)arrayi=bi;void MOVE:average()int i,x;float a=0;for(i=0;in;i+)a+=arrayi;a/=n;cout平均值为aendl;float ff20;for(i=0,x=0;in;i+)if(arrayia)ffx=arrayi;x+;for(i=0;ia)ffx=arrayi;x+;for(i=0;in;i+)arrayi=ffi;void MOVE:print()int q,p=1;for(q=0;qn;q+)coutarrayqt;if(p%5=0)coutn;p+;void main()float b=1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3;int m=9;MOVE aa(b,m);aa.average();aa.print();运行结果4建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。具体要求如下:(1)私有数据成员lint *array:一维整型数组。lint n:数组中元素的个数。(2)公有成员函数lMOVE(int b,int m):构造函数,初始化成员数据。lvoid exchange():输出平均值,并将数组中的元素按要求重新放置。lvoid print():输出一维数组。lMOVE():析构函数。(3)在主程序中用数据21,65,43,87,12,84,44,97,32,55对该类进行测试。程序源代码#includeclass MOVEint *array;int n;public:MOVE(int b,int m);void exchange();void print();MOVE();MOVE:MOVE(int b,int m)n=m;array=new intn;for(int x=0;xn;x+)arrayx=bx;void MOVE:exchange()float a=0;int i,*p1,*p2;for(i=0;in;i+)a+=arrayi;a/=n;coutThe average of the number is:aendl;p1=p2=&array0;for(i=0;in;i+)if(arrayi*p2)p2=&arrayi;i=*p1;*p1=*p2;*p2=i;void MOVE:print()int i,num=1;for(i=0;in;i+)coutarrayit;if(num%5=0)coutn;num+;MOVE:MOVE()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();运行结果5定义一个类Palindrome,实现绝对回文数。设计一个算法实现对任意整型数字判断是否为绝对回文数。所谓绝对回文数,是指十进制数和二进制数均对称的数。具体要求如下:(1)私有数据成员 lint n:整型数字。lint y: 标记是否为回文数。(2)公有成员函数lPalindrome (int x) :构造函数,根据x参数初始化数据成员n,y初始化为0。lvoid huiwen () :判断数n是否为绝对回文数。lvoid show( ) :若该数为回文数,则在屏幕显示。 (3)在主程序中定义int a,由键盘输入数字。定义一个Palindrome类对象p,用a初始化p,完成对该类的测试。程序源代码#includeclass palindromeint n;int y;public:palindrome(int x);void huiwen();void show();palindrome:palindrome(int x)n=x;y=0;void palindrome:huiwen()int b20,c50,m,i,p=0,t1=1,t2=1;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-1)t2=0;break;if(t1&t2)y=1;void palindrome:show()if(y=0)cout该数不是回文数!endl;else cout该回文数是:nendl;void main()int a;cout输入a的值a;palindrome p(a);p.huiwen();p.show();运行结果:6定义一个字符串类String,实现判断该字符串是否为回文字符串。所谓回文字符串,是指该字符串左右对称。例如字符串“123321”是回文字符串。具体要求如下: (1)私有数据成员 lchar *str; lint y:标记是否为回文字符串。 (2)公有成员函数lString (char *s) :构造函数,用给定的参数s初始化数据成员str。y初始化为0。lvoid huiwen () :判断str所指向的字符串是否为回文字符串。lvoid 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(str,s);y=0;void string:huiwen()char *p1,*p2;p2=p1=str;for(int i=0;stri;i+,p2+);p2-;for(;p1!=p2;p1+,p2-)if(*p1!=*p2)y=0;break;elsey=1;void string:show() cout”字符串为:”strendl;if(y=0)cout字符串不是回文数!endl;else coutyendl;void main()char s=ababcedbaba; string test(s); test.huiwen(); test.show();运行结果:7建立一个类PHALANX,生成并显示一个折叠方阵。折叠方阵如下图所示。折叠方阵的生成过程为:起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。 具体要求如下:(1)私有数据成员lint (*p)20:指向按照折叠规律存放方阵的二维整型数组。lint startnum:折叠方阵的起始数。lint n:存放方针的层数。(2)公有成员函数lPHALANX (int s, int m ):构造函数,初始化成员数据。lvoid process():生成起始数为startnum的n行方阵。lvoid print():输出折叠方阵。l PHALANX( ):析构函数。(3)在主程序中对该类进行测试。程序源代码#include#includeclass phalanxint(*p)20;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 int2020;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的值sm;phalanx pp(s,m);cess();pp.print();运行结果8建立一个MATRIX,生成并显示一个螺旋方阵。螺旋方阵如下图所示,起始数置于方阵的左上角,然后从起始数开始依次递增,按顺时针方向从外向里旋转填数而成。 具体要求如下:(1)私有数据成员lint a20 20:二维整型数组存放螺旋方阵。lint startnum:螺旋方阵的起始数。lint n:存放方针的层数。(2)公有成员函数lMATRIX (int s, int m ):构造函数,初始化成员数据startnum和n。lvoid process():生成起始数为startnum的n行螺旋方阵。lvoid print():输出螺旋方阵。(3)在主程序中定义MATRIX类的对象t对该类进行测试。程序源代码#include#includeclass matrixint a2020;int starnum;int n;public:matrix(int s,int m);void process();void print();matrix:matrix(int s,int m)starnum=s;n=m;void matrix:process()int st=starnum;int i,j,x=0,y=n;for(;x=(y-1)/2;x+) for(i=x,j=x;j(y-x-1);j+)aij=st;st+; for(;ix;j-)aij=st;st+; for(;ix;i-)aij=st;st+;if(x=(y-1)/2)aij=st;void matrix:print()int i,j;for(i=0;in;i+)for(j=0;jn;j+)coutsetw(8)aij;coutn;void main()int s,m;cout输入s和m的值sm;matrix pp(s,m);cess();pp.print();运行结果9定义一个字符串类CString,并设计一个算法对该串中各个不同字符出现的频率进行统计。具体要求如下: (1)私有数据成员 lchar *str:指向要统计的字符串。lchar (*p)2:动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的次数(次数在存放时,用该数字对应的ASCII值存放;在输出次数时,输出该ASCII字符对应的ASCII值即可)。lint size:存放字符串中出现的所有不同的字符的个数。 (2)公有成员函数lCString (char *s) :根据s参数初始化数据成员str;p和size初始值为0。lvoid Count():p根据s所指字符串长度分配空间。然后把str所指字符串中的每个字符放入p数组中,设置每个字符的出现次数为1。根据p数组统计不同字符出现的频率,并求得size的实际大小。最后根据size的实际大小,重新分配p所指空间,并把不同字符及其出现次数重新放回p数组(提示:可以借助临时数组或指针来实现)。lvoid Show():屏幕显示字符串、字符串的每个字符和与之对应的次数。lCString():释放动态分配的空间。(3)在主程序中定义字符串char s=”abdabcdesffffd”。定义一个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 charstrlen(str)2;char n;char *p1,*p2;for(int i=0;stri;i+)n=0;p1=&stri;for(int m=0;strm;m+)p2=&strm;if(*p1=*p2)n+;p2+;pi0=stri;pi1=n;void cstring:show()for(int i=0;istrlen(str);i+)int m,x=1;for(m=0;mi;m+)if(pm0=pi0)x=0;break;if(x=1)coutpi0t(int)pi1endl;cstring:cstring()delete p;void main()char s=abdabcdesffffd;cstring test(s);test.count();test.show();运行结果10定义一个字符串类CString,并设计一个算法实现,给定关键字str1在字符串str中出现时用关键字str2进行替换的功能。具体要求如下: (1)私有数据成员 lchar *str; 原始字符串。lchar *str1; 目标关键字。lchar *str2; 替换关键字。lint flag; 标记替换是否完成替换。 (2)公有成员函数lCString (char *s,char s1 ,char *s2) :用给定的参数s、s1和s2相对应的初始化数据成员str、str1和str2。flag设置缺省0。lvoid Replace () :判断str字符串中是否出现str1,若出现就用str2替换,否则什么都不做。若替换成功了标记flag为1,若替换不成功则标记flag为0。lvoid Show( ) :若替换成功,则在屏幕上显示目标关键字、替换关键字和替换后的原始字符串;若不成功则显示原始字符串。l CString() :释放动态分配的空间。(3) 在主程序中定义字符串char s=”I am student, you are student too, we are all student.”作为原始字符串,定义char s1=” student”作为目标关键字,定义char s2=”teacher”作为替换关键字。定义一个CString类对象test,用s,s1和s2初始化test,完成对该类的测试。程序源代码#include#includeclass cstringchar *str;char *str1;char *str2;int flag;public:cstring(char*s,char s1,char *s2);void replace();void show();cstring();cstring:cstring(char*s,char s1,char *s2)str=new charstrlen(s)+1;str1=new charstrlen(s1)+1;str2=new charstrlen(s2)+1;strcpy(str,s);strcpy(str1,s1);strcpy(str2,s2);flag=0;void cstring:replace()int i,n1,n2,y=1;for(i=0;stri;i+)if(stri=str10)for(n1=i,n2=0;str1n2;n1+,n2+)if(strn1!=str1n2)|(strn1=0)y=0;break;if(y=1)char pp100;for(int x=0,p=i;x(strlen(str1);p+,x+)strp=str2x;flag=1;void cstring:show()if(flag=1)cout改后strendl;else cout未改strendl;cstring:cstring()delete str;delete str1;delete str2;void main()char s=I am student,you are student too,we are all student.;char s1=student;char s2=teacher;cstring test(s,s1,s2);test.replace();test.show();运行结果11建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。例如将字符串“abcde” 交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。具体要求如下:(1)私有数据成员lchar str180 :存放被插入的字符串。lchar str240 :存放待插入的字符串。(2)公有成员函数lSTRING (char *s1, char *s2 ):构造函数,用s1和s2初始化str1和str2。lvoid process():将str2中的字符串插入到str1中。lvoid print():输出插入后的字符串。(3)在主程序中定义STRING类的对象test对该类进行测试。程序源代码#include#includeclass STRINGchar str180;char str240;public:STRING(char *s1,char *s2);void process();void print();STRING:STRING(char *s1,char *s2)for(int i=0;i80;i+)str1i=s1i;for(int j=0;j40;j+)str2j=s2j;void STRING:process()char s40;strcpy(s,str1);int i=0,j=0;while(str2i)str1j+=str2i;str1j+=si;i+;str1j=0;void STRING:print()cout交叉后的字符串为:;coutstr1endl;void main()char str180,str240;cout输入字符串1endl;cin.getline(str1,39);cout输入字符串2endl;cin.getline(str2,39);STRING test(str1,str2);cess();test.print();运行结果12建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。例如将字符串“abcde” 交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。具体要求如下:(1)私有数据成员lchar str160 :存放被插入的字符串。lchar str240 :存放待插入的字符串。lchar str3100 :存放插入后的字符串。(2)公有成员函数lSTRING (char *s1, char *s2 ):构造函数,用s1和s2初始化str1和str2。lvoid process():将str2中的字符串插入到str1中,存放到str3中。lvoid print():输出插入后的字符串。(3)在主程序中定义STRING类的对象test对该类进行测试。程序源代码#include#includeclass STRINGchar str160;char str240;char str3100;public:STRING(char *s1,char *s2);void process();void print();STRING:STRING(char *s1,char *s2)for(int i=0;i60;i+)str1i=s1i;for(int j=0;j40;j+)str2j=s2j;void STRING:process() int i=0,j=0,x;while(str1i&str2i)str3j+=str2i; str3j+=str1i;i+;x=i;if(str2x) while(str2x) str3j+=str2x+;if(str1i) while(str1i) str3j+=str1i+;str3j+=0;void STRING:print()cout合并后的字符串为:;coutstr3endl;void main()char str160,str240;cout输入字符串1endl;cin.getline(str1,59);cout输入字符串2endl;cin.getline(str2,39);STRING test(str1,str2);cess();test.print();运行结果13建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。具体要求如下:(1)私有数据成员lint array20:一维整型数组。lint n:数组中元素的个数。(2)公有成员函数lMOVE(int b,int m):构造函数,初始化成员数据。lvoid change():进行循环换位。lvoid print():输出一维数组。(3)在主程序中用数据21,65,43,87,12,84,44,97,32,55对该类进行测试。程序源代码#includeclass MOVEint array20;int n;public:MOVE(int b,int m);void change();void print();MOVE:MOVE(int b,int 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;a0=arrayi+;a1=arrayi+;a2=arrayi; for(i=0;in;i+)arrayi=ai;void MOVE:print()for(int i=0;in;i+)coutarrayit;coutendl;void main()int b20=21,65,43,87,12,84,44,97,32,55;MOVE p(b,10);p.change();p.print();运行结果14建立一个类MOVE,实现将数组中大字字母元素放在小写字母元素的左边。具体要求如下:(1)私有数据成员lchar *array:一维字符数组。lint n:数组中元素的个数。(2)公有成员函数lMOVE(char b,int m):构造函数,初始化成员数据。lvoid change():进行排序换位。lvoid print():输出一维数组。lMOVE():析构函数。(3)在主程序中用数据fdsUFfsTjfsKFEkWC对该类进行测试。程序源代码#include#includeclass movechar*array;int n;public:move(char b,int m);void change();void print();move();move:move(char b,int m)array=new charstrlen(b)+1;n=m;strcpy(array,b);void move:change()char *p;int m=0;p=new charstrlen(array);strcpy(p,array);for(int i=0;pi;i+)if(pi=A)arraym+=pi;for(i=0;pi;i+)if(pi=a)arraym+=pi;void move:print()cout改后字符串为:arrayendl;move:move()delete array;void main()char b1000;int m;cout输入字符串和字符串个数bm;move pp(b,m);pp.change();pp.print();运行结果:15定义一个一维数组类Carray,并根据给定算法实现对原始一维数组进行线性变换。这里给定的线性变换算法为:T(bx) = bT(x) + i; 其中,b为变换常量,x为变量,i为当前类中成员数组的下标值。根据该算法,原始数组在变化后,当前数组元素的值是由常量b和i下标来决定的。具体要求如下: (1)私有数据成员 lint *a:指针a指向一个动态分配的原始数组。lint n:n表示该数组的大小。lint b:线性变换的常量。 (2)公有成员函数lCarray (int a ,int n,int x) :用给定的参数a、n和x初始化数据成员a、n和b。缺省都设置为0。lvoid Transform () :根据上述变化算法,求解数组变换。lvoid Show( ) :在屏幕上显示数组元素。l Carray () :释放动态分配的空间。(3)在主程序中定义数组int arr =1,2,3,4,5,6,7,8,9,10作为原始数组,int b;由键盘输入,作为线性变换的常量。定义一个Carray类对象test,用arr初始化test,完成对该类的测试。程序源代码#includeclass carrayint *a;int n;int b;public:carray(int a,int n,int x);void transform();void show();carray();carray:carray(int a,int n=0,int x=0)this-a=new intn;this-n=n;b=x;for(int i=0;iai=ai;void carray:transform()for(int i=0;in;i+)ai=b*ai+i;void carray:show()cout变换后的数组为:endl;for(int i=0;in;i+)coutait;coutendl;carray:carray()delete a;void main()int arr=1,2,3,4,5,6,7,8,9,10;int m=10,b;cout输入线性变换常量b;carray test(arr,m,b);test.transform();test.show();运行结果:16定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。方阵的变换形式为:F=W*fTf为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 具体要求如下: (1)私有数据成员 lint (*a)4:a指向方阵数组。lint w44:w为变换矩阵。lint m:m表示方阵的行和列数。 (2)公有成员函数lCMatrix (int a4,int m) :用

温馨提示

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

评论

0/150

提交评论