您好,欢迎访问三七文档
实验1-1过程化编程【实验目的】理解、掌握过程化编程程序设计思想。【实验内容】1.程序填空,练习类、对象、继承的定义和实现方法。2.根据程序运行结果,补充完整程序。【实验要求】我们在进行英语阅读的时候,会发现一个有趣的现象:有些字串是左右对称的,如madam。我们把这种字串称为symmetrytext即“对称文”。现在有若干航字串,每一行可以由数字、标点符号、空格符以及英文字符(包括大小写)组成。要你帮忙编程判断是否是对称文,否则,就不能最大限度地发现有趣现象了。输入说明每个字串为一行,每行结束以回车符为标志,可能有上百上千行业说不定。当字串为“000000”时,输入结束。英文字符不区分大小写,即Madam亦为对称文。不要忘了“{([”与“])}”也是互为对称的。输出说明如果是对称文,则输出“Symmetry”,否则输出“Notsymmetry”。每个结论占一行。图1symmetry.in图2symmetry.out【程序代码】#includeiostream#includestringusingnamespacestd;boolisMatch(strings);intmain(){strings;while(1){cins;if(s.compare(000000)==0){break;}if(isMatch(s)){coutSymmetryendl;}else{coutNotsymmetryendl;}}return0;}boolisMatch(strings){intlen=s.length();for(inti=0;ilen/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]+('a'-'A'))){returnfalse;}}elseif((s[i]='A'&&s[i]='Z')&&(s[len-i-1]='a'&&s[len-i-1]='z')){if(s[i]!=(s[len-i-1]-('a'-'A'))){returnfalse;}}elseif(((s[i]=='{'&&s[len-i-1]=='}'))){continue;}elseif(((s[i]==''&&s[len-i-1]==''))){continue;}elseif(((s[i]=='['&&s[len-i-1]==']'))){continue;}elseif(((s[i]=='('&&s[len-i-1]==')'))){continue;}else{if(s[i]!=s[len-i-1]){returnfalse;}}}returntrue;}【运行结果】图3实验一运行结果实验1-2面向对象编程技术(1)【实验目的】理解面向对象的的程序设计思想。【实验内容】定义一个时间类Time,能提供和设置由时、分、秒组成的时间,并编出应用程序,要求包括定义时间对象,设置时间,输出该对象提供的时间。并请将类定义作为界面,用多文件结构实现之。【程序代码】//Time.h#includeiostreamclassTime{public:inth;intm;ints;voidinputT();voidchangeT();voidoutputT();};//Time.cpp#includeTime.h#includeiostreamvoidTime::inputT(){begin:inta,b,c;std::coutInputtime(H:M:S)\n;std::cinabc;if(c60||c0){std::coutWrongtime!Pleasesetagain!\n;gotobegin;}else{if(b60||b0){std::coutWrongtime!Pleasesetagain!\n;gotobegin;}else{if(a24||a0){std::coutWrongtime!Pleasesetagain!\n;gotobegin;}elseif(a==24){if(b!=0||c!=0){std::coutWrongtime!Pleasesetagain!\n;gotobegin;}else{h=a;m=b;s=c;}}else{h=a;m=b;s=c;}}}}voidTime::changeT(){charp;std::coutDoyouwannachangetime?(Y/N):\n;std::cinp;if(p=='n'||p=='N'){std::coutThankyouforyourusing!\n;}else{begin1:inta,b,c;std::coutInputtime(H:M:S)\n;std::cinabc;if(c60||c0){std::coutWrongtime!Pleasesetagain!\n;gotobegin1;}else{if(b60||b0){std::coutWrongtime!Pleasesetagain!\n;gotobegin1;}else{if(a24||a0){std::coutWrongtime!Pleasesetagain!\n;gotobegin1;}elseif(a==24){if(b!=0||c!=0){std::coutWrongtime!Pleasesetagain!\n;gotobegin1;}else{h=a;m=b;s=c;}}else{h=a;m=b;s=c;}}}}}voidTime::outputT(){std::coutOutputtime(H:M:S)\nh:m:s;}//testmain.cpp#includeTime.h#includeiostreamvoidmain(void){Timetime1;time1.inputT();time1.outputT();time1.changeT();time1.outputT();}【运行结果】图4实验二运行结果实验3面向对象程序设计(2)【实验要求】改写程序f0815.cpp,使之含有构造函数,拷贝构造函数和析构函数。并对主函数和矩阵向量的乘法也进行改写。对于第91和92行,合并成“multiply(ve,ma).display();”使之不会产生内存泄漏。【实验程序】//实验三//改写f0815.cpp#includeiostream#includefstream#includestring.husingnamespacestd;classVector{int*v;//指向一个数组,表示向量intsz;public:intsize(){returnsz;}Vector(int);Vector(constVector&s);int&operator[](int);voiddisplay();~Vector();};Vector::Vector(ints){sz=s;if(s=0){cerrbadVectorsize.\n;exit(1);}v=newint[s];}Vector::Vector(constVector&s){inti;sz=s.sz;v=newint[sz];for(i=0;isz;i++){v[i]=s.v[i];}}Vector::~Vector(){delete[]v;}int&Vector::operator[](inti)//引用返回的目的是返回值可以做左值{if(i0||i=sz){cerrVectorindexoutofrang.\n;exit(1);}returnv[i];}voidVector::display(){inti;for(i=0;isz;++i)coutv[i];cout\n;}classMatrix{int*m;intszl,szr;public:Matrix(int,int);Matrix(constMatrix&m);~Matrix();intsizeL(){returnszl;}intsizeR(){returnszr;}int&elem(int,int);};Matrix::Matrix(inti,intj){szl=i;szr=j;if(i=0||j=0){cerrbadMatrixsize.\n;exit(1);}m=newint[i*j];}Matrix::Matrix(constMatrix&s){inti,j;szl=s.szl;szr=s.szr;m=newint[szl*szr];for(i=0;iszl;i++){for(j=0;jszr;j++){m[i*szr+j]=s.m[i*szr+j];}}}Matrix::~Matrix(){delete[]m;}int&Matrix::elem(inti,intj)//引用返回值的目的是可以做左值{if(i0||szl=i||j0||szr=j){cerrMatrixindexoutofrange.\n;exit(1);}returnm[i*szr+j];}Vectormultiply(Matrix&m,Vector&v){//矩阵乘向量inti,j;Matrixme(m);Vectorva(v);if(m.sizeR()!=v.size()){cerrbadmultiplyMatrixwithvector.\n;exit(1);}Vectorr(m.sizeL());//创建一个存放结果的空向量for(i=0;ime.sizeL();i++){r[i]=0;for(j=0;jme.sizeR();j++){r[i]+=me.elem(i,j)*va[j];}}returnr;}voidmain(){inti,j;ifstreamin(in.txt);//文件名intx,y;inxy;Matrixma(x,y);for(i=0;ix;++i)for(j=0;jy;++j)inma.elem(i,j);inx;Vectorve(x);for(i=0;ix;++i){inve[i];}Matrixme(ma);Vectorva(ve);multiply(ma,ve).display();}【实验结果】图5实验三运行结果实验4面向对象程序设计(3)【实验要求】请在程序f0904.cpp中的日期类的基础上,实现一个可以进行加天数操作获得另一个日期,以及进行日期减日期操作获得相隔天数的日期类,并进行应用程序设计:创建2015.8.21和2008.8.8两个日期,并计算中间相隔的天数,前者加上300天会是什么日子呢?【实验程序】一、头文件部分#pragmaonce//classDatewithyear-month-dayversion#includeiostream#includestringusingnamespacestd;classDate{intyear,month,day;Date(intn=1){i2ymd(n);}intymd2i()const;voidi2ymd(intn);staticconstinttians[];public:Date(conststring&s);Date(inty,intm,intd):year(y),month(m),day(d){}Dateoperator+(intn)const{returnDate(ymd2i()+n);}Date&operator+=(intn){i2ymd(ymd2i()+n);return*this;}Date&operator++(){return*this+=1;}intoperator-(Date
本文标题:C++实验报告
链接地址:https://www.777doc.com/doc-7028805 .html