计算机程序设计实践.docx
《计算机程序设计实践.docx》由会员分享,可在线阅读,更多相关《计算机程序设计实践.docx(20页珍藏版)》请在冰豆网上搜索。
![计算机程序设计实践.docx](https://file1.bdocx.com/fileroot1/2023-5/31/a23b89b8-e8f8-4098-8334-c3ace15d59b5/a23b89b8-e8f8-4098-8334-c3ace15d59b51.gif)
计算机程序设计实践
江苏科技大学
课程实践报告
设计题目:
计算机程序设计实践(VC++)
设计时间:
2015.3.9至2015.3.16
学院:
数理学院
专业班级:
13级信息与计算科学1班
学生姓名:
陈明敏学号1340501101
********
2015年5月1日
一、实践任务
任务一:
试建立一个类SP,求
,另有辅助函数power()用于求
。
具体要求如下。
(1)私有数据成员。
Intn,k:
存放公式中n和k的值。
(2)公有成员函数。
SP(intn1,intk1):
构造函数,初始化成员数据n和k。
intpower(intm,intn):
求
。
intfun():
求公式的累加和。
voidshow():
输出求得的结果。
二、源程序清单
#include
classSP{
private:
intn,k;
public:
SP(intn1,intk1);
intpower(intm,intn);
intfun();
voidshow();
};
SP:
:
SP(intn1,intk1){
n=n1;
k=k1;
}
intSP:
:
power(intm,intn){
inta=m;
for(inti=1;i{
a*=m;
}
returna;
}
intSP:
:
fun(){
inta=0;
for(inti=1;i<=n;i++)
{
a+=power(i,k);
}
returna;
}
voidSP:
:
show()
{
cout<}
voidmain()
{inta;intb;
cin>>a>>b;
SPs(a,b);
s.fun();
s.show();
}
三、实践小结
本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,本题还使用了递归的方法
四、运行结果
一、实践任务
任务二:
建立一个STRING类,将一个字符串交叉插入到另一个字符串中(假定两字符串等长)。
例如,将字符串“abcde”交叉插入字符串“ABCDE”的结果为“aAbBcCdDeE”或“AaBbCcDdEe”。
具体要求如下。
(1)私有数据成员。
charstr1[60]:
存放被插入的字符串。
charstr2[40]:
存放待插入的字符串。
charstr3[100]:
存放插入后的字符串。
(2)公有成员函数。
STRING(char*s1,char*s2):
构造函数,用s1和s2初始化str1和str2。
voidprocess():
将str2中的字符串插入到str1中。
voidprint():
输出插入后的字符串。
(3)在主程序中定义STRING类的对象test对该类进行测试。
二、源程序清单
#include
#include
classSTRING{
private:
charstr1[80];
charstr2[40];
public:
STRING(char*s1,char*s2);
voidprocess();
voidprint();
};
STRING:
:
STRING(char*s1,char*s2){
strcpy(str1,s1);
strcpy(str2,s2);
}
voidSTRING:
:
process(){
chars[80];char*p=str1;char*q=str2;
intn=2*strlen(str1)-1;
for(inti=0;is[i]=*p++;
i++;
s[i]=*q++;
}
s[i]='\0';
strcpy(str1,s);
}
voidSTRING:
:
print(){
cout<}
voidmain(){
chars1[80]={"ABCDE"},s2[40]={"abcde"};
STRINGtest(s1,s2);
test.process();
test.print();
}
三、实践小结
本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了有关字符串的排序的求解方式。
四、运行结果
一、实践任务
任务三:
建立一个类MOVE,对数组中元素进行循环换位,即每个元素后移三位,最后三个元素移到最前面。
具体要求如下。
(1)私有数据成员。
intarray[20]:
一维整型数组。
intn:
数组中元素的个数。
(2)公有成员函数。
MOVE(intb[],intm):
构造函数,初始化成员数据。
voidchange():
进行循环换位。
voidprint()输出一维数组。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
二、源程序清单:
#include
classMOVE
{
private:
intarray[20];
intn;
public:
MOVE(intb[],intm);
voidchange();
voidprint();
};
MOVE:
:
MOVE(intb[],intm){
for(inti=0;i{
array[i]=b[i];
}
n=m;
}
voidMOVE:
:
change(){
inta=n;
intb[3];
for(inti=0;i<3;i++){
b[i]=array[a-3];
a++;
}
for(intj=n-1;j>=3;j--){
array[j]=array[j-3];
}
for(intk=0;k<3;k++){
array[k]=b[k];
}
}
voidMOVE:
:
print(){
for(inti=0;icout<cout<}
voidmain(){
inta[10]={21,65,43,87,12,84,44,97,32,55};
MOVEs(a,10);
s.change();
s.print();
}
三、实践小结
本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了有关数组中元素进行循环换位的求解方式。
四、运行结果
一、实践任务
任务四:
定义一个类SIN,求
。
具体要求如下。
(1)私有数据成员。
doublex:
输入公式中x的值,求sin(x)。
intn:
输入公式中n的值。
(2)公有成员函数。
SIN(doublex,intn):
构造函数,用于初始化x和n的值。
doublepower(intq):
求q!
的值。
doublemi(doublem,intn):
求
的值。
doublefun():
用于求sin(x)的值。
voidshow():
输出求得的结果。
(3)在程序中定义对象test,对该类进行测试。
二、源程序清单:
#include
classSIN{
private:
doublex;
intn;
public:
SIN(doublex,intn);
doublepower(intq);
doublemi(doublem,intn);
doublefun();
voidshow();
};
SIN:
:
SIN(doublex,intn){
this->x=x;
this->n=n;
}
doubleSIN:
:
power(intq){
doubles=1;
intc=1;
for(;c<=q;c++)
{
s*=c;
}
returns;
}
doubleSIN:
:
mi(doublem,intn){
doubles=m;
intc=1;
for(;cs*=m;
}
returns;
}
doubleSIN:
:
fun(){
doubles=0;
doublek=-1;
for(intm=1;m<=n;m++){
k*=(-1);
s+=k*mi(x,2*m-1)/power(2*m-1);
}
returns;
}
voidSIN:
:
show()
{
cout<}
voidmain()
{
inta,b;
cout<<"输入两个数整数:
";
cin>>a>>b;
SINtest(a,b);
test.fun();
test.show();
}
三、实践小结
本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了递归的方法。
四、运行结果
一、实践任务
任务五:
定义一个方阵类Array,实现对方阵进行逆时针
旋转。
如图5-4所示。
图5-4对方阵进行逆时针旋转
具体要求如下。
(1)私有数据成员。
Inta[4][4]:
用于存放方阵。
(2)公有成员函数。
Array(inta1[][4],intn):
构造函数,用给定的参数a1初始化数据成员a。
voidxuanzhuan():
实现对方阵a进行逆时针
的旋转。
voidshow():
在屏幕上显示组元素。
(3)在主程序中定义数组intb[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};作为原始数组。
定义一个Array类对象test,用b初始化test,完成对该类的测试。
二、源程序清单:
#include
classArray{
private:
inta[4][4];
public:
Array(inta1[][4],intn);
voidxuanzhuan();
voidshow();
};
Array:
:
Array(inta1[][4],intn){
for(inti=0;ifor(intj=0;j<4;j++)
{
a[i][j]=a1[i][j];
}
}
}
voidArray:
:
xuanzhuan(){
intb[4][4];
for(inti=0;i<4;i++){
for(intj=0;j<4;j++)
{
b[j][i]=a[i][j];
}
}
for(i=0;i<4;i++){
for(intj=0;j<4;j++)
{
a[i][j]=b[3-i][j];
}
}
}
voidArray:
:
show(){
for(inti=0;i<4;i++){
for(intj=0;j<4;j++)
{
cout<}
cout<}
}
voidmain()
{
intb[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
Arraytest(b,4);
cout<<"原来的数组为:
"<test.show();
cout<<"旋转后的数组为:
"<test.xuanzhuan();
test.show();
}
三、实践小结
本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了有关二维数组旋转的求解方式。
四、运行结果
一、实践任务
任务六:
建立一个类NUM,求指定数据范围内的所有素数(质数)。
提示:
素数定义是“只能被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个素数。
(3)在主函数中完成对该类的测试。
定义NUM类对象test,通过test调用成员函数完成求素数及输出素数的工作。
原始数据为{4,5,9,11,36,29,31,101,56,199}。
二、源程序清单:
#include
classNUM
{
private:
intdata[10];
intprime[10];
intnum;
public:
NUM(intn[]);
intisprime(intx);
voidprocess();
voidprint();
};
NUM:
:
NUM(intn[])
{
for(inti=0;i<10;i++)
data[i]=n[i];
num=0;
}
intNUM:
:
isprime(intx)
{
if(x==1)return0;
if(x==2)return1;
for(intj=x/2;j>=2;j--)
{
if(x%j==0)return0;
}
return1;
}
voidNUM:
:
process()
{inta=0;
for(inti=0;i<10;i++,a=0)
{
a=isprime(data[i]);
if(a)
{
prime[num]=data[i];
num++;
}
}
}
voidNUM:
:
print()
{
cout<<"数组中总共有"<cout<<"分别是:
"<for(inti=0;i{
cout<if((i+1)%4==0)cout<}
}
voidmain()
{
inta[10]={4,5,9,11,36,29,31,101,56,199};
NUMs(a);
s.process();
s.print();
}
三、实践小结
本题用了类的方法求解,让我学会了用构造函数和析构函数写程序,还让我更熟练掌握了有关如何求素数的这种类型的题目。
四、运行结果