江苏科技大学C++课程实践报告答案Word文档格式.docx
《江苏科技大学C++课程实践报告答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《江苏科技大学C++课程实践报告答案Word文档格式.docx(95页珍藏版)》请在冰豆网上搜索。
classSP
{
intn,k;
public:
SP(intn1,intk1)
{
n=n1;
k=k1;
}
intpower(intm,intn)
intp=1;
for(inti=1;
i<
n+1;
i++)
p*=m;
returnp;
intfun()
ints=0;
s+=power(i,k);
returns;
voidA()
cout<
<
"
n="
n<
k="
k<
f(n,k)="
fun()<
endl;
};
voidmain()
SPa(3,3);
a.power(3,3);
a.fun();
a.A();
}四、实践小结
掌握用循环语句求m^n,和m!
,熟练掌握函数的调用。
五、运行结果
任务三
3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。
●floatarray[20]:
一维整型数组。
●intn:
数组中元素的个数。
●MOVE(floatb[],intm):
构造函数,初始化成员数据。
●voidaverage():
输出平均值,并将数组中的元素按要求重新放置。
●voidprint():
输出一维数组。
在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。
三、源程序清单
四、实践小结
应熟练掌握数组与指针的应用。
任务四
4.建立一个类MOVE,将数组中最大元素的值与最小元素的值互换。
●int*array:
●MOVE(intb[],intm):
●voidexchange():
●~MOVE():
析构函数。
在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
学会求数组中最大元素与最小元素方法,并实现交换。
任务六
6.定义一个字符串类String,实现判断该字符串是否为回文字符串。
所谓回文字符串,是指该字符串左右对称。
例如字符串“123321”是回文字符串。
●char*str;
●inty:
标记是否为回文字符串。
●String(char*s):
构造函数,用给定的参数s初始化数据成员str。
y初始化为0。
●voidhuiwen():
判断str所指向的字符串是否为回文字符串。
●voidshow():
在屏幕上显示字符串。
在主程序中定义字符串chars[]=”ababcedbaba”作为原始字符串。
定义一个String类对象test,用s初始化test,完成对该类的测试。
掌握判断回文字符串的一般形式。
任务十一
11.建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。
例如将字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。
●charstr1[80]:
存放被插入的字符串。
●charstr2[40]:
存放待插入的字符串。
●STRING(char*s1,char*s2):
构造函数,用s1和s2初始化str1和str2。
●voidprocess():
将str2中的字符串插入到str1中。
输出插入后的字符串。
在主程序中定义STRING类的对象test对该类进行测试。
#include<
string.h>
classSTRING{
private:
charstr1[80];
//存放被插入的字符串;
charstr2[40];
//存放待插入的字符串;
STRING(char*s1,char*s2)
strcpy(str1,s1);
strcpy(str2,s2);
voidprocess();
voidprint();
voidSTRING:
:
process()
inti,j;
intn=strlen(str1);
if(strlen(str2)>
strlen(str1))
{//当待插入的字符串ABCDEFG比被插入的字符串abcde长或相等时,逻辑算法:
abcde->
abcde->
空格处依次插入ABCDEFG->
aAbBcCdDeEFG;
for(i=n-1;
i>
0;
i--)
{
str1[i+i]=str1[i];
//被插入的字符串由最后一位开始各位向后移动i位;
}
for(i=1,j=0;
2*n;
i+=2,j++)
str1[i]=str2[j];
//在空出的位置处依次插入字符串;
i--;
for(;
j<
=strlen(str2);
j++,i++)
//将过长额字符串放入被插入的字符串尾部,完成插入;
else//当待插入的字符串abcde比被插入的字符串ABCDEFG短时,逻辑算法:
ABCDEFG->
ABCDEFG->
空格处插入abcde->
AaBbCcDdEeFG;
for(i=n;
strlen(str2)-1;
str1[i+strlen(str2)]=str1[i];
//比待插入的字符串长的部分均向后移strlen(str2)位;
for(i=strlen(str2)-1;
//之前的部分均向后移i位;
2*strlen(str2);
//将待插入的字符串插入空格处,完成插入;
}
}
print()//输出插入后的字符串
cout<
插入后的字符串为:
str1<
voidmain()//测试
STRINGtest("
ABCDE"
"
abcde"
);
test.process();
test.print();
发现字符插入的规律,再依次放入相应字符位置。
任务十二
12.建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不等长)。
例如将字符串“abcde”交叉插入字符串“ABCDEFG”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。
●charstr1[60]:
●charstr3[100]:
存放插入后的字符串。
将str2中的字符串插入到str1中,存放到str3中。
charstr1[60];
charstr3[100];
strcpy(str3,str1);
//将str2中的字符串插入到str1中,存放到str3中;
str3<
ABCDEFG"
任务十三
13.建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。
●intarray[20]:
●voidchange():
进行循环换位。
classMOVE{
intarray[20];
//一维整型数组;
intn;
//数组中的元素个数;
MOVE(intb[],intm)
for(inti=0;
m;
array[i]=b[i];
n=m;
voidchange();
voidMOVE:
change()//进行循环换位,即每个元素后移3位,最后3个元素移到最前面;
inttem[3];
//建立临时数组,用于存放最后3个元素;
inti=0;
while(i<
3)
tem[2-i]=array[n-1-i];
//将最后3个元素依次放入临时数组中;
i++;
for(i=0;
n-3;
i++)//将原数组的最后一个至第4个元素依次后移3位;
array[n-1-i]=array[n-1-3-i];
3;
i++)//将临时数组中存放的最后3个元素依次放入后移后的原数组中,完成循环换位;
array[i]=tem[i];
print()//输出一维数组;
for(inti=0;
n;
array[i]<
'
\t'
;
ints[]={21,65,43,87,12,84,44,97,32,55};
intn=sizeof(s)/sizeof(int);
MOVEtest(s,n);
test.change();
利用临时数组先保存后3位,再依次把数放入对应位。
任务十四
14.建立一个类MOVE,实现将数组中大字字母元素放在小写字母元素的左边。
●char*array:
一维字符数组。
●MOVE(charb[],intm):
进行排序换位。
在主程序中用数据"
fdsUFfsTjfsKFEkWC"
对该类进行测试。
char*array;
public:
MOVE(charb[],intm)
{n=m;
array=newchar[n+1];
strcpy(array,b);
voidchange()
{
char*p1=newchar[strlen(array)+1];
//用于存大写;
char*p2=newchar[strlen(array)+1];
//存小写;
inti,j=0,k=0;
for(i=0;
strlen(array);
i++)//大写与小写分别存放;
if(array[i]>
='
A'
&
Z'
)
{
p1[j]=array[i];
j++;
}
else{p2[k]=array[i];
k++;
p1[j]=p2[k]='
\0'
strcat(p1,p2);
//存放大写组与小写组拼接;
strcpy(array,p1);
//拷贝至array;
delete[]p1;
delete[]p2;
voidprint()
array<
~MOVE()
{if(array)
delete[]array;
voidmain()
charb[]="
n=(sizeof(b)-1)/sizeof(char);
MOVEtest(b,n);
利用临时数组,分别保存大写与小写字母,再实现功能。
任务十五
16.定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。
方阵的变换形式为:
F=W*fT
f为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为
1001
0110
●int(*a)[4]:
a指向方阵数组。
●intw[4][4]:
w为变换矩阵。
●intm:
m表示方阵的行和列数。
●CMatrix(inta[][4],intm):
用给定的参数a和m初始化数据成员a和m;
对变换矩阵w进行初始化,要求必须用循环实现。
●voidTransform():
根据上述变换算法,求出变换后的数组形式,存放在原始数组内。
在屏幕上显示数组元素。
●~CMatrix():
释放动态分配的空间。
在主程序中定义数组intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}作为原始数组。
定义一个CMatrix类对象test,用arr初始化test,完成对该类的测试。
classCMatrix{
int(*a)[4];
intw[4][4];
//变换矩阵
intm;
//表示方阵的行和列数;
CMatrix(inta[][4],intm)
inti,j;
this->
a=newint[m][4];
m=m;
4;
for(j=0;
j++)
if(i==j||i+j==4-1)
w[i][j]=1;
else
w[i][j]=0;
this->
a[i][j]=a[i][j];
voidTransform();
voidshow();
~CMatrix()
{if(a)delete[]a;
voidCMatrix:
Transform()//根据变换算法,求出变换后的数组形式,存放在原始数组内;
inti,j,k;
i++)//求原始矩阵的转置,并存放在原始数组中;
for(j=i;
k=a[i][j],a[i][j]=a[j][i],a[j][i]=k;
intsum;
//用来存放矩阵乘法中,行列中元素依次相乘的累加和;
intturn[4][4];
//临时数组,用来存放矩阵乘法所求得的值;
i++)//实现矩阵的乘法;
for(j=0;
sum=0;
for(k=0;
k++)
sum+=w[i][k]*a[k][j];
turn[i][j]=sum;
i++)//将临时数组的值存放入原始数组中;
a[i][j]=turn[i][j];
show()//在屏幕上显示数组元素;
for(intj=0;
cout<
a[i][j]<
intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
CMatrixtest(arr,4);
原矩阵为:
test.show();
test.Transform();
经线性变换后的矩阵为:
应熟练掌握矩阵的乘法方式。
任务十六
17.定义一个类SIN,求
●floatx:
输入公式中x的值,求sin(x)。
输入公式中n的值。
●SIN(floatx,intn):
构造函数,用于初始化x和n的值。
●intpower(intq):
求q!
的值。
●floatmi(float