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

上传人:b****2 文档编号:2538435 上传时间:2023-05-03 格式:DOCX 页数:14 大小:20.04KB
下载 相关 举报
C++程序设计实践报告.docx_第1页
第1页 / 共14页
C++程序设计实践报告.docx_第2页
第2页 / 共14页
C++程序设计实践报告.docx_第3页
第3页 / 共14页
C++程序设计实践报告.docx_第4页
第4页 / 共14页
C++程序设计实践报告.docx_第5页
第5页 / 共14页
C++程序设计实践报告.docx_第6页
第6页 / 共14页
C++程序设计实践报告.docx_第7页
第7页 / 共14页
C++程序设计实践报告.docx_第8页
第8页 / 共14页
C++程序设计实践报告.docx_第9页
第9页 / 共14页
C++程序设计实践报告.docx_第10页
第10页 / 共14页
C++程序设计实践报告.docx_第11页
第11页 / 共14页
C++程序设计实践报告.docx_第12页
第12页 / 共14页
C++程序设计实践报告.docx_第13页
第13页 / 共14页
C++程序设计实践报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

C++程序设计实践报告

课程实践报告

 

设计题目:

程序设计(VC++)实践设计时间2013-1-至2013-1-

学院(系):

计算机科学与工程学院

2013年1月

一.实践任务

选择题目,创新性题目可只选择1题,仅选提高题应不少于3题,仅选基础题应不少于

6题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师审定)。

对于提高题、创新题及游戏题可组成团队开发,但应制定详细的项目分工说明。

 

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

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

基础题12

题目:

建立一个STRING,将一个字符串交叉插入到另一个字符串中(假定两字符串不

等长)。

例如将字符串“abcde”交叉插入字符串“ABCDEF”G

“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<<"原字符串:

"<

";

STRINGtest(s1,s2);();

();

}

运行结果:

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

2.基础题4

题目:

建立一个类MOV,E将数组中最大元素的值与最小元素的值互换。

具体要求如下:

(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

}

voidexchange(){

intb[10];

for(intk=0;k

for(inti=0;i

for(intj=i+1;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<

}

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

};

voidmain(){

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

cout<<"原数组:

"<

cout<

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

"<

MOVEa1(a,10);

();

();

}

运行结果:

3.基础题16

题目:

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

方阵的变换形式为:

F=W*f

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

1

0

0

1

0

1

1

0

0

1

1

0

1

0

0

1

具体要求如下:

(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

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<

}

}

~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(intj=0;j<4;j++)cout<

cout<

}

cout<<"变换后的方阵:

"<

();

();

}

运行结果

 

4.基础题17

题目:

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

+x/5!

-x/7!

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

具体要求如下:

(1)私有成员数据。

intx:

输入公式中x的值,求sin(x)。

intn:

输入公式中n的值。

(2)公有成员函数。

SIN(intx,intn):

构造函数,用于初始化x和n的值。

intpower(intq):

求q!

的值。

lintmi(intm,intn):

求m的值。

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"<>x;

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

cin>>n;

SINtest(x,n);

();

}

运行结果:

5.提高题9

题目:

设计一个程序通过虚函数求长方形的面积和长方体的表面积,具体要求如下:

(1)定义长方形类Rectangle

保护的数据成员intl,w;高题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():

访问私有成员year;intget_month():

访问私有成员month;intget_day():

访问私有成员day;voidshow():

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

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

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

intm1[12];//存储非润年每月的天数31,28,31,30,31,30,31,31,30,31,30,31intm2[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,调用相关成员函数,输出判断结果。

程序运行结果如下:

请输入要查询的日期(年月日):

20099152009/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<();j++)

result+=(leap(j)+365);for(i=1;i<();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+()-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<<"

case0:

cout<<"

是星期六。

是星期天。

";break;

";break;

case1:

cout<<"

case2:

cout<<"

是星期一。

是星期二。

";break;

";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<

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

dateM(a,b,c);();

();

();

}

运行结果:

 

三.实践小结

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

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

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

4.这次的课程实践在一定程度上是为即将到来的计算机二级考试打下良好的基础。

5.在最后一次的成果展示上,我发现自己的程序缺乏创新,追求实用性,却忽略了其潜在价值。

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2