C++实验报告同名16372Word文件下载.docx
- 文档编号:19946658
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:25
- 大小:69.01KB
C++实验报告同名16372Word文件下载.docx
《C++实验报告同名16372Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++实验报告同名16372Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
"
Symmetry"
<
endl;
else{
Notsymmetry"
}
return0;
}
boolisMatch(strings){
intlen=s.length();
for(inti=0;
i<
len/2;
i++){
if((s[i]>
='
a'
&
s[i]<
z'
)&
(s[len-i-1]>
A'
s[len-i-1]<
Z'
)){
if(s[i]!
=(s[len-i-1]+('
-'
))){
returnfalse;
}
elseif((s[i]>
=(s[len-i-1]-('
elseif(((s[i]=='
{'
s[len-i-1]=='
}'
continue;
'
['
]'
('
)'
=s[len-i-1]){
returntrue;
【运行结果】
图3实验一运行结果
实验1-2面向对象编程技术〔1〕
理解面向对象的的程序设计思想。
定义一个时间类Time,能提供和设置由时、分、秒组成的时间,并编出应用程序,要求包括定义时间对象,设置时间,输出该对象提供的时间。
并请将类定义作为界面,用多文件结构实现之。
//Time.h
classTime
{
public:
inth;
intm;
ints;
voidinputT();
voidchangeT();
voidoutputT();
};
//Time.cpp
#include"
Time.h"
voidTime:
:
inputT()
begin:
inta,b,c;
std:
cout<
Inputtime(H:
M:
S)\n"
;
cin>
a>
b>
c;
if(c>
60||c<
0)
{
std:
cout<
Wrongtime!
Pleasesetagain!
\n"
gotobegin;
else
if(b>
60||b<
{
std:
;
gotobegin;
else
if(a>
24||a<
{
std:
gotobegin;
elseif(a==24)
if(b!
=0||c!
=0)
{
std:
gotobegin;
}
else
h=a;
m=b;
s=c;
else
h=a;
m=b;
s=c;
changeT()
charp;
Doyouwannachangetime?
(Y/N):
\n"
p;
if(p=='
n'
||p=='
N'
)
Thankyouforyourusing!
begin1:
inta,b,c;
if(c>
gotobegin1;
if(b>
gotobegin1;
if(a>
gotobegin1;
elseif(a==24)
if(b!
=0||c!
=0)
{
std:
gotobegin1;
}
else{
h=a;
m=b;
s=c;
outputT()
Outputtime(H:
h<
"
m<
//testmain.cpp
voidmain(void)
Timetime1;
time1.inputT();
time1.outputT();
time1.changeT();
图4实验二运行结果
实验3面向对象程序设计
(2)
改写程序f0815.cpp,使之含有构造函数,拷贝构造函数和析构函数。
并对主函数和矩阵向量的乘法也进行改写。
对于第91和92行,合并成“multiply(ve,ma).display();
〞使之不会产生内存泄漏。
【实验程序】
//实验三
//改写f0815.cpp
fstream>
string.h>
classVector
int*v;
//指向一个数组,表示向量
intsz;
intsize(){returnsz;
Vector(int);
Vector(constVector&
s);
int&
operator[](int);
voiddisplay();
~Vector();
Vector:
Vector(ints)
sz=s;
if(s<
cerr<
badVectorsize.\n"
exit
(1);
v=newint[s];
Vector(constVector&
s)
inti;
sz=s.sz;
v=newint[sz];
for(i=0;
sz;
i++)
v[i]=s.v[i];
~Vector()
delete[]v;
int&
Vector:
operator[](inti)//引用返回的目的是返回值可以做左值
if(i<
0||i>
=sz)
Vectorindexoutofrang.\n"
returnv[i];
voidVector:
display()
++i)
cout<
v[i]<
cout<
classMatrix
int*m;
intszl,szr;
Matrix(int,int);
Matrix(constMatrix&
m);
~Matrix();
intsizeL(){returnszl;
intsizeR(){returnszr;
elem(int,int);
Matrix:
Matrix(inti,intj)
szl=i;
szr=j;
if(i<
=0||j<
badMatrixsize.\n"
m=newint[i*j];
Matrix(constMatrix&
inti,j;
szl=s.szl;
szr=s.szr;
m=newint[szl*szr];
szl;
for(j=0;
j<
szr;
j++)
m[i*szr+j]=s.m[i*szr+j];
~Matrix()
delete[]m;
Matrix:
elem(inti,intj)//引用返回值的目的是可以做左值
0||szl<
=i||j<
0||szr<
=j)
Matrixindexoutofrange.\n"
returnm[i*szr+j];
Vectormultiply(Matrix&
m,Vector&
v)
{//矩阵乘向量
Matrixme(m);
Vectorva(v);
if(m.sizeR()!
=v.size())
badmultiplyMatrixwithvector.\n"
Vectorr(m.sizeL());
//创立一个存放结果的空向量
me.sizeL();
r[i]=0;
me.sizeR();
r[i]+=me.elem(i,j)*va[j];
returnr;
voidmain()
ifstreamin("
in.txt"
);
//文件名
intx,y;
in>
x>
y;
Matrixma(x,y);
x;
y;
++j)
in>
ma.elem(i,j);
x;
Vectorve(x);
in>
ve[i];
Matrixme(ma);
Vectorva(ve);
multiply(ma,ve).display();
【实验结果】
图5实验三运行结果
实验4面向对象程序设计(3)
请在程序f0904.cpp中的日期类的根底上,实现一个可以进行加天数操作获得另一个日期,以及进行日期减日期操作获得相隔天数的日期类,并进行应用程序设计:
创立2021.8.21和2021.8.8两个日期,并计算中间相隔的天数,前者加上300天会是什么日子呢?
一、头文件局部
#pragmaonce
//classDatewithyear-month-dayversion
classDate{
intyear,month,day;
Date(intn=1){
i2ymd(n);
intymd2i()const;
voidi2ymd(intn);
staticconstinttians[];
Date(conststring&
Date(inty,intm,intd):
year(y),month(m),day(d){}
Dateoperator+(intn)const{
returnDate(ymd2i()+n);
Date&
operator+=(intn){
i2ymd(ymd2i()+n);
return*this;
operator++(){
return*this+=1;
intoperator-(Date&
d)const{
returnymd2i()-d.ymd2i();
boolisLeapYear()const{
return!
(year%4)&
(year%100)||!
(year%400);
friendostream&
operator<
(ostream&
o,constDate&
d);
二、函数定义
//Date.cpp
//ClassDatewithyear-month-dayVersion
#include"
Date.h"
iomanip>
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){
year=atoi(s.substr(0,4).c_str());
month=atoi(s.substr(5,2).c_str());
day=atoi(s.substr(8,2).c_str());
voidDate:
i2ymd(intabsDay){
year=absDay/Y400*400;
inty=absDay%Y400;
//被400年除得的天数
if(y==Y400-1){
month=12,day=30;
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){
month=12,day=31;
year++;
boolleap=isLeapYear();
for(month=1;
month<
12&
y>
tians[month]+(month>
=2&
leap);
month++);
day=y-tians[month-1];
intDate:
ymd2i()const{
intyearDay=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;
returnyearDay+tians[month-1]+(isLeapYear()&
month>
2)+day;
ostream&
d){
returno<
setfill('
0'
)<
setw(4)<
d.year<
'
-'
setw
(2)<
d.month<
d.day<
三、testmain
//usingDateclass
Dated1(2005,8,21);
Dated2(2021,8,8);
cout<
与2021.8,8中间相隔的天数是:
d2-d1<
加上300天是:
d1+300<
【程序结果】
实验5面向对象程序设计(4)
在上题Date类的根底上,继承一个WDate类,它包含了星期几信息,因而,显示日期的成员要做修改,应同时显示星期几。
另外,还要增加获得星期几的成员。
想一想,类中数据成员置年、月、日好呢,还是绝对天数好呢?
进而进行应用程序设计:
创立2005.8.21和2021.8.8两个日期,分别显示这两个日期。
一、头文件Date.h
//Date.h
protected:
intymd2i()const;
s);
Date(inty,intm,intd):
year(y),month(m),day(d){}
Dateoperator+(intn)const{
Date&
i2ymd(ymd2i()+n);
return*this;
return*this+=1;
intoperator-(Date&
returnymd2i()-d.ymd2i();
boolisLeapYear()const{
return!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实验 报告 同名 16372