1实验06数组、指针与字符串(4学时)(第6章数组、指针与字符串)一、实验目的(1)学习使用数组数据对象。(2)学习字符串数据的组织和处理。(3)学习标准C++库的使用。(4)掌握指针的使用方法。(5)练习通过调试功能观察指针的内容及其所指的对象的内容。(6)练习通过动态内存分配实现动态数组,并体会指针在其中的作用。(7)分别使用字符数组和标准C++库练习处理字符串的方法。二、实验任务6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。6_3编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。6_4使用string类声明字符串对象,重新实现上一小题。6_5(习题6-27)声明一个Employee类。其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee类型的对象。6_7修改实验4中的people(人员)类。具有的属性如下:姓名charname[11]、编号charnumber[7]、性别charsex[3]、生日birthday、身份证号charid[16]。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中声明people类的对象数组,录入数据并显示。2三、实验步骤1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。程序名:lab6_1.cpp。参考运行结果:★程序及运行结果://lab6_1.cpp#includeiostreamusingnamespacestd;voidmove(intmatrix[][3]){inttemp;for(inti=0;i3;i++)for(intj=0;ji;j++){temp=matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=temp;}}voidmain(){inti,j,mat[3][3];cout输入3×3矩阵endl;for(i=0;i3;i++){cout第i+1行:;for(j=0;j3;j++)cinmat[i][j];}cout\n输入的3×3矩阵为:endl;3for(i=0;i3;i++){for(j=0;j3;j++)coutmat[i][j];coutendl;}move(mat);cout转置后的矩阵为:endl;for(i=0;i3;i++){for(j=0;j3;j++)cout*(*(mat+i)+j);//指针形式coutendl;}}2.(编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过调试功能观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。注:可使用一维动态数组,或二维动态数组。★程序及运行结果:(1)使用一维动态数组表示方阵。//lab6_2.cpp#includeiostream#includeiomanipusingnamespacestd;voidmove(int*matrix,intn){//矩阵为整型指针,对应一维数组inttemp;for(inti=0;in;i++)for(intj=0;ji;j++){temp=matrix[i*n+j];matrix[i*n+j]=matrix[j*n+i];matrix[j*n+i]=temp;4}}voidmain(){inti,j,n,*mat;cout输入方阵的阶数:;cinn;mat=newint[n*n];cout输入n×n矩阵endl;for(i=0;in;i++){cout第i+1行:;for(j=0;jn;j++)cinmat[i*n+j];//数组形式}cout\n输入的矩阵为:endl;for(i=0;in;i++){for(j=0;jn;j++)coutsetw(4)mat[i*n+j];coutendl;}move(mat,n);cout转置后的矩阵为:endl;for(i=0;in;i++){for(j=0;jn;j++)coutsetw(4)*(mat+i*n+j);//指针形式coutendl;}delete[]mat;}5(2)使用二维动态数组表示方阵。(参考实验提示)//lab6_2.cpp#includeiostream#includeiomanipusingnamespacestd;voidmove(int**matrix,intn){//矩阵为指向整型指针的指针,对应二维数组inttemp;for(inti=0;in;i++)for(intj=0;ji;j++){temp=matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=temp;}}voidmain(){inti,j,n,**mat;cout输入方阵的阶数:;cinn;mat=newint*[n];for(i=0;in;i++)mat[i]=newint[n];cout输入n×n矩阵endl;for(i=0;in;i++){cout第i+1行:;for(j=0;jn;j++)cinmat[i][j];//数组形式}cout\n输入的矩阵为:endl;for(i=0;in;i++){for(j=0;jn;j++)coutsetw(4)mat[i][j];coutendl;}move(mat,n);cout转置后的矩阵为:endl;for(i=0;in;i++){for(j=0;jn;j++)coutsetw(4)*(*(mat+i)+j);//指针形式coutendl;}delete[]mat;}63.(编程)实现两字符串的连接。声明字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。//字符串的结束标志'\0'参考运行结果:★程序及运行结果://lab6_3.cpp#includeiostreamusingnamespacestd;voidstrLL(char*a,char*b,char*c);voidmain(){inti;chara[10],b[10],c[20];cout输入一个字符串a:;cina;cout显示内存中的字符串a:;for(i=0;i10;i++){if(a[i])couta[i];//a[i]不为0else{cout\'\\0\';//转义7break;}}coutendl;cout\n输入另一个字符串b:;cinb;cout显示内存中的字符串b:;coutb\'\\0\'endl;strLL(a,b,c);cout\n显示内存中的连接字符串c:;for(i=0;i20;i++){if(c[i])coutc[i];else{cout\'\\0\';break;}}coutendl;}voidstrLL(char*a,char*b,char*c){inti,j;for(i=0;a[i];i++)c[i]=a[i];//循环直到a[i]为0for(j=0;b[j];i++,j++)c[i]=b[j];c[i]=0;}4.(编程)使用string类声明字符串对象,实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。★程序及运行结果://lab6_4.cpp#includestring//使用C++中的string#includeiostreamusingnamespacestd;voidmain(){8strings1,s2;cout输入字符串s1:;cins1;cout输入字符串s2:;cins2;s1+=s2;couts1+s2=s1endl;}5.(编程,习题6-27)声明Employee类并应用。在employee.h文件中声明Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符数组来表示。成员函数:构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*name);display()使用cout显示姓名、街道地址、城市和邮编等属性;change_name()改变类中表示姓名属性的字符数组类型的数据成员。在主程序中声明这个类的对象并对其进行操作。程序名:lab6_5.cpp。参考运行结果:★程序及运行结果://lab6_5employee.h#includecstring//使用C中的string#includeiostreamusingnamespacestd;classEmployee{private:charname[10],street[20],city[10],mail[7];//姓名、街道、城市、邮编public:Employee(char*n,char*s,char*c,char*m);9voiddisplay();voidchange_name(char*n);};Employee::Employee(char*n,char*s,char*c,char*m){strcpy(name,n);strcpy(street,s);strcpy(city,c);strcpy(mail,m);}voidEmployee::display(){cout姓名:nameendl;cout街道:streetendl;cout城市:cityendl;cout邮编:mailendl;}voidEmployee::change_name(char*n){strcpy(name,n);}//lab6_5.cpp#includelab6_5employee.hvoidmain(){Employeeemp(张山,海甸三西路13号,海口市,570228);emp.display();emp.change_name(李世);coutendl;emp.display();}6.(编程,习题6-27)使用上一小题中的Employee类声明对象数组emp[5]。使用循环语句把数据显示出来。程序名:lab6_6.cpp。参考运行结果:10★程序及运行结果://lab6_6.cpp#includelab6_5employee.h#includeiostreamusingnamespacestd;voidmain(){Employeeemp[5]={Employee(n1,s1,c1,m1),Employee(n2,s2,c2,m2),Employee(n3,s3,c3,m3),Employee(n4,s4,c4,m4),Employee