C++语言程序设计实验答案-数组、指针与字符串.docx

上传人:大张伟 文档编号:6125757 上传时间:2020-09-11 格式:DOCX 页数:33 大小:340.18KB
返回 下载 相关 举报
C++语言程序设计实验答案-数组、指针与字符串.docx_第1页
第1页 / 共33页
C++语言程序设计实验答案-数组、指针与字符串.docx_第2页
第2页 / 共33页
C++语言程序设计实验答案-数组、指针与字符串.docx_第3页
第3页 / 共33页
C++语言程序设计实验答案-数组、指针与字符串.docx_第4页
第4页 / 共33页
C++语言程序设计实验答案-数组、指针与字符串.docx_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《C++语言程序设计实验答案-数组、指针与字符串.docx》由会员分享,可在线阅读,更多相关《C++语言程序设计实验答案-数组、指针与字符串.docx(33页珍藏版)》请在三一文库上搜索。

1、C+语言程序设计实验答案 - 数组、指针与字符串实验 06 数组、指针与字符串(4 学时)(第 6 章 数组、指针与字符串)一、实验目的(1) 学习使用数组数据对象。(2) 学习字符串数据的组织和处理。(3) 学习标准 C+ 库的使用。(4) 掌握指针的使用方法。(5) 练习通过调试功能观察指针的内容及其所指的对象的内容。(6) 练习通过动态内存分配实现动态数组,并体会指针在其中的作用。(7) 分别使用字符数组和标准 C+ 库练习处理字符串的方法。2二、实验任务6_1(习题 6-25)编写并测试 33 矩阵转置函数,使用数组保存33 矩阵。6_2(习题 6-26)使用动态内存分配生成动态数组来

2、重新完成上题(n 阶方阵),使用指针实现函数的功能。6_3 编程实现两字符串的连接。 要求使用字符数组保存字符串,不要使用系统函数。6_4 使用 string 类声明字符串对象,重新实现上一小题。6_5(习题 6-27)声明一个 Employee 类。其中包括姓名、街道地址、城市和邮编等属性,以及 change_name()和 display() 等函数。display() 显示姓名、街道地址、城市和邮编等属性, change_name()改变对象的姓名属性,实现并测试这个类。36_6(习题 6-27)声明包含5 个元素的对象数组,每个元素都是Employee类型的对象。6_7 修改实验 4

3、中的 people(人员)类。具有的属性如下:姓名char name11、编号 char number7 、性别 char sex3、生日birthday 、身份证号 char id16 。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中声明people 类的对象数组 ,录入数据并显示。三、实验步骤1.(编程,习题 6-25)编写矩阵转置函数,输入参数为33 整型数组。使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,4编写 main() 函数实现输入

4、输出。程序名:lab6_1.cpp。参考运行结果: 程序及运行结果:/lab6_1.cpp#includeusingnamespacestd;void move( int matrix3)int temp;for ( int i=0;i3;i+)for ( int j=0;ji;j+)temp=matrixij;matrixij=matrixji;matrixji=temp;5void main()int i,j,mat33;cout 输入 33 矩阵 endl;for (i=0;i3;i+)cout 第 i+1 行: ;for (j=0;jmatij;coutn输入的 33 矩阵为: end

5、l;for (i=0;i3;i+)for (j=0;j3;j+)coutmatij ; coutendl;move(mat);6cout 转置后的矩阵为: endl;for (i=0;i3;i+)for (j=0;j3;j+)cout*(*(mat+i)+j) ;/指针形式coutendl;2.(编程,习题 6-26)编写 nn 阶矩阵转置函数,参数为整型指针。使用指针对数组元素进行操作,在main()函数中使用 new 操作符分配内存生成动态数组。通过调试功能观察指针的内容及其所指的对象中的内容。程序名: lab6_2.cpp。7注:可使用一维动态数组, 或二维动态数组。程序及运行结果:(1

6、) 使用一维动态数组表示方阵。/lab6_2.cpp#include#includeusingnamespacestd;voidmove( int*matrix,intn) / 矩阵为整型指针,对应一维数组int temp;for ( int i=0;in;i+)for ( int j=0;ji;j+)temp=matrixi*n+j;matrixi*n+j=matrixj*n+i;matrixj*n+i=temp;8void main()int i,j,n,*mat;coutn;mat= new int n*n;cout 输入 n n 矩阵 endl;for (i=0;in;i+)cout

7、第 i+1 行: ;for (j=0;jmati*n+j;/ 数组形式coutn输入的矩阵为: endl;for (i=0;in;i+)for (j=0;jn;j+)coutsetw(4)mati*n+j;coutendl;9move(mat,n);cout 转置后的矩阵为: endl;for (i=0;in;i+)for (j=0;jn;j+)coutsetw(4)*(mat+i*n+j);/指针形式coutendl;deletemat;10(2) 使用二维动态数组表示方阵。(参考实验提示)/lab6_2.cpp#include#includeusingnamespacestd;void m

8、ove( int *matrix,int n) / 矩阵为指向整型指针的指针,对应二维数组int temp;for ( int i=0;in;i+)for ( int j=0;ji;j+)temp=matrixij;matrixij=matrixji;matrixji=temp;void main()int i,j,n,*mat;11coutn;mat= new int *n;for (i=0;in;i+) mati=newint n;cout 输入 n n 矩阵 endl;for (i=0;in;i+)cout 第 i+1 行: ;for (j=0;jmatij;/ 数组形式coutn输入的

9、矩阵为: endl;for (i=0;in;i+)for (j=0;jn;j+)coutsetw(4)matij;coutendl;12move(mat,n);cout 转置后的矩阵为: endl;for (i=0;in;i+)for (j=0;jn;j+)coutsetw(4)*(*(mat+i)+j);/指针形式coutendl;deletemat;133.(编程)实现两字符串的连接。声明字符数组保存字符串, 在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用 cout 语句显示输出。程序名: lab6_3.cpp。用 cin 实现输入,注意,字符串的结束标志是 ASCII 码

10、0,使用循环语句进行字符串间的字符拷贝。 / 字符串的结束标志 0参考运行结果: 程序及运行结果:/lab6_3.cpp#includeusingnamespacestd;void strLL( char *a, char *b, char *c); void main()14int i;char a10,b10,c20;couta;cout 显示内存中的字符串 a: ; for (i=0;i10;i+)if (ai)coutai;/ai不为 0else cout0;/ 转义break ;coutendl;coutb;cout 显示内存中的字符串b : ;coutb0endl;15strLL(

11、a,b,c);coutn显示内存中的连接字符串c: ;for (i=0;i20;i+)if (ci)coutci;else cout0; break ; coutendl;void strLL( char *a, char *b, char *c) int i,j;for (i=0;ai;i+)ci=ai;/循环直到ai 为 0for (j=0;bj;i+,j+) ci=bj;ci=0;164.(编程)使用 string 类声明字符串对象,实现两字符串的连接。在 string 类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 程序及运行结果:/lab

12、6_4.cpp#include/ 使用 C+ 中的 string#includeusingnamespacestd;void main()string s1,s2;couts1;couts2;17s1+=s2;couts1+s2 = s1endl;5.(编程,习题 6-27)声明 Employee 类并应用。在 employee.h 文件中声明 Employee 类。Employee 类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符数组来表示。成员函数:构造函数用来初始化所有成员数组, 对字符数组的赋值可以使用字符串拷贝函数strcpy( char *, char *name) ;

13、display()使用 cout 显示姓名、街道地址、城市和邮编等属性;18change_name()改变类中表示姓名属性的字符数组类型的数据成员。在主程序中声明这个类的对象并对其进行操作。程序名: lab6_5.cpp。参考运行结果: 程序及运行结果:/lab6_5employee.h#include/ 使用 C 中的 string#includeusingnamespacestd;class Employeeprivate:charname10,street20,city10,mail7;/19姓名、街道、城市、邮编public :Employee(char *n, char *s, ch

14、ar *c, char*m);void display();void change_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);void Employee:display()cout 姓名: nameendl;cout 街道: streetendl;cout 城市: cityendl;cout 邮编: mailendl;20voidEmployee:change_name(char*n

15、) strcpy(name,n); /lab6_5.cpp#includelab6_5employee.hvoid main()Employeeemp( 张山 , 海甸三西路 13 号 , 海口市 ,570228 ); emp.display();emp.change_name( 李世 );coutendl;emp.display();216.(编程,习题 6-27)使用上一小题中的Employee 类声明对象数组emp5 。使用循环语句把数据显示出来。程序名:lab6_6.cpp。参考运行结果: 程序及运行结果:/lab6_6.cpp#includelab6_5employee.h#incl

16、udeusingnamespacestd;void main()Employee22emp5=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 ( int i=0;i5;i+)empi.display();coutendl;237.(编程)修改实验4 中的 people(人员)类。程序名: lab6_7.cpp 。参考运行结果: 程序及运行结果:(1) lab6_

17、7.h:People(人员)类的声明及成员函数的实现/lab6_7.h#include#includeusingnamespacestd;class Dateprivate:int yy,mm,dd;24public :Date() Date(Date&d):yy(d.yy),mm(d.mm),dd(d.dd)/ 增添Date() int Getyy() const return yy; int Getmm() const return mm; int Getdd()constreturndd; voidSetyy(inty) yy=y; voidSetmm(int m) mm=m; void

18、Setdd(intd) dd=d; ;class Peopleprivate:char name11;/ 姓名,增添char number7;/ 编号,改为数组char sex3;/ 男或女,改为数组25Date birthday;/ 出生日期char id16;/ 身份证号,改为数组public :People()People(People &p);People()voidGetname(charna) strcpy(na,name); voidGetnumber(charnu) strcpy(nu,number); voidGetsex( charse)strcpy(se,sex); in

19、tGetbirthyy()const returnbirthday.Getyy(); intGetbirthmm()const returnbirthday.Getmm(); intGetbirthdd()const returnbirthday.Getdd(); void Getid( char d) strcpy(d,id); 26voidSetname(charna) strcpy(name,na); voidSetnumber(charnu) strcpy(number,nu); voidSetsex( charse)strcpy(sex,se); voidSetbirthyy(int

20、y) birthday.Setyy(y); voidSetbirthmm(intm) birthday.Setmm(m); voidSetbirthdd(intd) birthday.Setdd(d); void Setid( char d) strcpy(id,d); void input();void output();People:People(People &p):birthday(p.birthday)strcpy(name,p.name);27strcpy(number,p.number);strcpy(sex,p.sex);strcpy(id,p.id);inlinevoid P

21、eople:input()coutname;coutnumber;coutsex;coutymd;Setbirthyy(y); Setbirthmm(m); Setbirthdd(d);coutid;inlinevoid People:output()28cout 姓名: namen编号: numberendl;cout 性别: sexendl;cout 出生日期: Getbirthyy()年 Getbirthmm()月 Getbirthdd() 日 endl;cout 身份证号: idendl;(2) lab6_7.cpp:主函数(输入、输出和拷贝构造函数测试)/lab6_7.cpp#inc

22、ludelab6_7.hvoid main()People p;p.input();coutendl;p.output();29People pp(p);coutendl;pp.output();(3) 结果四、实验提示步骤 2 提示二维数组动态分配空间示例 1 mn 矩阵#includeusing namespacestd;void main()int i,j,m,n,*A;coutmn;A= newint *m;/m行for (i=0;im;i+) Ai=newint n;/n列cout 输入 m n 矩阵 endl;for (i=0;im;i+)cout 第 i+1 行: ;for (j=0;jAij;/ 数组形式coutn输入的矩阵为: endl;for (i=0;im;i+)for (j=0;jn;j+)cout Aij;coutendl;31示例 2 不规范的矩阵#includeusing namespacestd;void main()int *a=newint *2;a0=new int 3;a1=new int 2;a00=11; a01=12; a02=13;a10=21; a11=22;couta00 a01 a02endl;couta10 a11endl;3233

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1