C++程序设计实践报告Word下载.docx
- 文档编号:19779395
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:13
- 大小:20.02KB
C++程序设计实践报告Word下载.docx
《C++程序设计实践报告Word下载.docx》由会员分享,可在线阅读,更多相关《C++程序设计实践报告Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
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<
<
str3<
endl;
};
voidmain(){
chars1[60]="
ABCDEFG"
;
chars2[40]="
abcde"
cout<
"
原字符串:
"
s1<
s2<
交叉插入后的字符串:
STRINGtest(s1,s2);
();
运行结果:
2-6为选做题,其中2,3,4为基础题;
5,6为提高题。
2.基础题4
建立一个类MOVE将数组中最大元素的值与最小元素的值互换。
(1)私有数据成员
int*array:
一维整型数组。
intn:
数组中元素的个数。
(2)公有成员函数
MOVE(intb[],intm):
构造函数,初始化成员数据。
voidexchange():
输出平均值,并将数组中的元素按要求重新放置。
输出一维数组。
~MOVE():
析构函数。
(3)在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。
源程序代码:
classMOVE{
int*array;
intn;
MOVE(intb[],intm){
n=m;
array=newint[m];
i<
n;
i++)
array[i]=b[i];
voidexchange(){
intb[10];
for(intk=0;
k<
k++)
b[k]=array[k];
i++)for(intj=i+1;
j<
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<
p++){if(array[p]==max)array[p]=min;
elseif(array[p]==min)array[p]=max;
array[i]<
'
\t'
~MOVE(){delete[n]array;
inta[10]={21,65,43,87,12,84,44,97,32,55};
原数组:
10;
a[i]<
交换最大值和最小值后的数组:
MOVEa1(a,10);
}运行结果:
3.基础题16
定义一个方阵类CMatrix,并根据给定算法实现方阵的线性变换。
方阵的变换形式为:
F=W*fTf为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为
1001
0110
int(*a)[4]:
a指向方阵数组。
intw[4][4]:
w为变换矩阵。
intm:
m表示方阵的行和列数。
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,完成对该类的测试。
classCMatrix{
int(*a)[4];
intw[4][4];
intm;
CMatrix(inta[][4],intm){
this->
m=m;
a=newint[this->
m][4];
m;
for(intj=0;
j++)this->
a[i][j]=a[i][j];
for(i=0;
4;
i++){
for(intj=0;
j++)if(i+j==3||i==j)w[i][j]=1;
elsew[i][j]=0;
voidTransform(){
intb[4][4];
j++)
b[i][j]=a[j][i];
p++){
for(intq=0;
q<
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(){
i++){for(intj=0;
j++)cout<
a[i][j]<
~CMatrix(){
delete[m]a;
intarr[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
原始方阵:
arr[i][j]<
变换后的方阵:
CMatrixtest(arr,4);
运行结果
4.基础题17
17.定义一个类SIN,求sin(x)=x/1-X3/3!
+X5/5!
-X7/7!
+....+(-1)n+1x(2n-i)/(2n
-1)!
具
体要求如下:
(1)私有成员数据。
intx:
输入公式中x的值,求sin(x)。
输入公式中n的值。
(2)公有成员函数。
SIN(intx,intn):
构造函数,用于初始化x和n的值。
intpower(intq):
求q!
的值。
lintmi(intm,intn):
求mn的值。
lintfun():
用于求SIN(X)的值。
lvoidshow():
输出求得的结果。
(3)在主程序中定义对象test,对该类进行测试
源程序代码:
classSIN{
private:
intx;
intn;
SIN(intx,intn){
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;
=n;
{
temp*=m;
returntemp;
intfun(){
intresult=0;
i++){result+=mi(-1,i)*mi(x,2*i+1)/power(2*i+1);
returnresult;
sin("
x<
)的结果为:
fun()<
}};
intx,n;
输入一个整数x"
cin>
x;
输入一个整数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、md分别表示年、月、日,ml表示非润年每月的天数,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,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)&
30)return0;
elsereturn1;
while(leap(y))
if(m==2&
(d==28||d>
=30))return0;
while(!
(leap(y)))
(d==29||d>
classdate{
intyear,month,day;
date(inty,intm,intd){
year=y;
month=m;
day=d;
intget_year(){returnyear;
intget_month(){returnmonth;
intget_day(){returnday;
year<
/"
month<
day<
"
classweek{
week(inty,intm,intd,int*p1,int*p2):
d1(y,m,d){
12;
m1[i]=p1[i];
m2[i]=p2[i];
w=0;
intdays(){
inti,j,result=0;
for(j=2000;
result+=(leap(j)+365);
for(i=1;
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;
voidfun(){
switch(days()%7){
case0:
w=6;
break;
case1:
case2:
w=1;
case3:
w=2;
case4:
w=3;
case5:
w=4;
case6:
w=5;
switch(w){
是星期六。
是星期天。
是星期一。
是星期二。
是星期三。
是星期四。
”;
是星期五。
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};
请输入要查询的日期(年月日):
inta,b,c;
>
a»
b»
c;
endl;
f(a,b,c,m1,m2);
weekw(a,b,c,m1,m2);
dateM(a,b,c);
三.实践小结
1.通过选择不同类型,不同难度层次的题目,有效地复习了一学期以来C++的学习内容。
2.实践过程中通过个人思考及小组合作,对细节之处和难点进行了有效的分析,极大地提高了学习效率。
3.通过对题目的分析和理解,我发现自己在字符串处理,指针等方面基础较好,而在虚函数,友元函数等较琐碎的知识掌握得不太透彻,这是寒假期间我在准备等级考试所要留心的地方。
4.这次的课程实践在一定程度上是为即将到来的计算机二级考试打下良好的基础。
5.在最后一次的成果展示上,我发现自己的程序缺乏创新,追求实用性,却忽略了其潜在价值。
精心搜集整理,请按实际需求再行修改编辑,因文档各种差异排版需调整字体属性及大小
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 实践 报告