C++程序设计实践报告.docx

上传人:b****6 文档编号:4525405 上传时间:2022-12-01 格式:DOCX 页数:22 大小:20.09KB
下载 相关 举报
C++程序设计实践报告.docx_第1页
第1页 / 共22页
C++程序设计实践报告.docx_第2页
第2页 / 共22页
C++程序设计实践报告.docx_第3页
第3页 / 共22页
C++程序设计实践报告.docx_第4页
第4页 / 共22页
C++程序设计实践报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C++程序设计实践报告.docx

《C++程序设计实践报告.docx》由会员分享,可在线阅读,更多相关《C++程序设计实践报告.docx(22页珍藏版)》请在冰豆网上搜索。

C++程序设计实践报告.docx

C++程序设计实践报告

 

课程实践报告

 

设计题目:

程序设计(VC++)实践

 

设计时间2013-1-至2013-1-

 

学院(系):

计算机科学与工程学院

 

2013年1月

 

一.实践任务

选择题目,创新性题目可只选择1题,仅选提升题应许多于3题,仅选基础题应许多于6题,也可组合

选题,还可自行选择感兴趣的题目(须经指导老师鉴定)。

关于提升题、创新题及游戏题可构成团队开发,但应拟订详尽的项目分工说明。

二.实验步骤及记录(题目,源程序代码及运转结果)

1.与学号对应的题(必做题):

基础题12

题目:

成立一个STRING,将一个字符串交错插入到另一个字符串中(假设两字符串不

等长)。

比如将字符串“abcde”交错插入字符串“ABCDEFG”的结果为

“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。

详细要求以下:

(1)私有数据成员

charstr1[60]

寄存被插入的字符串。

charstr2[40]

寄存待插入的字符串。

charstr3[100]

寄存插入后的字符串。

(2)公有成员函数

STRING(char*s1,char*s2):

结构函数,用

s1

s2

初始化

str1

和str2。

voidprocess():

str2

中的字符串插入到

str1

中,寄存到

str3

中。

voidprint():

输出插入后的字符串。

(3)在主程序中定义STRING类的对象test对该类进行测试。

源程序代码:

#include

#include

classSTRING{

charstr1[60];

charstr2[40];

charstr3[100];

public:

STRING(char*s1,char*s2){

strcpy(str1,s1);

strcpy(str2,s2);

 

}

voidprocess(){

char*p1=str1,*p2=str2;

for(inti=0;*p2;i=i+2){

for(intk=strlen(str1);k>=i;k--){

str1[k+1]=str1[k];

}

*p1=*p2;

p1=p1+2;

p2++;

}

}

voidprint(){

strcpy(str3,str1);

cout<

}

};

voidmain(){

chars1[60]="ABCDEFG";

chars2[40]="abcde";

cout<<"原字符串:

"<

cout<<"交错插入后的字符串:

";

STRINGtest(s1,s2);

test.process();

test.print();

}

运转结果:

2-6为选做题,此中2,3,4为基础题;5,6为提升题。

2.基础题4

题目:

成立一个类MOVE,将数组中最大元素的值与最小元素的值交换。

详细要求以下:

(1)私有数据成员

int*array:

一维整型数组。

intn:

数组中元素的个数。

(2)公有成员函数

MOVE(intb[],intm):

结构函数,初始化成员数据。

voidexchange():

输出均匀值,并将数组中的元素按要求从头搁置。

voidprint():

输出一维数组。

~MOVE():

析构函数。

(3)在主程序顶用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。

源程序代码:

#include

classMOVE{

int*array;

intn;

 

public:

MOVE(intb[],intm){

n=m;

array=newint[m];

for(inti=0;i

array[i]=b[i];

}

voidexchange(){

intb[10];

for(intk=0;k

b[k]=array[k];

for(inti=0;i

for(intj=i+1;j

if(b[j]>=b[i]){

inttemp=b[i];

b[i]=b[j];

b[j]=temp;

}

intmax=b[0],min=b[n-1];

for(intp=0;p

if(array[p]==max)array[p]=min;

elseif(array[p]==min)array[p]=max;

}

}

voidprint(){

for(inti=0;i

cout<

cout<

}

~MOVE(){delete[n]array;}

};

voidmain(){

inta[10]={21,65,43,87,12,84,44,97,32,55};

cout<<"原数组:

"<

for(inti=0;i<10;i++)

cout<

cout<

cout<<"交换最大值和最小值后的数组:

"<

MOVEa1(a,10);

a1.exchange();

a1.print();

}

运转结果:

3.基础题16

题目:

定义一个方阵类CMatrix,并依据给定算法实现方阵的线性变换。

方阵的变换形式

 

为:

F=W*fT

f为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为

1001

0110

0110

1001

详细要求以下:

(1)私有数据成员

int(*a)[4]:

a指向方阵数组。

intw[4][4]:

w为变换矩阵。

intm:

m表示方阵的行和列数。

(2)公有成员函数

CMatrix(inta[][4],intm):

用给定的参数a和m初始化数据成员a和m;对变换矩阵w进行初始化,要求一定用循环实现。

voidTransform():

依据上述变换算法,求出变换后的数组形式,寄存在原始数组内。

voidshow():

在屏幕上显示数组元素。

l~CMatrix():

开释动向分派的空间。

(3)在主程序中定义数组intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}作为原始数组。

定义一个CMatrix类对象test,用arr初始化test,达成对该类的测试。

源程序代码:

#include

classCMatrix{

int(*a)[4];

intw[4][4];

intm;

public:

CMatrix(inta[][4],intm){

this->m=m;

this->a=newint[this->m][4];

for(inti=0;im;i++)

for(intj=0;jm;j++)

this->a[i][j]=a[i][j];

for(i=0;i<4;i++){

for(intj=0;j<4;j++)

if(i+j==3||i==j)w[i][j]=1;

elsew[i][j]=0;

}

}

voidTransform(){

intb[4][4];

for(inti=0;i

for(intj=0;j

b[i][j]=a[j][i];

}

 

for(intp=0;p<4;p++){

for(intq=0;q<4;q++)

a[p][q]=w[p][0]*b[0][q]+w[p][1]*b[1][q]+w[p][2]*b[2][q]+w[p][3]*b[3][q];

}

}

voidshow(){

for(inti=0;i<4;i++){

for(intj=0;j<4;j++)

cout<

cout<

}

}

~CMatrix(){

delete[m]a;}

};

voidmain(){

intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

cout<<"原始方阵:

"<

for(inti=0;i<4;i++){

for(intj=0;j<4;j++)

cout<

cout<

}

cout<<"变换后的方阵:

"<

CMatrixtest(arr,4);

test.Transform();

test.show();

}

运转结果

4.基础题17

题目:

17.定义一个类SIN,求sin(x)=x/1-x3/3!

+x5/5!

-x7/7!

+....+(-1)n+1x(2n-1)/(2n-1)!

体要求以下:

(1)私有成员数据。

intx:

输入公式中intn:

输入公式中

x的值,求n的值。

sin(x)。

(2)公有成员函数。

SIN(intx,intn):

结构函数,用于初始化x和n

intpower(intq):

求q!

的值。

lintmi(intm,intn):

求mn的值。

lintfun():

用于求SIN(X)的值。

lvoidshow():

输出求得的结果。

的值。

(3)在主程序中定义对象test,对该类进行测试源程序代码:

#include

classSIN{

 

private:

intx;intn;

public:

SIN(intx,intn){

this->x=x;

this->n=n;

}

intpower(intq){

ints=1;

if(q<=1)return1;

while(q>1){

s=s*q;

q--;

}

returns;

}

intmi(intm,intn){

inttemp=1;

for(inti=1;i<=n;i++)

{

temp*=m;

}

returntemp;

}

intfun(){

intresult=0;

for(inti=0;i<=n;i++){

result+=mi(-1,i)*mi(x,2*i+1)/power(2*i+1);

}

returnresult;

}

voidshow(){

cout<<"sin("<

"<

};

voidmain(){

intx,n;

cout<<"输入一个整数x"<

cin>>x;

cout<<"输入一个整数n"<

cin>>n;

SINtest(x,n);

test.show();

}

运转结果:

5.提升题9

题目:

设计一个程序经过虚函数求长方形的面积和长方体的表面积,详细要求以下:

 

(1)定义长方形类Rectangle

保护的数据成员

intl,w;//表示长方形的长和宽

ints;//表示长方形的面积

公有的结构函数

Rectangle(intx,inty):

初始化长方形的长和宽;

公有的虚函数

virtualvoidfun():

求长方形的面积;

virtualvoidshow():

输出长方形的长、宽和面积。

(2)定义长方形类A的公有派生类Cuboid,表示长方体类

私有的数据成员

inth;//表示长方体的高

公有的结构函数:

Cuboid(intx,inty,intz):

初始化长方体的长、宽和高。

公有函数

voidfun():

求长方体的表面积;

voidshow():

输出长方体的长、宽、高和表面积。

(3)在主函数中对定义的类进行测试,要求定义长方形对象

长方体对象b1(长、宽、高分别为2,3,4),经过基类的指针

a1(长为2,宽为

p分别求长方形

3),

的面积和长方体的表面积,输出数据成员,并表现运转的多态性。

源程序代码:

#include

classRectangle{

protected:

intl,w;

ints;

public:

Rectangle(intx,inty){

l=x;

w=y;

}

virtualvoidfun(){

s=l*w;

}

virtualvoidshow(){

cout<<"长方形的长为:

 

"<

 

宽为:

 

"<

 

面积为:

 

"<

}

};

classCuboid:

publicRectangle{

inth;

public:

Cuboid(intx,inty,intz):

Rectangle(x,y){

h=z;

}

voidfun(){

s=2*(w*l+w*h+h*l);

 

}

voidshow(){

cout<<"长方体的长为:

"<

"<

"<

"<

}

};

voidmain(){

Rectangle*p;

Rectanglea1(2,3);

p=&a1;

p->fun();

p->show();

Cuboidb1(2,3,4);

p=&b1;

p->fun();

p->show();

}

运转结果:

6.提升题10题目:

设计一个程序,查问2000年1月1日(礼拜六)后的某天是礼拜几,详细要求以下:

(1)定义函数intleap(intyear):

判断某年year能否为润年。

可以被400整除,或

者可以被4整除但不可以衩100整除的年份是润年。

(2)定义函数intf(inty,intm,intd,int*m1,int*m2):

判断输入的日期能否合法,

此中y、m、d分别表示年、月、日,m1表示非润年每个月的天数,m2表示润

年每个月的天数。

(3)定义类

date,表示日期

私有数据成员

intyear,month,day;//分别表示某年某月某日

公有成员函数:

date(inty,intm,intd):

结构函数,用形参分别初始化数据成员;

intget_year():

接见私有成员

intget_month():

接见私有成员

year;

month;

intget_day():

接见私有成员day;

voidshow():

以指定格式输出数据成员。

(4)定义类week,判断某天是礼拜几私有数据成员

dated1;//日期类的对象,表示某日

intm1[12];//

储存非润年每个月的天数

31,28,31,30,31,30,31,31,30,31,30,31

intm2[12];//

储存润年每个月的天数

31,29,31,30,31,30,31,31,30,31,30,31

intw;//

表示用

0

表示礼拜天,

1表示礼拜一,以此类推

6表示礼拜六

公有成员函数

week(inty,intm,intd,int*p1,int*p2)

结构函数,用

y,m,d

初始化日期,用

p1,p2分别初始化m1,m2;

intdays():

计算d1距2000年1

 

月1

 

日的时间间隔(天数);

 

voidfun():

依据days()的计算结果判断d1是礼拜几(求以0~6表示w的值);

voidprint():

输出判断结果。

(5)在主函数中对定义的类进行测试。

从键盘输入一个日期,并检查输入数据的

合法性,而后用输入的数据和表示每个月天数的数组初始化week类的对象w,

调用有关成员函数,输出判断结果。

程序运转结果以下:

请输入要查问的日期(年代日):

2009915

2009/9/15,是礼拜二。

源程序代码:

#include

intleap(intyear){

if(year%400==0||year%100!

=0&&year%4==0)return1;

elsereturn0;

}

intf(inty,intm,intd,int*m1,int*m2){

if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)return0;

elseif((m==4||m==6||m==9||m==11)&&d>30)return0;

elsereturn1;

while(leap(y))

if(m==2&&(d==28||d>=30))return0;

elsereturn1;

while(!

(leap(y)))

if(m==2&&(d==29||d>=30))return0;

elsereturn1;

}

classdate{

intyear,month,day;

public:

date(inty,intm,intd){

year=y;

month=m;

day=d;

}

intget_year(){returnyear;}

intget_month(){returnmonth;}

intget_day(){returnday;}

voidshow(){

cout<

}

};

classweek{

dated1;

intm1[12];

intm2[12];

intw;

 

public:

week(inty,intm,intd,int*p1,int*p2):

d1(y,m,d){

for(inti=0;i<12;i++)

m1[i]=p1[i];

for(intj=0;j<12;j++)

m2[i]=p2[i];

w=0;

}

intdays(){

inti,j,result=0;

for(j=2000;j

result+=(leap(j)+365);

for(i=1;i

if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)result+=31;

elseif(i==4||i==6||i==9||i==11)result+=30;

elseif(i==2)result+=(28+leap(j));

}

result=result+d1.get_day()-1;

returnresult;

}

voidfun(){

switch(days()%7){

case0:

w=6;break;

case1:

w=0;break;

case2:

w=1;break;

case3:

w=2;break;

case4:

w=3;break;

case5:

w=4;break;

case6:

w=5;break;

}

}

voidprint(){

switch(w){

case6:

cout<<"

是礼拜六。

";break;

case0:

cout<<"

是礼拜天。

";break;

case1:

cout<<"

是礼拜一。

";break;

case2:

cout<<"

是礼拜二。

";break;

case3:

cout<<"

是礼拜三。

";break;

case4:

cout<<"

是礼拜四。

";break;

case5:

cout<<"

是礼拜五。

";break;

}

}

};

voidmain(){

intm1[12]={31,28,31,30,31,30,31,31,30,31,30,31};

intm2[12]={31,29,31,30,31,30,31,31,30,31,30,31};

 

cout<<"请输入要查问的日期(年代日):

";

inta,b,c;

cin>>a>>b>>c;

cout<

f(a,b,c,m1,m2);

weekw(a,b,c,m1,m2);

dateM(a,b,c);

M.show();

w.fun();

w.print();

}

运转结果:

三.实践小结

1.经过选择不一样种类,不一样难度层次的题目,有效地复习了一学期以来C++的学习内容。

2.实践过程中经过个人思虑及小组合作,对细节之处和难点进行了有效的剖析,极大地提升了学习效率。

3.经过对题目的剖析和理解,我发现自己在字符串办理,指针等方面基础较好,而在虚函数,友元函数等较琐碎的知识掌握得不太透辟,这是寒假时期我在准备等级考试所要留意的地方。

4.此次的课程实践在必定程度上是为马上到来的计算机二级考试打下优秀的基础。

5.在最后一次的成就展现上,我发现自己的程序缺少创新,追求适用性,却忽视了其潜伏价值。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1