C++语言程序设计实验问题详解数组指针与字符串.docx
- 文档编号:30100245
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:20
- 大小:124.49KB
C++语言程序设计实验问题详解数组指针与字符串.docx
《C++语言程序设计实验问题详解数组指针与字符串.docx》由会员分享,可在线阅读,更多相关《C++语言程序设计实验问题详解数组指针与字符串.docx(20页珍藏版)》请在冰豆网上搜索。
C++语言程序设计实验问题详解数组指针与字符串
实验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类的对象数组,录入数据并显示。
三、实验步骤
1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。
使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。
程序名:
lab6_1.cpp。
参考运行结果:
★程序及运行结果:
//lab6_1.cpp
#include
usingnamespacestd;
voidmove(intmatrix[][3]){
inttemp;
for(inti=0;i<3;i++)
for(intj=0;j
temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
voidmain(){
inti,j,mat[3][3];
cout<<"输入3×3矩阵"< for(i=0;i<3;i++){ cout<<"第"< "; for(j=0;j<3;j++)cin>>mat[i][j]; } cout<<"\n输入的3×3矩阵为: "< for(i=0;i<3;i++){ for(j=0;j<3;j++) cout< cout< } move(mat); cout<<"转置后的矩阵为: "< for(i=0;i<3;i++){ for(j=0;j<3;j++) cout<<*(*(mat+i)+j)<<"";//指针形式 cout< } } 2.(编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。 使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。 通过调试功能观察指针的内容及其所指的对象中的内容。 程序名: lab6_2.cpp。 注: 可使用一维动态数组,或二维动态数组。 ★程序及运行结果: (1)使用一维动态数组表示方阵。 //lab6_2.cpp #include #include usingnamespacestd; voidmove(int*matrix,intn){//矩阵为整型指针,对应一维数组 inttemp; for(inti=0;i for(intj=0;j temp=matrix[i*n+j]; matrix[i*n+j]=matrix[j*n+i]; matrix[j*n+i]=temp; } } voidmain(){ inti,j,n,*mat; cout<<"输入方阵的阶数: "; cin>>n; mat=newint[n*n]; cout<<"输入"< for(i=0;i cout<<"第"< "; for(j=0;j } cout<<"\n输入的矩阵为: "< for(i=0;i for(j=0;j cout< cout< } move(mat,n); cout<<"转置后的矩阵为: "< for(i=0;i for(j=0;j cout< cout< } delete[]mat; } (2)使用二维动态数组表示方阵。 (参考实验提示) //lab6_2.cpp #include #include usingnamespacestd; voidmove(int**matrix,intn){//矩阵为指向整型指针的指针,对应二维数组 inttemp; for(inti=0;i for(intj=0;j temp=matrix[i][j]; matrix[i][j]=matrix[j][i]; matrix[j][i]=temp; } } voidmain(){ inti,j,n,**mat; cout<<"输入方阵的阶数: "; cin>>n; mat=newint*[n]; for(i=0;i cout<<"输入"< for(i=0;i cout<<"第"< "; for(j=0;j } cout<<"\n输入的矩阵为: "< for(i=0;i for(j=0;j cout< cout< } move(mat,n); cout<<"转置后的矩阵为: "< for(i=0;i for(j=0;j cout< cout< } delete[]mat; } 3.(编程)实现两字符串的连接。 声明字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。 程序名: lab6_3.cpp。 用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 //字符串的结束标志'\0' 参考运行结果: ★程序及运行结果: //lab6_3.cpp #include usingnamespacestd; voidstrLL(char*a,char*b,char*c); voidmain(){ inti; chara[10],b[10],c[20]; cout<<"输入一个字符串a: ";cin>>a; cout<<"显示内存中的字符串a: "; for(i=0;i<10;i++){ if(a[i])cout< else{ cout<<"\'\\0\'";//转义 break; } } cout< cout<<"\n输入另一个字符串b: ";cin>>b; cout<<"显示内存中的字符串b: "; cout< strLL(a,b,c); cout<<"\n显示内存中的连接字符串c: "; for(i=0;i<20;i++){ if(c[i])cout< else{cout<<"\'\\0\'";break;} } cout< } voidstrLL(char*a,char*b,char*c){ inti,j; for(i=0;a[i];i++)c[i]=a[i];//循环直到a[i]为0 for(j=0;b[j];i++,j++)c[i]=b[j]; c[i]=0; } 4.(编程)使用string类声明字符串对象,实现两字符串的连接。 在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。 程序名: lab6_4.cpp。 ★程序及运行结果: //lab6_4.cpp #include #include usingnamespacestd; voidmain(){ strings1,s2; cout<<"输入字符串s1: "; cin>>s1; cout<<"输入字符串s2: "; cin>>s2; s1+=s2; cout<<"s1+s2="< } 5.(编程,习题6-27)声明Employee类并应用。 在employee.h文件中声明Employee类。 Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符数组来表示。 成员函数: 构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*name); display()使用cout显示姓名、街道地址、城市和邮编等属性; change_name()改变类中表示姓名属性的字符数组类型的数据成员。 在主程序中声明这个类的对象并对其进行操作。 程序名: lab6_5.cpp。 参考运行结果: ★程序及运行结果: //lab6_5employee.h #include #include usingnamespacestd; classEmployee{ private: charname[10],street[20],city[10],mail[7];//姓名、街道、城市、邮编 public: Employee(char*n,char*s,char*c,char*m); voiddisplay(); 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<<"姓名: "< cout<<"街道: "< cout<<"城市: "< cout<<"邮编: "< } voidEmployee: : change_name(char*n){strcpy(name,n);} //lab6_5.cpp #include"lab6_5employee.h" voidmain(){ Employeeemp("张山","海甸三西路13号","海口市","570228"); emp.display(); emp.change_name("李世"); cout< emp.display(); } 6.(编程,习题6-27)使用上一小题中的Employee类声明对象数组emp[5]。 使用循环语句把数据显示出来。 程序名: lab6_6.cpp。 参考运行结果: ★程序及运行结果: //lab6_6.cpp #include"lab6_5employee.h" #include usingnamespacestd; voidmain(){ Employeeemp[5]={Employee("n1","s1","c1","m1"), Employee("n2","s2","c2","m2"), Employee("n3","s3","c3","m3"), Employee("n4","s4","c4","m4"), Employee("n5","s5","c5","m5")}; for(inti=0;i<5;i++){ emp[i].display(); cout< } } 7.(编程)修改实验4中的people(人员)类。 程序名: lab6_7.cpp。 参考运行结果: ★程序及运行结果: (1)lab6_7.h: People(人员)类的声明及成员函数的实现 //lab6_7.h #include #include usingnamespacestd; classDate{ private: intyy,mm,dd; public: Date(){} Date(Date&d): yy(d.yy),mm(d.mm),dd(d.dd){}//增添 ~Date(){} intGetyy()const{returnyy;} intGetmm()const{returnmm;} intGetdd()const{returndd;} voidSetyy(inty){yy=y;} voidSetmm(intm){mm=m;} voidSetdd(intd){dd=d;} }; classPeople{ private: charname[11];//姓名,增添 charnumber[7];//编号,改为数组 charsex[3];//男或女,改为数组 Datebirthday;//出生日期 charid[16];//身份证号,改为数组 public: People(){} People(People&p); ~People(){} voidGetname(charna[]){strcpy(na,name);} voidGetnumber(charnu[]){strcpy(nu,number);} voidGetsex(charse[]){strcpy(se,sex);} intGetbirthyy()const{returnbirthday.Getyy();} intGetbirthmm()const{returnbirthday.Getmm();} intGetbirthdd()const{returnbirthday.Getdd();} voidGetid(chard[]){strcpy(d,id);} voidSetname(charna[]){strcpy(name,na);} voidSetnumber(charnu[]){strcpy(number,nu);} voidSetsex(charse[]){strcpy(sex,se);} voidSetbirthyy(inty){birthday.Setyy(y);} voidSetbirthmm(intm){birthday.Setmm(m);} voidSetbirthdd(intd){birthday.Setdd(d);} voidSetid(chard[]){strcpy(id,d);} voidinput(); voidoutput(); }; People: : People(People&p) : birthday(p.birthday) { strcpy(name,p.name); strcpy(number,p.number); strcpy(sex,p.sex); strcpy(id,p.id); } inlinevoidPeople: : input() { cout<<"姓名: ";cin>>name; cout<<"编号: ";cin>>number; cout<<"性别(男/女): ";cin>>sex; cout<<"出生日期(年月日): "; inty,m,d;cin>>y>>m>>d; Setbirthyy(y);Setbirthmm(m);Setbirthdd(d); cout<<"身份证号: ";cin>>id; } inlinevoidPeople: : output() { cout<<"姓名: "< "< cout<<"性别: "< cout<<"出生日期: "< < cout<<"身份证号: "< } (2)lab6_7.cpp: 主函数(输入、输出和拷贝构造函数测试) //lab6_7.cpp #include"lab6_7.h" voidmain(){ Peoplep; p.input(); cout< p.output(); Peoplepp(p); cout< pp.output(); } (3)结果 四、实验提示 步骤2提示 二维数组动态分配空间 示例1m×n矩阵 #include usingnamespacestd; voidmain(){ inti,j,m,n,**A; cout<<"输入矩阵的行数m和列数n: "; cin>>m>>n; A=newint*[m];//m行 for(i=0;i cout<<"输入"< for(i=0;i cout<<"第"< "; for(j=0;j } cout<<"\n输入的矩阵为: "< for(i=0;i for(j=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 语言程序设计 实验 问题 详解 数组 指针 字符串