实验报告模板C++实验报告.docx
- 文档编号:11219029
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:22
- 大小:18.38KB
实验报告模板C++实验报告.docx
《实验报告模板C++实验报告.docx》由会员分享,可在线阅读,更多相关《实验报告模板C++实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
实验报告模板C++实验报告
【实验报告模板】C++实验报告
c++实验报告
实验1-1过程化编程
【实验目的】
理解、掌握过程化编程程序设计思想。
【实验内容】
1.程序填空,练习类、对象、继承的定义和实现方法。
2.根据程序运行结果,补充完整程序。
【实验要求】
我们在进行英语阅读的时候,会发现一个有趣的现象:
有些字串是左右对称的,如madam。
我们把这种字串称为symmetrytext即“对称文”。
现在有若干航字串,每一行可以由数字、标点符号、空格符以及英文字符(包括大小写)组成。
要你帮忙编程判断是否是对称文,否则,就不能最大限度地发现有趣现象了。
输入说明
每个字串为一行,每行结束以回车符为标志,可能有上百上千行业说不定。
当字串为“000000”时,输入结束。
英文字符不区分大小写,即madam亦为对称文。
不要忘了“{}”也是互为对称的。
输出说明
如果是对称文,则输出“Symmetry”,否则输出“notsymmetry”。
每个结论占一行。
图1symmetry.in
图2symmetry.out
【程序代码】#include
#include
usingnamespacestd;
boolismatch(strings);
intmain(){
}
boolismatch(strings){
{
}elseif((s[i]>='a'&&s[i](s[len-i-1]>='a'&&s[len-i-1]-'a'))){returnfalse;
}if(s[i]!
=(s[len-i-1]+('a'
-'a'))){returnfalse;
intlen=s.length();
for(inti=0;
ii++){if((s[i]>='a'&&s[i](s[len-i-1]>='a'&&s[len-i-1]while
(1){}return0;
cin>>
s;
if(pare(“000000”)==0){}if(ismatch(s)){}else{}cout”notsymmetry”
endl;
cout”Symmetry”
endl;
break;
'z')){
}}}}
elseif(((s[i]=='{'&&s[len-i-1]=='}'))){}elseif(((s[i]==''))){}elseif(((s[i]=='['&&s[len-i-1]==']'))){}elseif(((s[i]=='('&&s[len-i-1]==')'))){}else{}if(s[i]!
=s[len-i-1]){}returnfalse;
continue;
continue;
continue;
continue;
returntrue;
【运行结果】
图3实验一运行结果
实验1-2面向对象编程技术
(1)
【实验目的】
理解面向对象的的程序设计思想。
【实验内容】
定义一个时间类Time,能提供和设置由时、分、秒组成的时间,并编出应用程序,要求包括定义时间对象,设置时间,输出该对象提供的时间。
并请将类定义作为界面,用多文件结构实现之。
【程序代码】//Time.h
#include
classTime{
public:
};
//Time.cpp
#include”Time.h”
#include
voidTime:
:
inputT()
{
begin:
inta,b,c;
std:
:
cout”inputtime(H:
m:
S)\n”;
std:
:
cin>>
a>>
b>>
c;
if(c>
60||c0){}elsestd:
:
cout”wrongtime!
Pleasesetagain!
\n”;
gotobegin;
inth;
intm;
ints;
voidinputT();
voidchangeT();
voidoutputT();
}
{}if(b>
60||b0){}else{}if(a>
24||a0){}elseif(a==24){}else{}h=a;
m=b;
s=c;
if(b!
=0||c!
=0){}else{}h=a;
m=b;
s=c;
std:
:
cout”wrongtime!
Pleasesetagain!
\n”;
gotobegin;
s
td:
:
cout”wrongtime!
Pleasesetagain!
\n”;
gotobegin;
std:
:
cout”wrongtime!
Pleasesetagain!
\n”
;
gotobegin;
voidTime:
:
changeT(){
charp;
std:
:
cout”doyouwannachangetime?
(Y/n):
\n”;
std:
:
cin>>
p;
if(p=='n'
||p=='n'){}std:
:
cout”Thankyouforyourusing!
\n”
;
下页c++实验报告
{begin1:
inta,b,c;
std:
:
cout”inputtime(H:
m:
S)\n”;
std:
:
cin>>
a>>
b>>
c;
if(c>
60||c0){}else{}if(b>
60||b0){}else{}if(a>
24||a0){}elseif(a==24){}else{}h=a;
m=b;
s=c;
if(b!
=0||c!
=0){}else{}h=a;
m=b;
s=c;
std:
:
cout”wrongtime!
Pleasesetagain!
\n”;
gotobegin1;
std:
:
cout”wrongtime!
Pleasesetagain!
\n”
;
gotobegin1;
std:
:
cout”wrongtime!
Pleasesetagain!
\n”;
gotobegin1;
std:
:
cout”wrongtime!
Pleasesetagain!
\n”;
gotobegin1;
}
voidTime:
:
outputT()
//testmain.cpp
#include
“Time.h”
#include
voidmain(void)
{
}Timetime1;
time1.inputT();
time1.outputT();
time1.changeT();
time1.outputT();
{}std:
:
cout”outputtime(H:
m:
S)\n”
h”:
”
m”:
”
s;
【运行结果】
图4实验二运行结果
实验3面向对象程序设计
(2)
【实验要求】
改写程序f0815.cpp,使之含有构造函数,拷贝构造函数和析构函数。
并对主函数和矩阵向量的乘法也进行改写。
对于第91和92行,合并成“multiply(ve,ma).display();”使之不会产生内存泄漏。
【实验程序】
//实验三
//改写f0815.cpp
#include
#include
#include
usingnamespacestd;
classVector
{
};
Vector:
:
Vector(ints)
{
}
Vector:
:
Vector(constVector&
s)
{
}inti;
sz=s.sz;
v=newint[sz];
for(i=0;
ii++){}v[i]=s.v[i];
sz=s;
if(scerr”badVectorsize.\n”;
exit
(1);
intsize(){returnsz;
}Vector(int);
Vector(constVector&
s);
int&
operator[](int);
voiddisplay();
~Vector();
int*v;//指向一个数组,表示向量intsz;
public:
Vector:
:
~Vector()
{
}
int&
Vector:
:
operator[](inti)//引用返回的目的是返回值可以做左值{
}
voidVector:
:
display()
{
}
classmatrix
{
};
matrix:
:
matrix(inti,intj)
{
}
matrix:
:
matrix(constmatrix&
s)
{
inti,j;
szl=s.szl;
szl=i;
szr=j;
if(icerr”badmatrixsize.\n”;
exit
(1);
int*m;
intszl,szr;
matrix(int,int);
matrix(constmatrix&
m);
~matrix();
intsizeL(){returnszl;
}intsizeR(){returnszr;
}int&
elem(int,int);
inti;
for(i=0;
i++i)coutv[i]”
“;
cout”\n”;
if(i=sz){}returnv[i];
cerr”Vectorindexoutofrang.\n”;
exit
(1);
delete[]v;
public:
}szr=s.szr;
m=newint[szl*szr];
for(i=0;
ii++){}for(j=0;
jj++){}m[i*szr+j]=s.m[i*szr+j];
matrix:
:
~matrix()
{
}
int&
matrix:
:
elem(inti,intj)//引用返回值的目的是可以做左值{
}
Vectormultiply(matrix&
m,Vector&
v)
{//矩阵乘向量
}
voidmain()
{inti,j;
matrixme(m);
Vectorva(v);
if(m.sizeR()!
=v.size()){}Vectorr(m.sizeL());//创建一个存放结果的空向量for(i=0;
ii++){}returnr;
r[i]=0;
for(j=0;
jj++){}r[i]+=me.elem(i,j)*va[j];
cerr”badmultiplymatrixwithvector.\n”;
exit
(1);
if(icerr”matrixindexoutofrange.\n”;
exit
(1);
delete[]m;
上页下页c++实验报告
}inti,j;
ifstreamin(“in.txt”);
//文件名intx,y;
in>>
x>>
y;
matrixma(x,y);
for(i=0;
i++i)for(j=0;
j++j)in>>
ma.elem(i,j);
in>>
x;
Vectorve(x);
for(i=0;
i++i){}matrixme(ma);
Vectorva(ve);
multiply(ma,ve).display();
in>>
ve[i];
【实验结果】
图5实验三运行结果
实验4面向对象程序设计(3)
【实验要求】
请在程序f0904.cpp中的日期类的基础上,实现一个可以进行加天数操作获得另一个日期,以及进行日期减日期操作获得相隔天数的日期类,并进行应用程序设计:
创建20XX.8.21和20XX.8.8两个日期,并计算中间相隔的天数,前者加上300天会是什么日子呢?
【实验程序】一、头文件部分
#pragmaonce
//classdatewithyear-month-dayversion
#include
#include
usingnamespacestd;
classdate{
};
二、函数定义intyear,month,day;
date(intn=1){}intymd2i()const;
voidi2ymd(intn);
staticconstinttians[];
date(conststring&
s);
date(inty,intm,intd):
year(y),month(m),day(d){}dateoperator+(intn)const{}date&
operator+=(intn){}date&
operator++(){}intoperator-(date&
d)const{}boolisLeapYear()const{}friendostream&
operatoro,constdate&
d);
return!
(year%4)&&
(year%100)||!
(year%400);
returnymd2i()-d.ymd2i();
return*this+=1;
i2ymd(ymd2i()+n);
return*this;
returndate(ymd2i()+n);
i2ymd(n);
public:
//date.cpp
//classdatewithyear-month-dayVersion
#include”date.h”
#include
#include
#include
usingnamespacestd;
constintdate:
:
tians[]={0,31,59,90,120,151,181,212,243,273,304,334};
constintY400=146097;//numberofdaysof400years
constintY100=36524;//numberofdaysof100years
constintY4=1461;//numberofdaysof4years
date:
:
date(conststring&
s){
()}
voiddate:
:
i2ymd(intabsday){
}
intdate:
:
ymd2i()const{
intyearday=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;
returnyearday+tians[month-1]+(isLeapYear()&&
month>
2)+day;
year=absday/Y400*400;
inty=absday%Y400;//被400年除得的天数if(y==Y400-1){}year+=y/Y100*100;
y%=Y100;
year+=y/Y4*4;
y%=Y4;
if(y==Y4-1){}year+=y/365;
y%=365;
if(y==0){}year++;
boolleap=isLeapYear();
for(month=1;
monthy>tians[month]+(month>=2&&
leap);
month++);
day=y-tians[month-1];
month=12,day=31;
return;
month=12,day=30;
return;
month=12,day=30;
return;
year=atoi(s.substr(0,4).c_str());
month=atoi(s.substr(5,2).c_str());
day=atoi(s.substr(8,2).c_str());
}
ostream&
operatoro,constdate&
d){
returnosetfill('0')setw(4)d.year'-'
setw
(2)d.month'-'
}
三、testmain
//testmain.cpp
//usingdateclass
#include”date.h”
#include
usingnamespacestd;
intmain(){
dated1(20XX,8,21);
dated2(20XX,8,8);
cout”20XX.8.21与20XX.8,8中间相隔的天数是:
”d2-d1”\n”;
coutd1+300”\n”;
}setw
(2)d.daysetfill('
');
【程序结果】
实验5面向对象程序设计(4)
【实验要求】
在上题date类的基础上,继承一个wdate类,它包含了星期几信息,因而,显示日期的成员要做修改,应同时显示星期几。
另外,还要增加获得星期几的成员。
想一想,类中数据成员置年、月、日好呢,还是绝对天数好呢?
进而进行应用程序设计:
创建20XX.8.21和20XX.8.8两个日期,分别显示这两个日期。
【实验程序】
一、头文件date.h
#pragmaonce
//date.h
//classdatewithyear-month-dayversion
#include
#include
usingnamespacestd;
classdate{
};
intyear,month,day;
staticconstinttians[];
date(intn=1){}intymd2i()const;
voidi2ymd(intn);
date(conststring&
s);
date(inty,intm,intd):
year(y),month(m),day(d){}dateoperator+(intn)const{}date&
operator+=(intn){}date&
operator++(){}intoperator-(date&
d)const{}boolisLeapYear()const{}friendostream&
operatoro,constdate&
d);
return!
(year%4)&&
(year%100)||!
(year%400);
returnymd2i()-d.ymd2i();
return*this+=1;
i2ymd(ymd2i()+n);
return*this;
returndate(ymd2i()+n);
i2ymd(n);
protected:
public:
上页下页余下全文c++实验报告
二、头文件wdate.h
#pragmaonce
//wdate.h
#include”date.h”
#include
#include
usingnamespacestd;
classwdate:
publicdate{
protected:
wdateoperator+(intn)const{returndate:
:
operator+(n);
}wdate&
operator+=(intn){date:
:
operator+=(n);
return*this;
}wdate&
operator++(){return*this+=1;}intgetweekday(){returnymd2i()%7;
}//0:
Sunday,1:
monday,etc..intoperator-(wdate&
wd)const{returnymd2i()-wd.ymd2i();
}friendostream&
operatoro,constwdate&
wd);
};
wdate(intn=1):
date(n){}wdate(constdate&
d):
date(d){}wdate(conststring&
s):
date(s){}wdate(inty,intm,intd):
date(y,m,d){}public:
三、date.cpp
//date.cpp
//classdatewithyear-month-dayVersion
#include”date.h”
#include
#include
#include
usingnamespacestd;
constintdate:
:
tians[]={0,31,59,90,120,151,181,212,243,273,304,334};
constintY400=146097;//numberofdaysof400years
constintY100=36524;//numberofdaysof100years
constintY4=1461;//numberofdaysof4years
date:
:
date(conststring&
s){
}
voiddate:
:
i2ymd(intabsday){
year=absday/Y400*400;
inty=absday%Y400;//被400年除得的天数if(y==Y400-1){month=12,day=30;
year=atoi(s.substr(0,4).c_str());
month=atoi(s.substr(5,2).c_str());
day=atoi(s.substr(8,2).c_str());
}}return;
year+=y/Y100*100;
y%=Y100;
year+=y/Y4*4;
y%=Y4;
if(y==Y4-1){}year+=y/365;
y%=365;
if(y==0){}year++;
boolleap=isLeapYear();
for(month=1;
monthy>tians[month]+(month>=2&&
leap);
month++);
day=y-tians[month-1];
month=12,day=31;
return;
month=12,day=30;
return;
intdate:
:
ymd2i()const{
}
ostream&
operatoro,constdate&
d){
returnosetfill('0')setw(4)d.year'-'
setw
(2)d.month'-'
}
setw
(2)d.daysetfill('
');
intyearday=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;
returnyearday+tians[month-1]+(isLeapYear()&&
month>
2)+day;
四、wdate.cpp
//wdate.cpp
//classwdatewithyear-month-dayVersion
#include”wdate.h”
#include
usingnamespacestd;
ostream&
operatoro,constwdate&
wd){
switch(wd.ymd2i()%7){case0:
returno”Sun.”
date(wd);
case1:
returno”mon.”
date(wd);
case2:
returno”Tue.”
date(wd);
case3:
returno”wed.”
date(wd);
case4:
returno”Thr.”
date(wd);
case5:
returno”Fri.”
date(wd);
case6:
returno”Sat.”
date(wd);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 模板 C+