1、C+程序设计实践报告课程实践报告设计题目:程序设计(VC+)实践设计时间2013-1-至2013-1-学院(系):计算机科学与工程学院2013年1月一实践任务选择题目,创新性题目可只选择1题,仅选提升题应许多于3题,仅选基础题应许多于6题,也可组合选题,还可自行选择感兴趣的题目(须经指导老师鉴定)。关于提升题、创新题及游戏题可构成团队开发,但应拟订详尽的项目分工说明。二实验步骤及记录(题目,源程序代码及运转结果)1.与学号对应的题(必做题):基础题12题目:成立一个STRING,将一个字符串交错插入到另一个字符串中(假设两字符串不等长)。比如将字符串“abcde”交错插入字符串“ABCDEFG
2、”的结果为“aAbBcCdDeEFG”或“AaBbCcDdEeFG”。详细要求以下:(1)私有数据成员charstr160:寄存被插入的字符串。charstr240:寄存待插入的字符串。charstr3100:寄存插入后的字符串。(2)公有成员函数STRING(char*s1,char*s2):结构函数,用s1和s2初始化str1和str2。voidprocess():将str2中的字符串插入到str1中,寄存到str3中。voidprint():输出插入后的字符串。(3)在主程序中定义STRING类的对象test对该类进行测试。源程序代码:#include#includeclassSTRIN
3、Gcharstr160;charstr240;charstr3100;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-)str1k+1=str1k;*p1=*p2;p1=p1+2;p2+;voidprint()strcpy(str3,str1);coutstr3endl;voidmain()chars160=ABCDEFG;chars240=abcde;
4、cout原字符串:s1s2endl;cout交错插入后的字符串:;STRINGtest(s1,s2);test.process();test.print();运转结果:2-6为选做题,此中2,3,4为基础题;5,6为提升题。2.基础题4题目:成立一个类MOVE,将数组中最大元素的值与最小元素的值交换。详细要求以下:(1)私有数据成员int*array:一维整型数组。intn:数组中元素的个数。(2)公有成员函数MOVE(intb,intm):结构函数,初始化成员数据。voidexchange():输出均匀值,并将数组中的元素按要求从头搁置。voidprint():输出一维数组。MOVE():析
5、构函数。(3)在主程序顶用数据21,65,43,87,12,84,44,97,32,55对该类进行测试。源程序代码:#includeclassMOVEint*array;intn;public:MOVE(intb,intm)n=m;array=newintm;for(inti=0;in;i+)arrayi=bi;voidexchange()intb10;for(intk=0;kn;k+)bk=arrayk;for(inti=0;in;i+)for(intj=i+1;j=bi)inttemp=bi;bi=bj;bj=temp;intmax=b0,min=bn-1;for(intp=0;pn;p+
6、)if(arrayp=max)arrayp=min;elseif(arrayp=min)arrayp=max;voidprint()for(inti=0;in;i+)coutarrayit;coutendl;MOVE()deletenarray;voidmain()inta10=21,65,43,87,12,84,44,97,32,55;cout原数组:endl;for(inti=0;i10;i+)coutait;coutendl;cout交换最大值和最小值后的数组:endl;MOVEa1(a,10);a1.exchange();a1.print();运转结果:3.基础题16题目:定义一个方阵
7、类CMatrix,并依据给定算法实现方阵的线性变换。方阵的变换形式为:F=W*fTf为原始矩阵,fT为原始矩阵的转置,w为变换矩阵,这里设定为1001011001101001详细要求以下:(1)私有数据成员int(*a)4:a指向方阵数组。intw44:w为变换矩阵。intm:m表示方阵的行和列数。(2)公有成员函数CMatrix(inta4,intm):用给定的参数a和m初始化数据成员a和m;对变换矩阵w进行初始化,要求一定用循环实现。voidTransform():依据上述变换算法,求出变换后的数组形式,寄存在原始数组内。voidshow():在屏幕上显示数组元素。lCMatrix():开
8、释动向分派的空间。(3)在主程序中定义数组intarr4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16作为原始数组。定义一个CMatrix类对象test,用arr初始化test,达成对该类的测试。源程序代码:#includeclassCMatrixint(*a)4;intw44;intm;public:CMatrix(inta4,intm)this-m=m;this-a=newintthis-m4;for(inti=0;im;i+)for(intj=0;jm;j+)this-aij=aij;for(i=0;i4;i+)for(intj=0;j4;j+)if(i+
9、j=3|i=j)wij=1;elsewij=0;voidTransform()intb44;for(inti=0;im;i+)for(intj=0;jm;j+)bij=aji;for(intp=0;p4;p+)for(intq=0;q4;q+)apq=wp0*b0q+wp1*b1q+wp2*b2q+wp3*b3q;voidshow()for(inti=0;i4;i+)for(intj=0;j4;j+)coutaijt;coutendl;CMatrix()deletema;voidmain()intarr4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;cout原
10、始方阵:endl;for(inti=0;i4;i+)for(intj=0;j4;j+)coutarrijt;coutendl;cout变换后的方阵:endl;CMatrixtest(arr,4);test.Transform();test.show();运转结果4.基础题17题目:17定义一个类SIN,求sin(x)=x/1-x3/3!+x5/5!-x7/7!+.+(-1)n+1x(2n-1)/(2n-1)!具体要求以下:(1)私有成员数据。intx:输入公式中intn:输入公式中x的值,求n的值。sin(x)。(2)公有成员函数。SIN(intx,intn):结构函数,用于初始化x和nint
11、power(intq):求q!的值。lintmi(intm,intn):求mn的值。lintfun():用于求SIN(X)的值。lvoidshow():输出求得的结果。的值。(3)在主程序中定义对象test,对该类进行测试源程序代码:#includeclassSINprivate:intx;intn;public:SIN(intx,intn)this-x=x;this-n=n;intpower(intq)ints=1;if(q1)s=s*q;q-;returns;intmi(intm,intn)inttemp=1;for(inti=1;i=n;i+)temp*=m;returntemp;int
12、fun()intresult=0;for(inti=0;i=n;i+)result+=mi(-1,i)*mi(x,2*i+1)/power(2*i+1);returnresult;voidshow()coutsin(x)的结果为:fun()endl;voidmain()intx,n;cout输入一个整数xx;cout输入一个整数nn;SINtest(x,n);test.show();运转结果:5提升题9题目:设计一个程序经过虚函数求长方形的面积和长方体的表面积,详细要求以下:(1)定义长方形类Rectangle保护的数据成员intl,w;/表示长方形的长和宽ints;/表示长方形的面积公有的结
13、构函数Rectangle(intx,inty):初始化长方形的长和宽;公有的虚函数virtualvoidfun():求长方形的面积;virtualvoidshow():输出长方形的长、宽和面积。(2)定义长方形类A的公有派生类Cuboid,表示长方体类私有的数据成员inth;/表示长方体的高公有的结构函数:Cuboid(intx,inty,intz):初始化长方体的长、宽和高。公有函数voidfun():求长方体的表面积;voidshow():输出长方体的长、宽、高和表面积。(3)在主函数中对定义的类进行测试,要求定义长方形对象长方体对象b1(长、宽、高分别为2,3,4),经过基类的指针a1(
14、长为2,宽为p分别求长方形3),的面积和长方体的表面积,输出数据成员,并表现运转的多态性。源程序代码:#includeclassRectangleprotected:intl,w;ints;public:Rectangle(intx,inty)l=x;w=y;virtualvoidfun()s=l*w;virtualvoidshow()cout长方形的长为:lt宽为:wt面积为:sendl;classCuboid:publicRectangleinth;public:Cuboid(intx,inty,intz):Rectangle(x,y)h=z;voidfun()s=2*(w*l+w*h+h
15、*l);voidshow()cout长方体的长为:lt宽为:wt高为:ht表面积为:sfun();p-show();Cuboidb1(2,3,4);p=&b1;p-fun();p-show();运转结果:6.提升题10题目:设计一个程序,查问2000年1月1日(礼拜六)后的某天是礼拜几,详细要求以下:(1)定义函数intleap(intyear):判断某年year能否为润年。可以被400整除,或者可以被4整除但不可以衩100整除的年份是润年。(2)定义函数intf(inty,intm,intd,int*m1,int*m2):判断输入的日期能否合法,此中y、m、d分别表示年、月、日,m1表示非润
16、年每个月的天数,m2表示润年每个月的天数。(3)定义类date,表示日期私有数据成员intyear,month,day;/分别表示某年某月某日公有成员函数:date(inty,intm,intd):结构函数,用形参分别初始化数据成员;intget_year():接见私有成员intget_month():接见私有成员year;month;intget_day():接见私有成员day;voidshow():以指定格式输出数据成员。(4)定义类week,判断某天是礼拜几私有数据成员dated1;/日期类的对象,表示某日intm112;/储存非润年每个月的天数31,28,31,30,31,30,31,
17、31,30,31,30,31intm212;/储存润年每个月的天数31,29,31,30,31,30,31,31,30,31,30,31intw;/表示用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是礼拜几(求以06表示w的值);voidprint():输出判断结果。(5)在主函数中对定义的类进行测试。从键盘输入一个日期,
18、并检查输入数据的合法性,而后用输入的数据和表示每个月天数的数组初始化week类的对象w,调用有关成员函数,输出判断结果。程序运转结果以下:请输入要查问的日期(年代日):20099152009/9/15,是礼拜二。源程序代码:#includeintleap(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)&d31)return0;elseif(m=4|m=6|m=9|m=11)&d30)
19、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;classdateintyear,month,day;public:date(inty,intm,intd)year=y;month=m;day=d;intget_year()returnyear;intget_month()returnmonth;intget_day()returnday;voidshow()coutyear/month/day,
20、;classweekdated1;intm112;intm212;intw;public:week(inty,intm,intd,int*p1,int*p2):d1(y,m,d)for(inti=0;i12;i+)m1i=p1i;for(intj=0;j12;j+)m2i=p2i;w=0;intdays()inti,j,result=0;for(j=2000;jd1.get_year();j+)result+=(leap(j)+365);for(i=1;id1.get_month();i+)if(i=1|i=3|i=5|i=7|i=8|i=10|i=12)result+=31;elseif(i
21、=4|i=6|i=9|i=11)result+=30;elseif(i=2)result+=(28+leap(j);result=result+d1.get_day()-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是礼拜六。;break;case0:cout是礼拜天。;break
22、;case1:cout是礼拜一。;break;case2:cout是礼拜二。;break;case3:cout是礼拜三。;break;case4:cout是礼拜四。;break;case5:cout是礼拜五。;break;voidmain()intm112=31,28,31,30,31,30,31,31,30,31,30,31;intm212=31,29,31,30,31,30,31,31,30,31,30,31;coutabc;coutendl;f(a,b,c,m1,m2);weekw(a,b,c,m1,m2);dateM(a,b,c);M.show();w.fun();w.print();运转结果:三实践小结1.经过选择不一样种类,不一样难度层次的题目,有效地复习了一学期以来C+的学习内容。2.实践过程中经过个人思虑及小组合作,对细节之处和难点进行了有效的剖析,极大地提升了学习效率。3.经过对题目的剖析和理解,我发现自己在字符串办理,指针等方面基础较好,而在虚函数,友元函数等较琐碎的知识掌握得不太透辟,这是寒假时期我在准备等级考试所要留意的地方。4.此次的课程实践在必定程度上是为马上到来的计算机二级考试打下优秀的基础。5.在最后一次的成就展现上,我发现自己的程序缺少创新,追求适用性,却忽视了其潜伏价值。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1