C++程序设计课后习题答案.docx
《C++程序设计课后习题答案.docx》由会员分享,可在线阅读,更多相关《C++程序设计课后习题答案.docx(30页珍藏版)》请在冰豆网上搜索。
C++程序设计课后习题答案
第1章C++语言简介
一、简答题
1.请介绍C++语言的发展过程
C++语言源于C语言,1972年,AT&T公司设计了C语言并得到广泛应用。
为了使得C语言能够支持面向对象技术,在20世纪80年代,Bell实验室设计了一门新的语言C++。
1985年起,C++语言开始进入商业应用阶段,并由此进入了高速发展时期,各种面向对象程序设计思想与技术逐步融入到C++语言之中。
在C++语言标准中,先后提供了对虚函数、重载、继承、模板和命名空间技术的支持。
现在的C++语言已经是一门完全独立的语言,而不再是对C语言的简单扩充。
2.试比较C++语言与Java语言的优缺点。
(1)安全性。
用Java语言编写的程序,其安全性要高于用C++语言编写的程序。
Java语言对语法做了更多的限制,添加了更多的数据检测内容,从而减少了程序出错的概率。
更重要的是,Java语句取消了指针数据类型,并且添加了内存自动回收功能,从而避免了系统内容出错的情况。
而这一切都是C++程序设计中极其容易出现错误的地方。
(2)效率。
虽然C++程序的安全性相对低于Java程序,但是,C++程序的运行效率确是Java程序难以企及的。
一方面,Java程序需要Java虚拟机对中间代码进行解释执行,而C++程序则是一次编译后可以立即执行;另一方面,在C++程序中,指针数据类型的使用可以大幅度提高程序运行效率和程序的灵活性,而这都是Java程序所不具备的。
二、程序设计题
创建一个简单C++程序,在屏幕上显示ThisisaC++program。
【步骤】
用户利用VC6.0开发工具,创建一个空的Win32控制台项目,在项目中添加一个空的cpp文件,添加如下代码。
#include
usingnamespacestd;
intmain(intargc,char**argv)
{
cout<<"ThisisaC++program."<system("PAUSE");
return0;
}
第2章数据描述与基本运算
简答题
1.请指出下面标识符中,哪些是合法的变量名称。
abc,_3x,_b为合法变量名称,其他为非法。
2.请指出下面哪些是合法的常量取值。
23,3e-5,'\n',12.56E,"abc"为合法常量取值。
3.请给出下面表达式的取值。
(1)-3+4*5–6=11
(2)-3+4%5–6=-5
(3)-3*4%-6/5=0
(4)(7+6)%5/2=1
4.请完成下列表达式。
(1)sin30°-tan20°:
sin(30*3.14/180)–tan(20*3.14/180)
(2)232-:
pow(232,-sqrt(a*a+b*b))
5.求表达式值。
(1)1<4&&4>10=0;
(2)!
(5>=15)||(2<4-3)=true;
第3章C++语句
一、简答题
1.答:
语句是程序设计语言中的最小可执行单位,是构成程序的基础。
语句由表达式构成,与表达式相比较,语句需要有分号表示语句结束。
2.答:
C++语言与C语言有显著不同,首先,在语法格式上,C++除了兼容C语言语法外,还增加了很多新的表达方式,更重要的是,C++语言支持面向对象程序设计,涵盖了继承、封装与多态等重要内容,这是C语言中所不具备的。
3.(需要在程序中加入cmath头函数:
#include)
(1)pow(1+x*y,6)
(2)a*sin(x+5)*sin(x+5)+b*cos(6*y-c);
(3)4*y*(1-pow(x,y))
(4)(4/y)/((5*x)/(7*y)-6/(5*z-8*x))
4.Continue与break都表示终止执行当前循环过程,continue语句要求重新回到循环开始处,重新判断循环条件,决定是否执行循环体;而break则要求退出循环,执行循环体后的语句。
5.typedefstruct_tmp
{
intage;
charsex;
}TMP;
TMPtmpInf[10];
二、程序设计题
1.参考代码
#include
#include
usingnamespacestd;
intmain(intargc,char**argv)
{
doubley=0.0;
intx=0;
cout<<"Pleaseinputx:
";
cin>>x;
if(x<-1)
y=-x+9;
elseif(x<0)
y=2*x+4.5;
elseif(x<1)
y=x*x+4*x-7;
else
y=3*sin(x)+12;
cout<<"y="<}
2.参考代码
#include
#include
usingnamespacestd;
intmain(intargc,char**argv)
{
doublea=0.0;
doubleb=0.0;
doublec=0.0;
doublex=0.0;
doubledelta=0.0;
cout<<"Pleaseinputa:
";
cin>>a;
cout<<"Pleaseinputb:
";
cin>>b;
cout<<"Pleaseinputc:
";
cin>>c;
delta=sqrt(b*b-4*a*c);
if(delta<0)
cout<<"xisnorealnumber!
"<elseif(delta==0)
cout<<"x="<<-b/(2*a)<else
cout<<"x="<<(-b+delta)/(2*a)<<";"<<(-b-delta)/(2*a)<return0;
}
3.参考代码
#include
#include
usingnamespacestd;
intfact(inta)
{
if(a==0||a==1)
return1;
else
returnfact(a-1)*a;
}
intmain(intargc,char**argv)
{
intx=0;
doubley=0.0;
doubletmp=0.0;
inti=0;
cout<<"Pleaseinputx:
";
cin>>x;
do
{
tmp=pow(x,i)/fact(i);
y=y+tmp;
i++;
}while(tmp>=pow(10,-8));
cout<<"e^"<return0;
}
4.参考代码
#include
usingnamespacestd;
intleapyear(inta)
{
if((a%4==0&&a%100!
=0)||(a%400==0))
returna;
else
return-1;
}
intmain(intargc,char**argv)
{
intyear;
cout<<"Pleaseinputyear:
";
cin>>year;
if(leapyear(year)>0)
cout<else
cout<return0;
}
第4章数组与结构体
一、简答题
1.字符数组初始化通常两种形式,一是在定义时将其初始为空串,即赋值为{0};另外是使用memset函数,将字符数组设定为空或其他指定形式。
2.结构体与共用体有很多相似地方,但也有重要区别,主要是共用体在存储时使用覆盖技术,可以共用同一个存储空间,而结构体没有这个功能。
二、程序设计题
1.参考代码
#include
usingnamespacestd;
intmain(intargc,char**argv)
{
intscores[8]={0};
intmaxscore=0;
intminscore=0;
inttotalsocre=0;
doubleavgscore=0.0;
inti=0;
for(i=0;i<8;i++)
{
cout<<"PleaseinputNO."<
";
cin>>scores[i];
}
maxscore=scores[0];
minscore=scores[0];
totalsocre=scores[0];
for(i=1;i<8;i++)
{
if(scores[i]>maxscore)
maxscore=scores[i];
if(scores[i]minscore=scores[i];
totalsocre=totalsocre+scores[i];
}
avgscore=(totalsocre-maxscore-minscore)/6.0;
cout<<"MaxScore:
"<cout<<"MinScore:
"<cout<<"AvgScore:
"<return0;
}
2.参考代码
#include
usingnamespacestd;
typedefstruct_stuinf{
charname[16];
intsex;//0-man,1-woman
intage;
}STUINF;
intmain(intargc,char**argv)
{
STUINFstuInf[10]={0};
inti=0;
intages=0;
intmages=0;
intwages=0;
intmcount=0;
intwcount=0;
doubleavgages=0.0;
for(i=0;i<10;i++)
{
cout<<"PleaseinputNO."<
"<cout<<"NAME:
";
cin>>stuInf[i].name;
cout<<"SEX(0-MAN;1-WOMAN):
";
cin>>stuInf[i].sex;
cout<<"AGE:
";
cin>>stuInf[i].age;
}
for(i=0;i<10;i++)
{
if(stuInf[i].sex==0)
{
mages+=stuInf[i].age;
mcount++;
}
else
{
wages+=stuInf[i].age;
wcount++;
}
}
ages=mages+wages;
cout<<"ManAvgAges:
"<cout<<"WomanAvgAges:
"<cout<<"AvgAges:
"<return0;
}
第5章指针
一、简答题
1.运行结果:
3
23
123
2.运行结果:
a=5;b=-2;c=7
二、程序设计题
参考代码
#include
#include
usingnamespacestd;
voidgetStr(char*inStr,char*outStr,intinPos)
{
inti=0;
char*tmp=inStr;
while(*tmp!
='\0'&&i{
tmp++;
i++;
}
i=0;
while(*tmp!
='\0')
{
*outStr=*tmp;
outStr++;
tmp++;
}
*outStr='\0';
}
intmain(intargc,char**argv)
{
charsrcStr[64]={0};
chardstStr[64]={0};
char*p=NULL;
intpos=0;
intstartpos=0;
inti=0;
fflush(stdin);
cout<<"PleaseinputSourceString:
";
cin.getline(srcStr,sizeof(srcStr));
cout<<"PleaseinputStartPosition:
";
cin>>startpos;
getStr(srcStr,dstStr,startpos);
cout<return0;
}
第6章函数
一、选择题
CCAC
二、程序设计题
参考代码
#include
#defineARRCOUNT4
usingnamespacestd;
voidtest(int(&inArr)[ARRCOUNT])
{
inti=0;
intj=0;
inttmp=0;
for(i=0;i{
for(j=0;j{
if(inArr[j]{
tmp=inArr[j];
inArr[j]=inArr[j+1];
inArr[j+1]=tmp;
}
}
}
}
intmain()
{
intarr[ARRCOUNT]={23,15,56,0};
test(arr);
inti=0;
for(i=0;icout<}
第7章类与对象
一、选择题
DCDDC
二、程序设计题
参考代码
#include
usingnamespacestd;
classemployee
{
public:
employee();
~employee();
voidchangename(char*inStr);
voiddisplay();
protected:
charname[16];
charaddr[64];
charpostno[8];
};
employee:
:
employee()
{
memset(name,0,sizeof(name));
memset(addr,0,sizeof(addr));
memset(postno,0,sizeof(postno));
}
employee:
:
~employee()
{
memset(name,0,sizeof(name));
memset(addr,0,sizeof(addr));
memset(postno,0,sizeof(postno));
}
voidemployee:
:
changename(char*inStr)
{
memset(name,0,sizeof(name));
strcpy(name,inStr);
}
voidemployee:
:
display()
{
cout<<"Name:
"<cout<<"Addr:
"<cout<<"PostNO:
"<}
intmain(intargc,char**argv)
{
employeeworker;
worker.display();
worker.changename("Tom");
worker.display();
return0;
}
第8章类的继承与派生
一、选择题
1~4CADB;5~8CDBA
二、程序设计题
1.参考代码
#include
usingnamespacestd;
classwehicle
{
public:
wehicle(intx,doubley);
~wehicle();
voidlistinf();
protected:
intwheels;
intweight;
};
wehicle:
:
wehicle(intx,doubley)
{
wheels=x;
weight=y;
}
wehicle:
:
~wehicle()
{
}
voidwehicle:
:
listinf()
{
cout<<"wheels:
"<cout<<"weight:
"<}
classcar:
publicwehicle
{
public:
car(intx,doubley,intz);
voidlistcar();
private:
intpassage_load;
};
car:
:
car(intx,doubley,intz):
wehicle(x,y)
{
passage_load=z;
}
voidcar:
:
listcar()
{
cout<<"carwheels:
"<cout<<"carweight:
"<cout<<"carpassages:
"<}
intmain(intargc,char**argv)
{
wehiclewhc(4,5.0);
whc.listinf();
carmycar(4,5.0,4);
mycar.listcar();
return0;
}
2.参考声明如下
#include
usingnamespacestd;
classbuilding
{
protected:
intfloors;
introoms;
intareas;
};
classhouse:
publicbuilding
{
protected:
intbedrooms;
intbathrooms;
};
classoffice:
publicbuilding
{
intfireextings;
inttels;
};
3.参考代码
#include
usingnamespacestd;
classsofa
{
public:
sofa(){};
~sofa(){};
voidwatchTV();
};
voidsofa:
:
watchTV()
{
cout<<"YoucanwatchTV!
"<}
classbed
{
public:
bed(){};
~bed(){};
voidsleep();
voidsetweight();
};
voidbed:
:
sleep()
{
cout<<"Youcansleep!
"<}
voidbed:
:
setweight()
{
cout<<"Youcansetweight!
"<}
classsofabed:
publicbed,publicsofa
{
public:
sofabed();
~sofabed(){};
voidfoldbed();
};
sofabed:
:
sofabed()
{
cout<<"Thisissofabed!
"<}
voidsofabed:
:
foldbed()
{
cout<<"Youcanfoldbed!
"<}
intmain()
{
sofabedthisbed;
thisbed.setweight();
thisbed.sleep();
thisbed.foldbed();
thisbed.watchTV();
return0;
}
第9章多态性与虚函数
一、选择题
CCCCC
二、程序设计题
1.参考代码
#include
usingnamespacestd;
classCSHARP//父类
{
publ