完整版江苏科技大学VC++程序实践答案.docx
- 文档编号:16253616
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:22
- 大小:50.08KB
完整版江苏科技大学VC++程序实践答案.docx
《完整版江苏科技大学VC++程序实践答案.docx》由会员分享,可在线阅读,更多相关《完整版江苏科技大学VC++程序实践答案.docx(22页珍藏版)》请在冰点文库上搜索。
完整版江苏科技大学VC++程序实践答案
江苏科技大学
VC++实践报告
一、实践任务
任务一(第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、任务分析
通过SP的成员函数power()可求出m^n的值,再通过累加函数fun(),可求出累加和。
类的定义如下:
#include
classSP
{
intn,k;
public:
SP()
intpower()
intfun()
voidshow()
};
2、算法设计
求m^n:
定义变量P=1,循环n次,每次循环P乘以m
求累加和:
定义变量S=0,通过for循环,将power()函数计算的结果累加。
3、系统测试
在主函数中用整数初始化SP的对象,并调用成员函数show()输出结果。
主函数定义如下:
voidmain()
{
SPa(2,3);
a.power(2,3);
a.fun();
a.show();
}
用以测试的数据为:
n=2,k=3;
预期的输出结果为:
当n=2,k=3时,f(n,k)=9
任务一程序
#include
classSP
{
intn,k;
public:
SP(intn1,intk1)
{
n=n1;k=k1;
}
intpower(intm,intn)
{
intp=1;
for(inti=1;i<=n;i++)
p*=m;
returnp;
}
intfun()
{
ints=0;
for(inti=1;i<=n;i++)
s+=power(i,k);
returns;
}
voidshow()
{
cout<<"当n="< } }; voidmain() { SPa(2,3); a.power(2,3); a.fun(); a.show(); } 任务二(第24题): 建立一个NUM,并统计特定序列中相同的字符的个数。 具体要求如下: (1)、私有数据成员 ●chardata[25]: 随机生成25个字符。 ●intnum[128]: 储存每个字符出现的个数。 (1)公有成员函数 ●NUM(intdata): 构造函数,同时初始化数组data。 ●voidprocess(): 统计data中没得字符出现的个数,并保存到数组num中。 ●voidprint(): 输出每个出现过的额字符及其出现的个数,每行输出5个,没有出现过的字符不显示 (3)在主程序中定义一个对象,对该类进行测试。 1、任务(系统)分析 由利用头文件#include 类的定义如下: classNUM { chardata[25]; intnum[128]; public: NUM(chara[25]) voidprocess() voidprint() }; 任务二分析 (1)将程序随机产生的整数利用循环语句转换为字符,保存在数组a中 (2)将num数组中的每一个元素初始化为0,然后利用这些字符的ASCII字判断它们所出现的次数,保存在num中; 3.系统测试 在主函数中用数组a初始化Move的对象,并调用其成员函数,print()输出测试结果。 主函数定义如下: voidmain() { chara[25]; for(inti=0;i<24;i++) a[i]=rand()%128; a[24]=0; NUMt(a); t.process(); t.print(); } 输出结果为: 任务二程序 #include classNUM{ chardata[25]; intnum[128]; public: NUM(intdata) { for(inti=0;i<25;i++) this->data[i]=rand()%128; } voidprocess() { for(inti=0;i<128;i++) num[i]=0; for(i=0;i<25;i++) num[data[i]]++; } voidprint() { for(inti=0;i<25;i++) { cout< if((i+1)%5==0)cout< intk=0; for(i=0;i<128;i++) {if(num[i]! =0) {chartemp=i; cout< k++;} if(k%5==0)cout< } } }; voidmain() { NUMtest (1); test.process(); test.print(); } 任务三(第13题): 建立一个类MOVE,对数组中的元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。 具体要求如下: (1)私有数据成员 intarray[20]: 一维整型数组。 intn: 数组中元素的个数。 (2)公有成员函数 MOVE(intb[],intm): 构造函数,初始化成员数据。 voidchange(): 进行循环换位。 voidprint(): 输出一维数组。 (3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。 任务三分析 1、任务分析 初始化对象数组,定义3个变量依次存放对象数组的最后3个元素。 通过循环语句将前面的元素依次后移3个单位。 最后再把3个变量中的元素值赋给最前的三个数。 类的定义如下: #include classMOVE { intarray[20]; intn; public: MOVE(intb[],intm) voidchange() voidprint() }; 2、算法设计 初始化对象数组,定义3个变量a,b,c,依次将array数组的最后三个元素赋给它们。 再通过for循环语句,依次把前面的元素后移3位。 最后再把3个变量中的元素值赋给最前的三个数。 3、系统测试 在主函数中初始化对象数组,并调用其成员函数print()输出结果。 主函数的定义如下: voidmain() { inta[]={21,65,43,87,12,84,44,97,32,55}; MOVEs(a,10); s.change(); s.print(); } 用以测试的数据为: {21,65,43,87,12,84,44,97,32,55} 预期的结果为: 97,32,55,21,65,43,87,12,84,44 任务三程序 #include classMOVE { intarray[20]; intn; public: MOVE(intb[],intm) { n=m; for(inti=0;i array[i]=b[i]; } voidchange() { inta,b,c,t=n; a=array[t-1];b=array[t-2];c=array[t-3]; for(1;t-4>=0;t--) array[t-1]=array[t-4]; array[0]=c;array[1]=b;array[2]=a; } voidprint() { for(inti=0;i cout< cout< } }; voidmain() { inta[]={21,65,43,87,12,84,44,97,32,55}; MOVEs(a,10); s.change(); s.print(); } 任务四(第4题): 建立一个类MOVE,将数组中最大元素的值与最小元素的值进行互换。 具体要求如下: (1)私有成员数据 int*array: 一维整型数组。 intn: 数组中元素的个数。 (2)公有成员函数 MOVE(floatb[],intm): 构造函数,初始化成员数据。 voidexchange(): 输出平均值,并将数组中的元素按照要求重新放置。 voidprint(): 输出一维数组。 ~MOVE(): 析构函数。 (3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。 任务四分析 1、任务分析 给成员数据array分配合适大小的动态空间。 初始化后,通过for从句计算得出所有元素的和,之后求出平均值。 通过互换函数exchange()互换最值。 最后释放动态空间。 类的定义如下: #include classMOVE { int*array; intn; public: MOVE(intb[],intm) voidexchange() voidprint() ~MOVE() }; 2、算法设计 初始化后,通过for从句计算得出所有元素的和,之后求出平均值。 互换最值: 将第一个元素array[0]分别赋给最大值max和最小值min。 通过for从句,依次将后续元素和最值比较。 若比最大值大,则将该元素的值赋给max,同时记录元素位置,记为array[x];若比最小值小,则将该元素的值赋给min,同时记录元素位置array[y]。 遍阅完毕后,互换最值。 1、系统测试 在主函数中初始化对象数组,并调用其成员函数print()输出结果。 主函数的定义如下: voidmain() { intb[]={21,65,43,87,12,84,44,97,32,55}; MOVEtest(b,10); test.exchange(); test.print(); } 用以测试的数据为: {21,65,43,87,12,84,44,97,32,55} 预期的结果为: 21,65,43,87,97,84,44,12,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,max,min,x,y; floatave; max=min=array[0]; for(inti=0;i { s+=array[i]; if(array[i]>max){max=array[i];x=i;} if(array[i] } ave=s/n; cout<<"该数组的平均值为: "< array[y]=max;array[x]=min; } voidprint() { for(inti=0;i cout< } ~MOVE() { delete[]array; } }; voidmain() { intb[]={21,65,43,87,12,84,44,97,32,55}; MOVEtest(b,10); test.exchange(); test.print(); } 任务五(第6题): 定义一个字符窜类String,实现判断该字符窜是否为回文字符窜,所谓回文字符窜就是指该字符窜左右对称。 具体要求如下: (1)私有数据成员 char*str; nty: 标记是否为回文字符窜 (2)公有成员函数 String(char*s): 构造函数,用给定的参数s初始化成员数据str。 Y初始化为0. voidhuiwen(): 判断str所指的字符窜是否为回文字符窜。 voidshow(): 在屏幕上显示字符窜。 (3)在主程序中定义字符窜chars[]=”ababcedbaba”作为原始字符窜。 定义一个String类对象test,用s初始化test,完成对该类的测试。 任务五分析 1、任务分析 给数据成员str分配合适大小的动态空间。 初始化后,通过回文字符窜判断函数huiwen()进行判断。 输出字符窜,最后释放动态空间。 类的定义如下: #include #include classString { char*str; inty; public: String(char*s) voidhuiwen() voidshow() ~String(){delete[]str;} }; 2、算法设计 初始化后,定义变量y=1。 将字符窜str赋值给数组t,让数组t指针自增到指向最后一个元素。 同时让指针q指向原数组str的第一个元素。 通过for语句和if语句判断,循环时让t自减,q自增。 若循环过程中出现两指针所指元素不相等,则y=0。 最后通过switch语句输出判断提示语。 3、系统测试 在主函数中初始化对象数组,并调用其成员函数show()输出结果。 主函数的定义如下: voidmain() { chars[]="ababcedbaba"; Stringtest(s); test.show(); test.huiwen(); } 用以测试的数据为: "ababcedbaba" 预期的结果为: "ababcedbaba" 该数组不是回文字符窜。 任务五程序 #include #include classString { char*str; inty; public: String(char*s) { y=0; str=newchar[strlen(s)+1]; strcpy(str,s); } voidhuiwen() { char*t,*q=str; inty=1; t=str; while(*t)t++; t--; for(;q { if(q++! =t--)y=0; } switch(y) { case1: cout<<"该数组为回文数组."< case0: cout<<"该数组不是回文数组."< } } voidshow() { cout< } ~String(){delete[]str;} }; voidmain() { chars[]="ababcedbaba"; Stringtest(s); test.show(); test.huiwen(); } 任务六(第11题): 建立一个STRING,将一个字符窜交叉插入到另一个字符窜中(假定字符窜等长)。 例如将字符窜”abcde”交叉插入字符窜”ABCDE”的结果为”aAbBcCdDeE”或是”AaBbCcDdEe”。 具体要求如下: (1)私有数据成员 charstr1[80]: 存放被插入的字符窜。 charstr2[40]: 存放待插入的字符窜。 (2)公有成员函数 STRING(char*s1,char*s2): 构造函数,用s1和s2初始化str1和str2。 voidprocess(): 将str2中的字符串插入到str1中。 voidprint(): 输出插入后的字符串。 (3)在主程序中定义STRING类的对象test对该类进行测试。 任务六分析 1、任务分析 定义2个字符数组,保存需要交相出入的2个字符串。 再临时定义第三个字符串t用以保存被插入的字符串str1。 通过循环语句把需插入的字符串str2插入到被插入字符串str1中。 类的定义如下: #include #include classSTRING { charstr1[80]; charstr2[40]; public: STRING(char*s1,char*s2) voidprocess() voidprint() }; 2、算法设计 初始化2个字符串str1和str2。 定义第三个字符串t,将被插入字符串str1复制到t中。 通过while语句,让指向str1的指针在每被插入一次字符就自增一次。 插入字符串str2和t在每次插入一个字符之后都自增一次。 3、系统测试 在主函数中初始化对象数组,并调用其成员函数print()输出结果。 主函数的定义如下: voidmain() { chars1[20]="abcde";chars2[20]="ABCDE"; STRINGtest(s1,s2); test.process(); test.print(); } 用以测试的数据为: "abcde""ABCDE" 预期的结果为: ”aAbBcCdDeE” 任务六程序 #include #include classSTRING { charstr1[80]; charstr2[40]; public: STRING(char*s1,char*s2) { strcpy(str1,s1); strcpy(str2,s2); } voidprocess() { chart[80]; strcpy(t,str1); inti=0,j=0; while(str2[i]) { str1[j++]=str2[i]; str1[j++]=t[i]; i++; } str1[j]='\0'; } voidprint() { cout< } }; voidmain() { chars1[20]="abcde";chars2[20]="ABCDE"; STRINGtest(s1,s2); test.process(); test.print(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 江苏 科技大学 VC 程序 实践 答案