C++第六章课后习题文档格式.docx
- 文档编号:18871621
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:18
- 大小:20.20KB
C++第六章课后习题文档格式.docx
《C++第六章课后习题文档格式.docx》由会员分享,可在线阅读,更多相关《C++第六章课后习题文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
{
cout<
<
"
ValueformyArray["
]:
;
cin>
>
myArray[i];
}
:
myArray[i]<
endl;
return0;
}
6-11引用和指针有何区别?
何时只能使用指针而不能使用引用?
引用是一个别名,不能为NULL值,不能被重新分配;
指针是一个存放地址的变量。
当需要对变量重新赋以另外的地址或赋值为NULL时只能使用指针。
6-12声明下列指针:
float类型变量的指针pfloat,char类型的指针pstr、structCustomer型的指针pcus。
float*pfloat;
Char*pstr;
Structcustomer*pcus;
6-13给定float类型的指针fp,写出显示fp所指向的值的输出流语句。
cout<
”Value==”<
*fp;
6-14在程序中声明一个double类型变量的指针,分别显示指针占了多少字节和指针所指的变量占了多少字节。
double*counter;
\nSizeofpointer=="
sizeof(counter);
nSizeofaddressedvalue=="
sizeof(*counter);
return0;
}
6-15constint*p1和int*constp2的区别是什么?
constint*p1声明了一个指向整形常量的指针p1,因此不能通过指针p1来改变它所指向的整型值;
int*constp2声明了一个指针型常量,用于存放整形变量的地址,这个指针一旦初始化后,就不能被重新赋值。
6-16声明一个int型变量a,一个int型指针p,一个引用r,通过p把a的值改为10,通过r把a的值改为5
inta;
int*p=&
a;
int&
r=a;
*p=10;
r=5;
6-17下列程序有何问题,请仔细体会使用指针时应避免出现这个的问题。
#include<
intmain(){
int*p;
*p=9;
cout<
"
Thevalueatp:
<
*p;
指针p没有初始化,也就是没有指向某个确定的内存单元,它指向内存中的一个随机地址,给这个随机地址赋值是非常危险的。
6-18下列程序有何问题,请改正;
仔细体会使用指针时应避免出现的这个问题。
intfn1(){
int*p=newint(5);
return*p;
intmain(){
inta=fn1();
cout<
thevalueofais:
a;
int*fn1();
int*a=fn1();
cout<
deletea;
int*fn1(){
int*p=newint(5);
returnp;
6-19声明一个参数为int型,返回值为long型的函数指针;
声明类A的一个成员函数指针,其参数为int型,返回值long型。
long(*p_fn1)(int);
Long(A:
*p_fn2)(int);
6-20实现一个名为SimpleCircle的简单圆类,其数据成员int*itsRadius为一个指向其半径值的指针,存放其半径值。
设计对数据成员的各种操作,给出这个类的完整实现并测试这个类。
classSimpleCircle
{
public:
SimpleCircle();
SimpleCircle(int);
SimpleCircle(constSimpleCircle&
);
~SimpleCircle(){}
voidsetRadius(int);
intgetRadius()const;
private:
int*itsRadius;
};
SimpleCircle:
SimpleCircle()
itsRadius=newint(5);
SimpleCircle(intRadius)
itsRadius=newint(Radius);
SimpleCircle(constSimpleCircle&
rhs)
intval=();
itsRadius=newint(val);
intSimpleCircle:
getRadius()const
return*itsRadius;
SimpleCircleCircleOne,CircleTwo(9);
CircleOne:
()<
CircleTwo:
6-21编写一个函数,统计一条英文句子中字母的个数,在主程序中实现输入输出。
cstdio>
intcount(char*str)
inti,num=0;
str[i];
if((str[i]>
='
a'
str[i]<
z'
)||(str[i]>
A'
Z'
))
num++;
returnnum;
chartext[100];
输入一个英语句子:
gets(text);
这个句子里有"
count(text)<
个字母。
6-22编写函数voidreverse(string&
s),用递归算法使字符串s倒序。
string>
stringreverse(string&
str){
if()>
1){
stringsub=(1,()-2);
return()-1,1)+reverse(sub)+(0,1);
}else
returnstr;
stringstr;
输入一个字符串:
cin>
str;
原字符串为:
str<
倒序反转后为:
reverse(str)<
6-23设学生人数N=8,提示用户输入N个人的考试成绩,然后计算出他们的平均成绩并显示出来。
#defineN8
floatgrades[N];
floattotal,average;
N;
Entergrade#"
(i+1)<
grades[i];
total=0;
total+=grades[i];
average=total/N;
\nAveragegrade:
average<
6-24基于char*设计一个字符串类MyString,并且具有构造函数、析构函数、复制构造函数,重载运算符“+”、“=”、“+=”、“[]”,尽可能完善它,使之能满足各种需要。
(运算符重载功能为选做,参见第8章)
classMyString{
MyString();
MyString(constchar*const);
MyString(constMyString&
~MyString();
char&
operator[](unsignedshortoffset);
charoperator[](unsignedshortoffset)const;
MyStringoperator+(constMyString&
voidoperator+=(constMyString&
MyString&
operator=(constMyString&
unsignedshortgetLen()const{
returnitsLen;
constchar*getMyString()const{
returnitsMyString;
MyString(unsignedshort);
char*itsMyString;
unsignedshortitsLen;
MyString:
MyString(){
itsMyString=newchar[1];
itsMyString[0]='
\0'
itsLen=0;
MyString(unsignedshortlen){
itsMyString=newchar[itsLen+1];
for(unsignedshorti=0;
=len;
itsMyString[i]='
itsLen=len;
MyString(constchar*constcMyString){
itsLen=strlen(cMyString);
itsMyString=newchar[itsLen+1];
for(unsignedshorti=0;
itsLen;
itsMyString[i]=cMyString[i];
itsMyString[itsLen]='
MyString(constMyString&
rhs){
itsLen=();
itsMyString=newchar[itsLen+1];
itsMyString[i]=rhs[i];
~MyString(){
delete[]itsMyString;
MyString&
if(this==&
rhs)
return*this;
return*this;
char&
operator[](unsignedshortoffset){
if(offset>
itsLen)
returnitsMyString[itsLen-1];
else
returnitsMyString[offset];
charMyString:
operator[](unsignedshortoffset)const
MyStringMyString:
operator+(constMyString&
unsignedshorttotalLen=itsLen+();
MyStringtemp(totalLen);
unsignedshorti=0;
temp[i]=itsMyString[i];
for(unsignedshortj=0;
j<
();
j++,i++)
temp[i]=rhs[j];
temp[totalLen]='
returntemp;
voidMyString:
operator+=(constMyString&
unsignedshortrhsLen=();
unsignedshorttotalLen=itsLen+rhsLen;
MyStringtemp(totalLen);
for(unsignedshortj=0;
temp[i]=rhs[i-itsLen];
*this=temp;
MyStrings1("
initialtest"
S1:
\t"
char*temp="
HelloWorld"
s1=temp;
chartempTwo[20];
strcpy(tempTwo,"
nicetobehere!
s1+=tempTwo;
tempTwo:
tempTwo<
S1[4]:
s1[4]<
s1[4]='
x'
S1[999]:
s1[999]<
MyStrings2("
Anothermystring"
MyStrings3;
s3=s1+s2;
S3:
MyStrings4;
s4="
whydoesthiswork?
S4:
6-25编写一个3×
3矩阵转置的函数,在main()函数中输入数据。
voidmove(inta[3][3])
inti,j,k;
3;
for(j=0;
j++)
{
k=a[i][j];
a[i][j]=a[j][i];
a[j][i]=k;
}
inti,j;
intdata[3][3];
输入矩阵的元素"
cout<
第"
i+1<
行第"
j+1<
个元素为:
cin>
data[i][j];
输入的矩阵为:
for(i=0;
i++){
for(j=0;
cout<
data[i][j]<
move(data);
转置后的矩阵为:
for(j=0;
return0;
6-26编写一个矩阵转置的函数,矩阵的行数和列数在程序中由用户输入。
voidmove(int*a,intn)
n;
k=*(a+i*n+j);
*(a+i*n+j)=*(a+j*n+i);
*(a+j*n+i)=k;
intn,i,j;
int*p;
请输入矩阵的行、列数:
p=newint[n*n];
p[i*n+j];
p[i*n+j]<
move(p,n);
6-27定义一个Employee类,其中包括表示姓名、街道地址、城市和邮编等属性,包括setName()和display()等函数;
display()使用cout语句显示姓名、地址、城市和邮编等属性,函数setName()改变对象的姓名属性,实现并测试这个类。
classEmployee
charname[30];
charstreet[30];
charcity[18];
charzip[6];
Employee(char*n,char*str,char*ct,char*z);
voidsetName(char*n);
voiddisplay();
Employee:
Employee(char*n,char*str,char*ct,char*z)
strcpy(name,n);
strcpy(street,str);
strcpy(city,ct);
strcpy(zip,z);
voidEmployee:
setName(char*n)
voidEmployee:
display(){
name<
street<
city<
zip;
Employeee1("
逗逼"
"
马勒戈壁3号"
葫芦岛"
042800"
("
傻逼"
6-28分别将例6-10程序和6-16程序中对指针的所有使用都改写为与之等价的引用形式,比较修改前后的程序,体会在哪些情况下使用指针更好,哪些情况下使用引用更好。
6-10
voidsplitFloat(flo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 第六 课后 习题