c++课程实践.docx
《c++课程实践.docx》由会员分享,可在线阅读,更多相关《c++课程实践.docx(26页珍藏版)》请在冰豆网上搜索。
c++课程实践
江苏科技大学
课程实践报告
设计题目:
计算机程序设计实践(VC++)
设计时间20011-3-6至2011-3-13
学院(系):
机械工程
专业班级:
机制3班
学生姓名:
郑杰学号0940202329
指导老师:
石亮
2011年03月
任务一
一、实践任务
3.建立一个类MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。
二、系统设计
1、类的描述与定义
(1)私有数据成员
●floatarray[20]:
一维整型数组。
●intn:
数组中元素的个数。
(2)公有成员函数
●MOVE(floatb[],intm):
构造函数,初始化成员数据。
●voidaverage():
输出平均值,并将数组中的元素按要求重新放置。
●voidprint():
输出一维数组。
2、主要函数设计
在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。
三、系统测试
voidmain()
{
floatb1[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3};
intnum;
num=sizeof(b1)/sizeof(float);
MOVEs(b1,num);
s.average();
s.print();
}
四、实践小结
通过本题我学会了平均值的求法以及一组数的排序。
五、参考文献
[1]齐志昌。
软件工程。
北京:
高等教育出版社,2004
[2]钱雪忠。
数据库与SQLSever2005教程。
北京:
清华大学出版社,2007
[3]张荣梅,梁晓林等。
VisualC++实用教程。
北京:
中国铁道出版社,2008
[4]张岳新。
VisualC++程序设计。
苏州:
苏州大学出版社,2007
[5]祁云嵩,刘永良,华伟。
VisualC++程序设计解析与训练。
华东理工大学出版社,2006
六、源程序清单
#include
classMOVE{
private:
floatarray[20];
intn;
public:
MOVE(floatb[],intm)
{
for(inti=0;i{
array[i]=b[i];
}
n=m;
}
voidaverage();
voidprint();
~MOVE()
{};
};
voidMOVE:
:
average()
{
floatave=0;
inti,j;
for(i=0;i{
ave+=array[i];
}
ave/=n;
cout<floatturn[20];
j=0;
for(i=0;i{
if(array[i]<=ave)
{
turn[j]=array[i];
j++;
}
}
j=0;
for(i=0;i{
if(array[i]>ave)
{
turn[n-1-j]=array[i];
j++;
}
}
for(i=0;i{
array[i]=turn[i];
}
}
voidMOVE:
:
print()
{
for(inti=0;i{
cout<}
}
voidmain()
{
floatb1[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3};
intnum;
num=sizeof(b1)/sizeof(float);
MOVEs(b1,num);
s.average();
s.print();
}
任务二
一、实践任务
6.定义一个字符串类String,实现判断该字符串是否为回文字符串。
所谓回文字符串,是指该字符串左右对称。
例如字符串“123321”是回文字符串。
二、详细设计
1、类的描述与定义
(1)私有数据成员
●char*str;
●inty:
标记是否为回文字符串。
(2)公有成员函数
●String(char*s):
构造函数,用给定的参数s初始化数据成员str。
y初始化为0。
●voidhuiwen():
判断str所指向的字符串是否为回文字符串。
●voidshow():
在屏幕上显示字符串。
2、主要函数设计
在主程序中定义字符串chars[]=”ababcedbaba”作为原始字符串。
定义一个String类对象test,用s初始化test,完成对该类的测试。
三、系统测试
voidmain()//测试;
{
chars[]="ababcedbaba";
Stringtest(s);
test.huiwen();
test.show();
}
四、实践小结
掌握判断回文字符串的一般形式。
五、参考文献
[1]齐志昌。
软件工程。
北京:
高等教育出版社,2004
[2]钱雪忠。
数据库与SQLSever2005教程。
北京:
清华大学出版社,2007
[3]张荣梅,梁晓林等。
VisualC++实用教程。
北京:
中国铁道出版社,2008
[4]张岳新。
VisualC++程序设计。
苏州:
苏州大学出版社,2007
[5]祁云嵩,刘永良,华伟。
VisualC++程序设计解析与训练。
华东理工大学出版社,2006
六、源程序清单
#include
#include
classString{
private:
char*str;
inty;
public:
String(char*s)
{
intn=strlen(s);
str=newchar[n+1];
strcpy(str,s);
y=0;
}
voidhuiwen();
voidshow();
~String()
{if(str)delete[]str;}
};
voidString:
:
huiwen()//判断str所指向的字符串是否为回文字符串;
{
intn,judge=0;
n=strlen(str);
for(inti=0;i<(n/2);i++)
{
if(str[i]==str[n-1-i])judge++;
}
if(judge==i)y=1;
}
voidString:
:
show()//输出;
{
if(y==1)cout<<"y=1,¸该字符串是回文数"<elsecout<<"y=0,该字符串不是回文数"<}
voidmain()//测试;
{
chars[]="ababcedbaba";
Stringtest(s);
test.huiwen();
test.show();
}
任务三
一、实践任务
7.建立一个类PHALANX,生成并显示一个折叠方阵。
折叠方阵如下图所示。
折叠方阵的生成过程为:
起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。
二、详细设计
1、类的描述与定义
(1)私有数据成员
●int(*p)[20]:
指向按照折叠规律存放方阵的二维整型数组。
●intstartnum:
折叠方阵的起始数。
●intn:
存放方针的层数。
(2)公有成员函数
●PHALANX(ints,intm):
构造函数,初始化成员数据。
●voidprocess():
生成起始数为startnum的n行方阵。
●voidprint():
输出折叠方阵。
●~PHALANX():
析构函数。
2、主要函数设计
在主程序中对该类进行测试。
三、系统测试
voidmain()
{
ints1,m1;
cout<<"请输入该折叠方阵的起始数和行数";
cin>>s1>>m1;
PHALANXtest(s1,m1);
test.process();
test.print();
}
四、实践小结
根据折叠方阵的产生方式进行相应的逻辑循环实现。
五、参考文献
[1]齐志昌。
软件工程。
北京:
高等教育出版社,2004
[2]钱雪忠。
数据库与SQLSever2005教程。
北京:
清华大学出版社,2007
[3]张荣梅,梁晓林等。
VisualC++实用教程。
北京:
中国铁道出版社,2008
[4]张岳新。
VisualC++程序设计。
苏州:
苏州大学出版社,2007
[5]祁云嵩,刘永良,华伟。
VisualC++程序设计解析与训练。
华东理工大学出版社,2006
六、源程序清单
#include
classPHALANX{
private:
int(*p)[20];
intstartnum;
intn;
public:
PHALANX(ints,intm)
{
startnum=s;
n=m;
p=newint[m][20];
}
voidprocess();
voidprint();
~PHALANX()
{if(p)delete[]p;}
};
voidPHALANX:
:
process()//生成起始数为stratnum的n行螺旋方阵;
{
intturn;
turn=p[0][0]=startnum;
inti,j;
for(intk=n-2;k>=0;k--)//按照折叠方阵的生成过程进行赋值;
{
for(i=0,j=n-k-1;ip[i][j]=++turn;
i--;
j--;
for(;j>=0;j--)
p[i][j]=++turn;
}
}
voidPHALANX:
:
print()
{
for(inti=0;i{
for(intj=0;j{
cout<
}
cout<}
}
voidmain()
{
ints1,m1;
cout<<"请输入该折叠方阵的起始数和行数";
cin>>s1>>m1;
PHALANXtest(s1,m1);
test.process();
test.print();
}
任务四
一、实践任务
11.建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。
例如将字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。
二、详细设计
1、类的描述与定义
(1)私有数据成员
●charstr1[80]:
存放被插入的字符串。
●charstr2[40]:
存放待插入的字符串。
(2)公有成员函数
●STRING(char*s1,char*s2):
构造函数,用s1和s2初始化str1和str2。
●voidprocess():
将str2中的字符串插入到str1中。
●voidprint():
输出插入后的字符串。
2、主要函数设计
在主程序中定义STRING类的对象test对该类进行测试。
三、系统测试
voidmain()//测试
{
STRINGtest("ABCDE","abcde");
test.process();
test.print();
}
四、实践小结
发现字符插入的规律,再依次放入相应字符位置。
五、参考文献
[1]齐志昌。
软件工程。
北京:
高等教育出版社,2004
[2]钱雪忠。
数据库与SQLSever2005教程。
北京:
清华大学出版社,2007
[3]张荣梅,梁晓林等。
VisualC++实用教程。
北京:
中国铁道出版社,2008
[4]张岳新。
VisualC++程序设计。
苏州:
苏州大学出版社,2007
[5]祁云嵩,刘永良,华伟。
VisualC++程序设计解析与训练。
华东理工大学出版社,2006
六、源程序清单
#include
#include
classSTRING{
private:
charstr1[80];//存放被插入的字符串;
charstr2[40];//存放待插入的字符串;
public:
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;i<2*n;i+=2,j++)
{
str1[i]=str2[j];//在空出的位置处依次插入字符串;
}
i--;
for(;j<=strlen(str2);j++,i++)
{
str1[i]=str2[j];//将过长额字符串放入被插入的字符串尾部,完成插入;
}
}
else//当待插入的字符串abcde比被插入的字符串ABCDEFG短时,逻辑算法:
ABCDEFG->ABCDEFG->空格处插入abcde->AaBbCcDdEeFG;
{
for(i=n;i>strlen(str2)-1;i--)
{
str1[i+strlen(str2)]=str1[i];//比待插入的字符串长的部分均向后移strlen(str2)位;
}
for(i=strlen(str2)-1;i>0;i--)
{
str1[i+i]=str1[i];//之前的部分均向后移i位;
}
for(i=1,j=0;i<2*strlen(str2);i+=2,j++)
{
str1[i]=str2[j];//将待插入的字符串插入空格处,完成插入;
}
}
}
voidSTRING:
:
print()//输出插入后的字符串
{
cout<<"插入后的字符串为:
"<}
voidmain()//测试
{
STRINGtest("ABCDE","abcde");
test.process();
test.print();
}
任务五
一、实践任务
27.建立一个类NUM,求指定数据范围内的所有素数(质数)。
提示:
素数定义是“只能被1和它本身整除的整数”,即质数。
二、详细设计
1、类的描述与定义
(1)私有数据成员
●intdata[10]:
依次存放原始数据。
●intprime[10]:
存放指定数据内所求出的所有素数。
●intnum:
存放素数个数。
(2)公有成员函数
●NUM(intn[]):
构造函数,用参数n初始化data,同时初始化num为0。
●intisprime(intx):
判断x是否为素数。
若是素数,返回1,否则,返回0。
●voidprocess():
求指定data数组中的所有素数,把它们依次存放在数组prime中,并将求出的素数个数赋给num。
●voidprint():
输出求出的素数个数及所有素数,每行输出4个素数。
2、主要函数设计
在主函数中完成对该类的测试。
定义NUM类对象test,通过test调用成员函数完成求素数及输出素数的工作。
原始数据为{4,5,9,11,36,29,31,101,56,199}。
三、系统测试
voidmain()
{
intn[]={4,5,9,11,36,29,31,101,56,199};
NUMtest(n);
test.process();
test.print();
}
四、实践小结
应熟练掌握质数的判断方法
五、参考文献
[1]齐志昌。
软件工程。
北京:
高等教育出版社,2004
[2]钱雪忠。
数据库与SQLSever2005教程。
北京:
清华大学出版社,2007
[3]张荣梅,梁晓林等。
VisualC++实用教程。
北京:
中国铁道出版社,2008
[4]张岳新。
VisualC++程序设计。
苏州:
苏州大学出版社,2007
[5]祁云嵩,刘永良,华伟。
VisualC++程序设计解析与训练。
华东理工大学出版社,2006
六、源程序清单
#include
#include
classNUM{
private:
intdata[10];
intprime[10];
intnum;
public:
NUM(intn[])
{
for(inti=0;i<10;i++)
data[i]=n[i];//依次存放原始数据;
num=0;
}
intisprime(intx);
voidprocess();
voidprint();
};
intNUM:
:
isprime(intx)//判断x是否为素数。
若是素数,返回1,否则,返回0;
{
if(x>1)
{
if(x==2||x==3)return1;
else
{
for(inti=2;i<=sqrt(x);i++)
{
if(x%2==0)return0;
}
if(i>sqrt(x))return1;
}
}
elsereturn0;
}
voidNUM:
:
process()//求指定data数组中的所有素数,把它们依次存放在数组prime中,并将求出的素数个数赋给num;
{
for(inti=0,j=0;i<10;i++)
{
if(isprime(data[i]))
{
prime[j]=data[i];//存放指定数据内所求出的所有素数;
j++;
num++;//存放素数个数;
}
}
}
voidNUM:
:
print()//输出求出的素数个数及所有素数,把它们依次存放在数组prime中,并将求出的素数个数赋给num;
{
cout<<"素数个数为:
"<for(inti=0;i{
cout<if((i+1)%4==0)cout<}
cout<}
voidmain()
{
intn[]={4,5,9,11,36,29,31,101,56,199};
NUMtest(n);
test.process();
test.print();
}
任务六
一、实践任务
32.建立一个类SUM,使用二维数组输入“Followme”,“BASIC”,“Greatwall”,“Fortran”,“Pascal”,将它们按从小到大的顺序排列后输出。
二、详细设计
1、类的描述与定义
(1)私有数据成员
●int*p[5]:
存放二维数组每行的字符串的地址。
(2)公有成员函数
●SUM(intd[5][5]):
构造函数,初始化成员数据。
●voidprocess1():
对二维数组中存放的字符串进行排序。
●voidprint():
输出二维数组中排好序的字符串。
2、主要函数设计
在主程序中对该类进行测试。
三、系统测试
voidmain()
{//每个字符串的值为该字符串的首元素地址,故将每个地址值转换为整型数值保存在整型数组中;
Intd[5][5]={{int("Followme")},{int("BASIC")},{int("Greatwall")},{int("Fortran")},{int("Pascal")}};
SUMtest(d);
cout<<"原字符串为:
"<test.print();
test.process1();
cout<<"排好序的字符串为:
"<test.print();
}
四、实践小结
掌握各数据类型之间的转化。
五、参考文献
[1]齐志昌。
软件工程。
北京:
高等教育出版社,2004
[2]钱雪忠。
数据库与SQLSever2005教程。
北京:
清华大学出版社,2007
[3]张荣梅,梁晓林等。
VisualC++实用教程。
北京:
中国铁道出版社,2008
[4]张岳新。
VisualC++程序设计。
苏州:
苏州大学出版社,2007
[5]祁云嵩,刘永良,华伟。
VisualC++程序设计解析与训练。
华东理工大学出版社,2006
六、源程序清单
#include
#include
classSUM{
private:
int*p[5];//存放二维数组每行的字符串的地址;
public:
SUM(intd[5][5])
{
for(inti=0;i<5;i++)
p[i]=(int*)d[i][0];//整型数组每行第0列保存字符串的地址(为int类型),故在赋值时需要转换为int*类型;
}
voidprocess1();
voidprint();
};
voidSUM:
:
process1()//对二维数组中存放的字符串进行排序;
{
int*t;
for(inti=0;i<5;i++)
{
for(intj=i+1;j<5;j++)
{
if(strcmp((char*)p[i],(char*)p[j])>0)//将int*类型数据转换为char*类型,才可利用strcmp()函数对该地址值上的字符串比较,排序;
{
t=p[i];
p[i]=p[j];
p[j]=t;
}