版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验报告课程名称:面向对象程序设计年级:14级实验日期:2()23年4月25日姓名:郑焕科学号:班级:计算机科学与技术(专升本)实验名称:VC++6.0开发环境与C++简朴程序设计一、实验目的及规定目的规定:(1)学习使用数组(2)学习字符串数据的组织和解决(3)掌握指针的使用方法(4)通过Debug观测指针的内容及其所指的对象内容(5)练习通过动态内存分派实现动态数组,并体会指针在其中的作用(6)分别使用字符数组和标准C++库练习解决字符串的方法实验内容:(1)编写并测试3X3矩阵的转置函数,使用数组保存3义3矩阵(2)使用动态内存分派生成动态数组重新完毕上题,使用指针实现函数的功能(3)编程实现两字符串的连接。规定使用字符数组,不使用系统函数(4)定义一个Employee类,其中涉及姓名、街道、城市和邮编等属性,以及change_name。和disp1ay等函数。Disp1ay()显示姓名、街道地址、城市和邮编等属性,changejame。改变对象的姓名属性。(5)定义包含5个元素的对象数组,每个元素都是Employee类型的对象。strcpy(Postcode,postcode);voidchange_name(char*name){3strcpy(Name,name);)voiddisplay(){geont«"name:''<<Name<<endl;,cout«”address:M«Address«endl;®cout«"city:H«City<<endl;cout«"postcode:"«Postcode«endl;cout<<end1<<end1;};intmain()(〃创建一个类one^Employeeone(MZheng-Huankeu,“HNND”JZhengZhou”,450000");one.display();//显示ne.changc_name("Zhcng_Huanke");one.display();〃更改姓名后显示〃创建一个对象指针e,并给它动态分派内存,创建一个类对象。Employee*e=newEmployee。'Liuyang","HNND”JZhengZhoiTJ450000”);e->display();e->change_name("HeSongcai");e->disp1ay();deletee;return0;)程序5:建立一个Empolyee类,包含5个元素的对象数组,并测试#include<iostream>usingnamespacestd;classEmp1oyee(private:charName[20];dcharAddress[40];®charCity[20];6charPostcode[10];pub1ic:®Employee(){}//无参构造函数
®Emp1oyee(char*name,char*address,char*city,char*postcode)〃构造函数(strcpy(Name,name);strcpy(Address,address);strcpy(City,city);strcpy(Postcode,postcode);)0Voidset(char*name,char*address,char*city,char*postcode)。strcpy(Name,name)•strcpy(Address,address);strcpy(City,city);strepy(Postcode,postcode);voidchange_name(char*name){»®strcpy(Name,name);)voiddisplay()dcout<<nameH<<Name«endl;cout«”address:"<<Address«endl;3cout<<Hcity:11«City«end1;scout«**postcode:"<<Postcode«end1;cout<<end1<<endl;)};intmain()(//创建对象数组,Employeeem[51;em[()].set("Zheng-HuankeM,“Henau”JZhengZhou”J450000”);em[l].setCZhang-SanVPekiniJing”J100010");oem[2].set(HLi-Si“JTsinghua”,HBeiJing”,"10010");®em[3].set(MWang-Wun,"HenauV'ZhengZhouM,H450000");。em[4].set(nYang-Liu''「'Henan","ZhengZhoiTJ450000K);for(inti=0;i<5;i++)//依次显示出来em[i].disp1ay();)return0;}三、重要标记符说明:程序1:3*3矩阵的转置函数(用数组实现,数组作为调用函数的参数相称于指针。)voidtrans(intarr[SIZE][SIZE])voidinput(intarr[SIZE][SIZE])voiddisp1ay(intarr[SIZE][SIZE])程序2:3*3矩阵的转置函数(使用动态内存分派生成动态数组。并使用指针。)voidtrans(int**p,int**q,introw,intco1)voidinput(introw,intcol)voiddisplay(int**q,introw,intcol)二维数组的动态分派及释放:int**arr;//arr为一个二维数组arr=newint*[row];//动态分派一个int类型的指针数组(由指针构成的数组,arr是指向这些指针的一个指针),也是指针的指针,相称于一维,即可理解为arr[row][]deletedarr[i];〃释放内存delete[]arr;程序3:实现两个字符串的链接(动态申请内存)char*str1;strl=newchar[n];//6zhengfor(i=0;str1[i]!=,\0,;i++)str_con[ij=strl[i];//)str_con[i+j+l]=,\0,;〃将字符串的结束位改成'\(T连接后的字符串的末尾de1etestrl;程序4:建立一个Empolyee类,并测试(两种实例方法)classEmployee{private:public:Emp1oyee(char*name,char*address,char*city,char*postcode)"构造函数voidchange_name(char*name)voiddisplay());Enip1oyee*e=newEmployee("Liuyang”JHNNDZhengZhoun,“450000”);e->display();deletee;程序5和程序4类似,不再过多累述,创建对象数组的方式如下:Employeeem[5];四、实验结果:程序1:3*3矩阵的转置函数程序2:3*3矩阵的转置函数((使用动态内存分派生成动态数组。并使用指针。)Pleaseinputalength<largerthanthefirststring*slengththatyouwillinput)6Please>:7PleasezhengPleasehuankeinputinputinputalength<largerthanthefirststring:thesecondstring:thesecondstring*slengththatyouwillinput程序Pleaseinputalength<largerthanthefirststring*slengththatyouwillinput)6Please>:7PleasezhengPleasehuankeinputinputinputalength<largerthanthefirststring:thesecondstring:thesecondstring*slengththatyouwillinput"D:\VC++6.0\MyPrqjects\C-r-rexperiment3\string_connection\Debug\string_connection.e...L^_L®zhenghuankethestringafterconnectionis:Pressanykeytocontinue.zhenghuanke程序4:建立一个Empolyee类,并测试(两种实例方法)■'D:\VC++6.0\MYPROJECTS\C++EXP...[三!回nameZheng—HuankesHNNDcityZhengZhoupostcode450000nameZhcng_Huanke<tddi*essHNNDcityZhengZhoupostcode450000nameLiuyangaddressHNNDcityZhengZhoupostcode450000nameHeSongcaiadd,,essHNNDcttyZhcn9Zhoupostcode450000Pi*essanyke.ftocontinueLZnr►程序5:建立一个Empo1yee类,包含5个元素的对象数组,并测试(两种实例方法)
F•D:\VC++6.0\MyProjects\C...I回name-ZHencj—HuainReHenau▲city-Zhenc^ZHou三postzcode*450000—nameZhang-San二Pekingcitsr:BeiJincfpostzcode:100010namezLi-Siaddi'esszTs:Lrtghuacit*/BeiJ£ngpostcode-10010namezWang—3u.ad<li*ess二HenaucityZHencfZ>iolipostcode*450000name2Yang-LdLuictd.d,i*ess2Henaucxty2ZHengZhoupostzcode*450000P**essanykesf€0con€inue14\Hl五、实验环境:Win7VC++6.O0六、总结五项实验结果均成功调试出来,并达成了预期的实验目的和实验结果。在本次实验中用到了动态内存分派实现动态数组。这就用到了老师上课讲的关于堆栈的知识:堆是由程序员申请、释放、管理的内存空间(不能由操作系统和程序自动分派和释放),他存放的是所有非常量的指针,他是动态的。另一方面,程序员可以申请的堆的大小仅受内存和虚拟内存的限制,理论上可以申请的空间很大。而栈、静态区、常量区以及代码区都是程序运营时自动申请的空间,他们由程序和操作系统控制,且他们所占用的大小是固定不变的。此外需要注意,new和delete是成对出现的,在动态分派,使用完后,需要释放指针所指的内存,不然也许会照成存储区满的结果。delete并不是要删除指针,而是释放指针所指的内存此外实验4和实验5初步的展示了类的定义和使用,以及对象数组的使用,并且在构造函数中,数组变量的赋值不能用“二",而是需要用strcpy(〜〜,〜〜);实验4中用到了对象指针的知识,创建了一个*e的对象指针,让指针e指向一个动态分派的空间,这个空间用于存放一个Employee对象。用“e—>成员函数”来调用响应的成员函数。由于是动态分派的,务必要在使用后释放指针e。具体如下:Employee*e=newEmp1oyee(nLiuyang"JHNND"JZhengZho450000*,);//动态分派空间并进行对象初始化。e->display();//e->change_name("HeSongcai");e->display();deletee;二、源程序清单:程序1:3*3矩阵的转置函数(用数组实现,数组作为调用函数的参数相称于指针。)#include<iostream>usingnamespacestd;#defineSIZE3//宏定义矩阵为3行3列voidtrans(intarr[SIZE][SIZE])(inttemp;ofor(inti=0;i<SIZE;i++)for(intj=i+l;j<SIZE;j++)〃只置换右上三角°{odc»temp=arr[i][j];//*(p+i)指向以p为首地址的第i行,*(第i行首地址+1)指向第1行,第,[列garr[i][j]=arr[j][i];〃第i行第j列二第j行第i列o,arr(j][i]=temp;)voidinput(intarr[SIZE][SIZE]){®cout«nPleaseinputvaluesofthematrix:"<<endl;intt;ofor(inti=O;i<SIZE;i++)4or(intj=0;j<SIZE;j++),(®cin»t;«>arr[i][j]=t;,)®cout«endl;)voiddisplay(intarr[SIZE][SIZE])(cout«"thematrixaftertranspositionis:**«end1;for(inti=0;i<SIZE;i++)for(intj=O;j<SIZE;j++),cout«arr[i][j]«ngcoutvvendl;//内层循环,打完一行后,回车)voidmain()(〃建立一个3*3的数组。intarr[SIZE][SIZE];//arr为一个二维数组〃对二维数组的值输入,转置,输出解决®input(arr);trans(arr);disp1ay(arr);)程序2:3*3矩阵的转置函数(使用动态内存分派生成动态数组。并使用指针。)#include<iostream>usingnamespacestd;voidtrans(int**p,int**q,introw,intcol)//对于row=col成立。(for(inti=0;i<row;i++)for(intj=0;jVcol;j++)〃只置换右上三角。*(*(q+j)+i)=*(*(P+i)+j);//*(p+i)指向以p为首地址的第i行,*(第i行首地址+j)指向第i行,第j列)voidinput(int**p,introw,intco1){®intt;cout«MPIeaseinputamatrixofH«row<<Hrowand**<<col«"co1:M<<endl;。for(inti=0;i<row;i++)3for(intj=0;j<co1;j++)(®cin»t;go*(*(p+i)+j)=t;coutVVendl;)voiddisplay(intintrow,intcol)(out<<naftertransposition:H«endl;®for(inti=0;i<col;i++)for(intj=0;j<row;j++)®cout<<*(*(q+i)+j)«”";»®cout<<endl;〃内层循环,打完一行后,回车)}voidmain()introw=0,co1=0,i;dcout«Mpleaseinputrowsandcolumnsofthematrix:**<<end1;cin»row>>col;//动态分派一个row行col列的二维数组int**arr;//arr为一个二维数组arr=newint*[row];//动态分派一个int类型的指针数组(由指针构成的数组,arr是指向这些指针的一个指针),也是指针的指针,相称于一维,即可理解为arr[row][]for(i=0;i<row;i++)^arr[i]=newint[col];//为arr[row]分别分派列指针,指向二维,相称于arr[i][col];(arr[i]等价于*arr+i))〃〃动态分派一个c。1行row列的二维数组,用于存放转换后的数据“nt**arr_1;//arr_1为一个新的二维数组,全局指针变量arr_1=newint*[col];〃本来的列数变为现在的行数for(i=0;i<col;i++)叶darr_1[i]=ncwint[row];//本来的行数变为列数)〃对二维数组的值输入,转置,输出解决。input(arr,row,co1);otrans(arr,arr_l,row,col);®display(arr_l,row,col);〃释放内存for(i=0;i<row;i++)oodelete[]arr[i];de1ete[]arr;for(i=0;i<col;i++)delete[]arr_l[i];delete[]arr_1;)程序3:实现两个字符串的链接(动态申请内存)#include<iostream>usingnamespacestd;intmain()(intm,n;〃让用户输入一个长度值,用来做动态分派的大小(要比字符串长度大)acout«**P1easeinputalcngth(largerthanthefirststring'slengththatyouwillinput):M«endl;dcin»n;®cout«nP1easeinputa1ength(largerthanthesecondstring'slengththatyouwillinput):,,«endl;cin»m;char*str1;®strl=newchar[n];//6zhengchar*str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版设备采购合同:某医院医疗设备采购与安装协议2篇
- 蔬菜供销合同范本经典版
- 房地产购房买卖协议3篇
- 二零二四年度钢筋工程材料检测与试验合同2篇
- 化工设计:第4章 化工工艺计算
- 二零二四年度地铁隧道消防应急照明系统合同3篇
- 农田灌溉用水效益评估合作协议
- 长沙市商品房买卖合同
- 员工职业发展现状调查
- 建筑安全文化宣传
- 水轮发电机组水轮机的回装检修工艺规程
- 楼盖结构分类及布置
- 风险控制流程图
- 商业发票模板(INVOICE)
- 英语希望之星决赛看图说话小作文.ppt
- 设计开发部诚信因素识别评价表和目标指标方案
- 膝关节韧带损伤PPT课件
- 《校园心理剧》PPT课件.ppt
- 六年级上册精通英语单词句子默写表
- 8以内加减法口算练习题
- 大连市水资源利用的现状和对策
评论
0/150
提交评论