C++第六章课后习题Word文件下载.docx
《C++第六章课后习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++第六章课后习题Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
![C++第六章课后习题Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/18/2c7d64ac-aa2f-41de-bb7d-02cd4da7402b/2c7d64ac-aa2f-41de-bb7d-02cd4da7402b1.gif)
指针是一种数据类型,具有指针类型的变量称为指针变量。
指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的类容。
6-8声明一个int型指针,用new语句为其分配包含10个元素的地址空间。
intpInteger=newint[10];
6-9在字符串”Hello,world!
”中结束符是什么?
\0
6-10声明一个有5个元素的int型数组,在程序中提示用户输入元素值,最后再在屏幕上显示出来。
#include<
iostream>
usingnamespacestd;
intmain(){
intmyArray[5];
inti;
for(i=0;
i<
5;
i++)
{
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=rhs.getRadius();
itsRadius=newint(val);
intSimpleCircle:
getRadius()const
return*itsRadius;
SimpleCircleCircleOne,CircleTwo(9);
CircleOne:
CircleOne.getRadius()<
CircleTwo:
CircleTwo.getRadius()<
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(str.length()>
1){
stringsub=str.substr(1,str.length()-2);
returnstr.substr(str.length()-1,1)+reverse(sub)+str.substr(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)c