版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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
2、_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(人员)类。具有的属性如下:姓名char name11、编号char
3、number7、性别char sex3、生日birthday、身份证号char id16。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中声明people类的对象数组,录入数据并显示。三、实验步骤1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。程序名:lab6_1.cpp。参考运行结果: 程序及运行结果:/lab6_1.cpp#inclu
4、de <iostream>using namespace std;void move(int matrix3)int temp;for(int i=0;i<3;i+)for(int j=0;j<i;j+)temp=matrixij;matrixij=matrixji;matrixji=temp;void main()int i,j,mat33;cout<<"输入3×3矩阵"<<endl;for(i=0;i<3;i+)cout<<"第"<<i+1<<&quo
5、t;行:"for(j=0;j<3;j+) cin>>matij;cout<<"n输入的3×3矩阵为:"<<endl;for(i=0;i<3;i+)for(j=0;j<3;j+)cout<<matij<<" "cout<<endl;move(mat);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<3;i+)for(j=0;j<3;j+)cout<<*(*(mat
6、+i)+j)<<" "/指针形式cout<<endl;2.(编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过调试功能观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。注:可使用一维动态数组,或二维动态数组。 程序及运行结果:(1) 使用一维动态数组表示方阵。/lab6_2.cpp#include <iostream>#include <iomanip>using namespace std;voi
7、d move(int *matrix,int n)/矩阵为整型指针,对应一维数组int temp;for(int i=0;i<n;i+)for(int j=0;j<i;j+)temp=matrixi*n+j;matrixi*n+j=matrixj*n+i;matrixj*n+i=temp;void main()int i,j,n,*mat;cout<<"输入方阵的阶数:"cin>>n;mat=new intn*n;cout<<"输入"<<n<<"×"&l
8、t;<n<<"矩阵"<<endl;for(i=0;i<n;i+)cout<<"第"<<i+1<<"行:"for(j=0;j<n;j+) cin>>mati*n+j;/数组形式cout<<"n输入的矩阵为:"<<endl;for(i=0;i<n;i+)for(j=0;j<n;j+)cout<<setw(4)<<mati*n+j;cout<<endl;move
9、(mat,n);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<n;i+)for(j=0;j<n;j+)cout<<setw(4)<<*(mat+i*n+j);/指针形式cout<<endl;delete mat;(2) 使用二维动态数组表示方阵。(参考实验提示)/lab6_2.cpp#include <iostream>#include <iomanip>using namespace std;void move(int *matrix,int n)/矩阵为指
10、向整型指针的指针,对应二维数组int temp;for(int i=0;i<n;i+)for(int j=0;j<i;j+)temp=matrixij;matrixij=matrixji;matrixji=temp;void main()int i,j,n,*mat;cout<<"输入方阵的阶数:"cin>>n;mat=new int*n;for(i=0;i<n;i+) mati=new intn;cout<<"输入"<<n<<"×"<<
11、;n<<"矩阵"<<endl;for(i=0;i<n;i+)cout<<"第"<<i+1<<"行:"for(j=0;j<n;j+) cin>>matij;/数组形式cout<<"n输入的矩阵为:"<<endl;for(i=0;i<n;i+)for(j=0;j<n;j+)cout<<setw(4)<<matij;cout<<endl;move(mat,n);cou
12、t<<"转置后的矩阵为:"<<endl;for(i=0;i<n;i+)for(j=0;j<n;j+)cout<<setw(4)<<*(*(mat+i)+j);/指针形式cout<<endl;delete mat;3.(编程)实现两字符串的连接。声明字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。/ 字符串的结束标志'0&
13、#39;参考运行结果: 程序及运行结果:/lab6_3.cpp#include <iostream>using namespace std;void strLL(char *a,char *b,char *c);void main()int i;char a10,b10,c20;cout<<"输入一个字符串a:" cin>>a;cout<<"显示内存中的字符串a:" for(i=0;i<10;i+)if(ai) cout<<ai; /ai不为0elsecout<<"&
14、#39;0'"/转义break;cout<<endl;cout<<"n输入另一个字符串b:" cin>>b;cout<<"显示内存中的字符串b:" cout<<b<<"'0'"<<endl;strLL(a,b,c);cout<<"n显示内存中的连接字符串c:" for(i=0;i<20;i+)if(ci)cout<<ci;else cout<<"&
15、#39;0'" break; cout<<endl;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;4.(编程)使用string类声明字符串对象,实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 程序及运行结果:/lab6_4.cpp#include <string>/使用C+中的string#include <io
16、stream>using namespace std;void main()string s1,s2;cout<<"输入字符串s1:"cin>>s1;cout<<"输入字符串s2:"cin>>s2;s1+=s2;cout<<"s1+s2 = "<<s1<<endl;5.(编程,习题6-27)声明Employee类并应用。在employee.h文件中声明Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符
17、数组来表示。成员函数:构造函数 用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char *, char *name);display() 使用cout显示姓名、街道地址、城市和邮编等属性;change_name() 改变类中表示姓名属性的字符数组类型的数据成员。在主程序中声明这个类的对象并对其进行操作。程序名:lab6_5.cpp。参考运行结果: 程序及运行结果:/lab6_5employee.h#include <cstring>/使用C中的string#include <iostream>using namespace std;clas
18、s Employeeprivate:char name10,street20,city10,mail7;/姓名、街道、城市、邮编public:Employee(char *n,char *s,char *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<&
19、lt;"姓名:"<<name<<endl;cout<<"街道:"<<street<<endl;cout<<"城市:"<<city<<endl;cout<<"邮编:"<<mail<<endl;void Employee:change_name(char *n) strcpy(name,n); /lab6_5.cpp#include "lab6_5employee.h"
20、void main()Employee emp("张山","海甸三西路13号","海口市","570228");emp.display();emp.change_name("李世");cout<<endl;emp.display();6.(编程,习题6-27)使用上一小题中的Employee类声明对象数组emp5。使用循环语句把数据显示出来。程序名:lab6_6.cpp。参考运行结果: 程序及运行结果:/lab6_6.cpp#include "lab6_5employee.
21、h"#include <iostream>using namespace std;void main()Employee emp5= Employee("n1","s1","c1","m1"),Employee("n2","s2","c2","m2"),Employee("n3","s3","c3","m3"),Employee(&qu
22、ot;n4","s4","c4","m4"),Employee("n5","s5","c5","m5") ;for(int i=0;i<5;i+)empi.display();cout<<endl;7.(编程)修改实验4中的people(人员)类。程序名:lab6_7.cpp。参考运行结果: 程序及运行结果:(1) lab6_7.h:People(人员)类的声明及成员函数的实现/lab6_7.h#include <iost
23、ream>#include <cstring>using namespace std;class Dateprivate:int yy,mm,dd;public: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()const return dd; void Setyy(int y) yy=y; void Setmm(int m) mm=m; void Setdd(int d
24、) dd=d; ;class Peopleprivate:char name11;/姓名,增添char number7;/编号,改为数组char sex3;/男或女,改为数组Date birthday;/出生日期char id16;/身份证号,改为数组public:People()People(People &p);People()void Getname(char na) strcpy(na,name); void Getnumber(char nu) strcpy(nu,number); void Getsex(char se)strcpy(se,sex); int Getbirt
25、hyy()const return birthday.Getyy(); int Getbirthmm()const return birthday.Getmm(); int Getbirthdd()const return birthday.Getdd(); void Getid(char d) strcpy(d,id); void Setname(char na) strcpy(name,na); void Setnumber(char nu) strcpy(number,nu); void Setsex(char se)strcpy(sex,se); void Setbirthyy(int
26、 y) birthday.Setyy(y); void Setbirthmm(int m) birthday.Setmm(m); void Setbirthdd(int d) birthday.Setdd(d); void Setid(char d) strcpy(id,d); void input();void output();People:People(People &p):birthday(p.birthday)strcpy(name,);strcpy(number,p.number);strcpy(sex,p.sex);strcpy(id,p.id);inline
27、 void People:input()cout<<"姓名:"cin>>name;cout<<"编号:"cin>>number;cout<<"性别(男/女):"cin>>sex;cout<<"出生日期(年 月 日):"int y,m,d; cin>>y>>m>>d;Setbirthyy(y); Setbirthmm(m); Setbirthdd(d);cout<<"身份证号:
28、"cin>>id;inline void People:output()cout<<"姓名:"<<name<<"n编号:"<<number<<endl;cout<<"性别:"<<sex<<endl;cout<<"出生日期:"<<Getbirthyy()<<"年"<<Getbirthmm()<<"月"<<Getbirthdd()<<"日"<<endl;cout<<"身份证号:"<<id<<endl;(2) lab6_7.cpp:主函数(输入、输出和拷贝构造函数测试)/lab6_7.cpp#include "lab6_7.h"void main()People p;p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度影视联合制作合同标的合作制作流程与责任分配3篇
- 2024版房产遗产继承合同2篇
- 2024年度物业管理委托合同(修订版)3篇
- 通风系统安装劳务合同
- 解除购房合同协议书
- 污水管网运营维护合同
- 2024年度数字化图书馆建设与租赁合同3篇
- 二零二四年度工程咨询服务合同标的为新建办公楼3篇
- 2024年度合作合同合作目标和具体合作内容3篇
- 广州管圆线虫病的临床护理
- 《国际商务谈判》课程教学大纲
- 2023骨髓腔输液技术要求
- 四渡赤水战役PPT课件模板
- 建设用地报批服务投标方案(技术方案)
- 飞机涡轮轴发动机-涡轴发动机概述
- 运输车辆安全技术操作规程
- GJB438C模板-软件开发计划(已按标准公文格式校准)
- 培训课件ISO13485-2016培训教材
- 世界遗产公约和世界遗产课件
- 房屋市政工程生产安全重大事故隐患判定标准(隐患排查表)
- 2023年11月时事政治测试100题及答案
评论
0/150
提交评论