C语言程序设计实验答案数组指针与字符串文档格式.docx
《C语言程序设计实验答案数组指针与字符串文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验答案数组指针与字符串文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
//lab6_1.cpp
#include<
iostream>
usingnamespacestd;
voidmove(intmatrix[][3]){
inttemp;
for(inti=0;
i<
3;
i++)
for(intj=0;
j<
i;
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;
i++){
cout<
第"
i+1<
行:
;
for(j=0;
j++)cin>
>
mat[i][j];
}
\n输入的3×
3矩阵为:
j++)
cout<
mat[i][j]<
"
move(mat);
转置后的矩阵为:
*(*(mat+i)+j)<
//指针形式
2.(编程,习题6-26)编写n×
n阶矩阵转置函数,参数为整型指针。
使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。
通过调试功能观察指针的内容及其所指的对象中的内容。
lab6_2.cpp。
注:
可使用一维动态数组,或二维动态数组。
(1)使用一维动态数组表示方阵。
//lab6_2.cpp
iomanip>
voidmove(int*matrix,intn){//矩阵为整型指针,对应一维数组
n;
temp=matrix[i*n+j];
matrix[i*n+j]=matrix[j*n+i];
matrix[j*n+i]=temp;
inti,j,n,*mat;
输入方阵的阶数:
cin>
mat=newint[n*n];
输入"
n<
×
矩阵"
mat[i*n+j];
//数组形式
\n输入的矩阵为:
setw(4)<
move(mat,n);
*(mat+i*n+j);
delete[]mat;
(2)使用二维动态数组表示方阵。
(参考实验提示)
voidmove(int**matrix,intn){//矩阵为指向整型指针的指针,对应二维数组
inti,j,n,**mat;
mat=newint*[n];
i++)mat[i]=newint[n];
*(*(mat+i)+j);
3.(编程)实现两字符串的连接。
声明字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。
lab6_3.cpp。
用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。
//字符串的结束标志'
\0'
//lab6_3.cpp
voidstrLL(char*a,char*b,char*c);
inti;
chara[10],b[10],c[20];
输入一个字符串a:
a;
显示内存中的字符串a:
10;
if(a[i])cout<
a[i];
//a[i]不为0
else{
\'
\\0\'
//转义
break;
\n输入另一个字符串b:
b;
显示内存中的字符串b:
b<
strLL(a,b,c);
\n显示内存中的连接字符串c:
20;
if(c[i])cout<
c[i];
else{cout<
break;
voidstrLL(char*a,char*b,char*c){
inti,j;
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
string>
//使用C++中的string
strings1,s2;
输入字符串s1:
s1;
输入字符串s2:
s2;
s1+=s2;
s1+s2="
s1<
5.(编程,习题6-27)声明Employee类并应用。
在employee.h文件中声明Employee类。
Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符数组来表示。
成员函数:
构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*name);
display()使用cout显示姓名、街道地址、城市和邮编等属性;
change_name()改变类中表示姓名属性的字符数组类型的数据成员。
在主程序中声明这个类的对象并对其进行操作。
lab6_5.cpp。
//lab6_5employee.h
cstring>
//使用C中的string
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(){
姓名:
name<
街道:
street<
城市:
city<
邮编:
mail<
change_name(char*n){strcpy(name,n);
//lab6_5.cpp
#include"
lab6_5employee.h"
Employeeemp("
张山"
"
海甸三西路13号"
海口市"
570228"
);
emp.display();
emp.change_name("
李世"
6.(编程,习题6-27)使用上一小题中的Employee类声明对象数组emp[5]。
使用循环语句把数据显示出来。
lab6_6.cpp。
//lab6_6.cpp
Employeeemp[5]={Employee("
n1"
s1"
c1"
m1"
),
Employee("
n2"
s2"
c2"
m2"
n3"
s3"
c3"
m3"
n4"
s4"
c4"
m4"
n5"
s5"
c5"
m5"
)};
5;
emp[i].display();
7.(编程)修改实验4中的people(人员)类。
lab6_7.cpp。
(1)lab6_7.h:
People(人员)类的声明及成员函数的实现
//lab6_7.h
classDate{
intyy,mm,dd;
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{
charname[11];
//姓名,增添
charnumber[7];
//编号,改为数组
charsex[3];
//男或女,改为数组
Datebirthday;
//出生日期
charid[16];
//身份证号,改为数组
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()
name;
编号:
number;
性别(男/女):
sex;
出生日期(年月日):
inty,m,d;
y>
m>
d;
Setbirthyy(y);
Setbirthmm(m);
Setbirthdd(d);
身份证号:
id;
output()
\n编号:
number<
性别:
sex<
出生日期:
Getbirthyy()<
年"
<
Getbirthmm()<
月"
Getbirthdd()<
日"
id<
(2)lab6_7.cpp:
主函数(输入、输出和拷贝构造函数测试)
//lab6_7.cpp
lab6_7.h"
Peoplep;
p.input();
p.output();
Peoplepp(p);
pp.output();
(3)结果
四、实验提示
步骤2提示
二维数组动态分配空间
示例1m×
n矩阵
#include<
inti,j,m,n,**A;
输入矩阵的行数m和列数n:
A=newint*[m];
//m行
m;
i++)A[i]=newint[n];
//n列
m<
A[i][j];
示例2不规范的矩阵
int**a=newint*[2];
a[0]=newint[3];
a[1]=newint[2];
a[0][0]=11;
a[0][1]=12;
a[0][2]=13;
a[1][0]=21;
a[1][1]=22;
a[0][0]<
a[0][1]<
a[0][2]<
a[1][0]<
a[1][1]<