您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > C++第六章课后习题
第六章数组、指针与字符串6-1数组a[10][5][15]一共有多少个元素?解:10*5*15=750个元素6-2在数组a[20]中第一个元素和最后一个元素是哪一个?解:第一个元素是a[0],最后一个是a[19]6-3用一条语句声明一个有5个元素的int型数组,并依次赋予1~5的初值。解:intintegerArray[5]={1,2,3,4,5}6-4已知有一个数组名叫oneArray,用一条语句求出其元素的个数。解:intnArrayLength=sizeof(oneArray)/sizeof(oneArray[0]);6-5用一条语句声明一个有5×3个元素的二维int型数组,并依次赋予1~15的初值。解:inttheArray[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};6-6运算符“*”和“&”的作用是什么?解:*是指针运算符,是一元操作符,表示指针所指向的对象的值。&是取地址运算符,也是一个一元运算符,用来得到一个对象的地址。6-7什么叫做指针?指针中储存的地址和这个地址中的值有何区别?解:指针是一种数据类型,具有指针类型的变量称为指针变量。指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的类容。6-8声明一个int型指针,用new语句为其分配包含10个元素的地址空间。解:intpInteger=newint[10];6-9在字符串”Hello,world!”中结束符是什么?解:\06-10声明一个有5个元素的int型数组,在程序中提示用户输入元素值,最后再在屏幕上显示出来。解:#includeiostreamusingnamespacestd;intmain(){intmyArray[5];inti;for(i=0;i5;i++){coutValueformyArray[i]:;cinmyArray[i];}for(i=0;i5;i++)couti: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类型变量的指针,分别显示指针占了多少字节和指针所指的变量占了多少字节。解:#includeiostreamusingnamespacestd;intmain(){double*counter;cout\nSizeofpointer==sizeof(counter);coutendl;coutnSizeofaddressedvalue==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下列程序有何问题,请仔细体会使用指针时应避免出现这个的问题。#includeiostreamusingnamespacestd;intmain(){int*p;*p=9;coutThevalueatp:*p;return0;}解:指针p没有初始化,也就是没有指向某个确定的内存单元,它指向内存中的一个随机地址,给这个随机地址赋值是非常危险的。6-18下列程序有何问题,请改正;仔细体会使用指针时应避免出现的这个问题。#includeiostreamusingnamespacestd;intfn1(){int*p=newint(5);return*p;}intmain(){inta=fn1();coutthevalueofais:a;return0;}解:#includeiostreamusingnamespacestd;int*fn1();intmain(){int*a=fn1();coutthevalueofais:a;deletea;return0;}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为一个指向其半径值的指针,存放其半径值。设计对数据成员的各种操作,给出这个类的完整实现并测试这个类。解:#includeiostreamusingnamespacestd;classSimpleCircle{public:SimpleCircle();SimpleCircle(int);SimpleCircle(constSimpleCircle&);~SimpleCircle(){}voidsetRadius(int);intgetRadius()const;private:int*itsRadius;};SimpleCircle::SimpleCircle(){itsRadius=newint(5);}SimpleCircle::SimpleCircle(intRadius){itsRadius=newint(Radius);}SimpleCircle::SimpleCircle(constSimpleCircle&rhs){intval=rhs.getRadius();itsRadius=newint(val);}intSimpleCircle::getRadius()const{return*itsRadius;}intmain(){SimpleCircleCircleOne,CircleTwo(9);coutCircleOne:CircleOne.getRadius()endl;coutCircleTwo:CircleTwo.getRadius()endl;return0;}6-21编写一个函数,统计一条英文句子中字母的个数,在主程序中实现输入输出。解:#includeiostream#includecstdiousingnamespacestd;intcount(char*str){inti,num=0;for(i=0;str[i];i++){if((str[i]='a'&&str[i]='z')||(str[i]='A'&&str[i]='Z'))num++;}returnnum;}intmain(){chartext[100];cout输入一个英语句子:endl;gets(text);cout这个句子里有count(text)个字母。endl;}6-22编写函数voidreverse(string&s),用递归算法使字符串s倒序。解:#includeiostream#includestringusingnamespacestd;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);}elsereturnstr;}intmain(){stringstr;cout输入一个字符串:;cinstr;cout原字符串为:strendl;cout倒序反转后为:reverse(str)endl;return0;}6-23设学生人数N=8,提示用户输入N个人的考试成绩,然后计算出他们的平均成绩并显示出来。解:#includeiostream#includestringusingnamespacestd;#defineN8floatgrades[N];intmain(){inti;floattotal,average;for(i=0;iN;i++){coutEntergrade#(i+1):;cingrades[i];}total=0;for(i=0;iN;i++)total+=grades[i];average=total/N;cout\nAveragegrade:averageendl;return0;}6-24基于char*设计一个字符串类MyString,并且具有构造函数、析构函数、复制构造函数,重载运算符“+”、“=”、“+=”、“[]”,尽可能完善它,使之能满足各种需要。(运算符重载功能为选做,参见第8章)解:#includeiostream#includestringusingnamespacestd;classMyString{public: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;}private:MyString(unsignedshort);char*itsMyString;unsignedshortitsLen;};MyString::MyString(){itsMyString=newchar[1];itsMyString[0]='\0';itsLen=0;}MyString::MyString(unsignedshortlen){itsMyString=newchar[itsLen+1];for(unsignedshorti=0;i=len;i++)itsMyString[i]='\0';itsLen=len;}MyString::MyString(constchar*constcMyString){itsLen=strlen(cMyString);itsMyString=newchar[itsLen+1];for(unsignedshorti=0;iitsLen;i++)itsMyString[i]=cMyString[i];itsMyString[itsLen]='\0';}MyString::MyString(constMyString&rhs){itsLen=rhs.getLen();itsMyString=newchar[itsLen+1];for(unsignedshort
本文标题:C++第六章课后习题
链接地址:https://www.777doc.com/doc-2901800 .html