当前位置:文档之家› C语言程序设计实验答案数组、指针与字符串

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

实验06 数组、指针与字符串(4学时)(第6章数组、指针与字符串)一、实验目的二、实验任务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(人员)类。

具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。

其中“出生日期”声明为一个“日期”类内嵌子对象。

用成员函数实现对人员信息的录入和显示。

要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。

在测试程序中声明people类的对象数组,录入数据并显示。

三、实验步骤1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。

使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。

程序名:lab6_1.cpp。

参考运行结果:★程序及运行结果://lab6_1.cpp#include<iostream>using namespace std;void move(int matrix[][3]){int temp;for(int i=0;i<3;i++)for(int j=0;j<i;j++){temp=matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=temp;}}void main(){int i,j,mat[3][3];cout<<"输入3×3矩阵"<<endl;for(i=0;i<3;i++){cout<<"第"<<i+1<<"行:";for(j=0;j<3;j++) cin>>mat[i][j];}cout<<"\n输入的3×3矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<mat[i][j]<<" ";cout<<endl;}move(mat);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<*(*(mat+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;void move(int *matrix,int n){//矩阵为整型指针,对应一维数组int temp;for(int i=0;i<n;i++)for(int j=0;j<i;j++){temp=matrix[i*n+j];matrix[i*n+j]=matrix[j*n+i];matrix[j*n+i]=temp;}}void main(){int i,j,n,*mat;cout<<"输入方阵的阶数:";cin>>n;mat=new int[n*n];cout<<"输入"<<n<<"×"<<n<<"矩阵"<<endl;for(i=0;i<n;i++){cout<<"第"<<i+1<<"行:";for(j=0;j<n;j++) cin>>mat[i*n+j];//数组形式}cout<<"\n输入的矩阵为:"<<endl;for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<setw(4)<<mat[i*n+j];cout<<endl;}move(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) 使用二维动态数组表示方阵。

(参考实验提示)3.(编程)实现两字符串的连接。

声明字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。

程序名:lab6_3.cpp。

用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。

// 字符串的结束标志'\0'参考运行结果:★程序及运行结果://lab6_3.cpp#include<iostream>using namespace std;void strLL(char *a,char *b,char *c);void main(){int i;char a[10],b[10],c[20];cout<<"输入一个字符串a:"; cin>>a;cout<<"显示内存中的字符串a:";for(i=0;i<10;i++){if(a[i]) cout<<a[i]; //a[i]不为0else{cout<<"\'\\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(c[i]) cout<<c[i];else{ cout<<"\'\\0\'"; break; }}cout<<endl;}void strLL(char *a,char *b,char *c){int i,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#include<string>//使用C++中的string#include<iostream>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类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符数组来表示。

成员函数:构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char *, char *name);display() 使用cout显示姓名、街道地址、城市和邮编等属性;change_name() 改变类中表示姓名属性的字符数组类型的数据成员。

在主程序中声明这个类的对象并对其进行操作。

程序名:lab6_5.cpp。

参考运行结果:★程序及运行结果://lab6_5employee.h#include<cstring>//使用C中的string#include<iostream>using namespace std;class Employee{private:char name[10],street[20],city[10],mail[7];//姓名、街道、城市、邮编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<<"姓名:"<<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"void main(){Employee emp("张山","海甸三西路13号","海口市","570228");emp.display();emp.change_name("李世");cout<<endl;emp.display();}6.(编程,习题6-27)使用上一小题中的Employee类声明对象数组emp[5]。

相关主题