C++ 习题册参考答案1.docx

上传人:b****2 文档编号:18509630 上传时间:2023-08-19 格式:DOCX 页数:71 大小:45.90KB
下载 相关 举报
C++ 习题册参考答案1.docx_第1页
第1页 / 共71页
C++ 习题册参考答案1.docx_第2页
第2页 / 共71页
C++ 习题册参考答案1.docx_第3页
第3页 / 共71页
C++ 习题册参考答案1.docx_第4页
第4页 / 共71页
C++ 习题册参考答案1.docx_第5页
第5页 / 共71页
C++ 习题册参考答案1.docx_第6页
第6页 / 共71页
C++ 习题册参考答案1.docx_第7页
第7页 / 共71页
C++ 习题册参考答案1.docx_第8页
第8页 / 共71页
C++ 习题册参考答案1.docx_第9页
第9页 / 共71页
C++ 习题册参考答案1.docx_第10页
第10页 / 共71页
C++ 习题册参考答案1.docx_第11页
第11页 / 共71页
C++ 习题册参考答案1.docx_第12页
第12页 / 共71页
C++ 习题册参考答案1.docx_第13页
第13页 / 共71页
C++ 习题册参考答案1.docx_第14页
第14页 / 共71页
C++ 习题册参考答案1.docx_第15页
第15页 / 共71页
C++ 习题册参考答案1.docx_第16页
第16页 / 共71页
C++ 习题册参考答案1.docx_第17页
第17页 / 共71页
C++ 习题册参考答案1.docx_第18页
第18页 / 共71页
C++ 习题册参考答案1.docx_第19页
第19页 / 共71页
C++ 习题册参考答案1.docx_第20页
第20页 / 共71页
亲,该文档总共71页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++ 习题册参考答案1.docx

《C++ 习题册参考答案1.docx》由会员分享,可在线阅读,更多相关《C++ 习题册参考答案1.docx(71页珍藏版)》请在冰点文库上搜索。

C++ 习题册参考答案1.docx

C++习题册参考答案1

习题一

1.请比较高级程序设计语言、低级程序设计语言各有什么优缺点。

答:

低级语言与计算机硬件联系紧密,涉及到许多计算机底层操作的细节,要求程序员详细说明由计算机执行的每一步操作,这样的特性决定了使用低级语言是很繁琐和易错的;低级语言指令会因为硬件型号不同而有很大差异,使得用其编写的程序不具有可移植性。

高级语言不涉及计算机底层的硬件,它提供较高层次的抽象,使用高级语言,编程者可以远离机器细节;高级语言不是面向机器的,而是面向问题的,这样更加接近编程者习惯的思维;高级语言编写的程序具有一定的可移植性。

2.请同学们课后查阅有关文献资料,叙述什么是软件危机?

答:

软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重的问题。

概括地讲,软件危机包含下述两方面的问题:

如何开发软件以满足对软件日益增长的需求;如何维护数量不断膨胀的现有软件。

3.请总结C++语言都有哪些特点?

答:

习题二

一、仔细阅读下面的程序代码,分析其中有无错误

1.答:

缺少#include

cout<<"Thisisastring"后加;

1.voidmain()

 {

  cout<<"Thisisastring"

 }

2.答:

缺少x变量的定义

cout<<"p=<

cout<<"p="<

2. #include

 voidmain()

 {

  cin>>x;

  intp=x*x;

  cout<<"p=<

 }

3.答:

j变量没有初始化

Cout使用<<而不是>>

3. #include

 voidmain()

 {

   inti,j;

   i=5;

   intk=i+j;

cout>>"i+j=">>k>>"\n";

 }

二、阅读下列各个程序段,若无错误则写出运行结果

1.运行结果为:

98

1.#include

 voidmain()

 {

  inta;

  charch;

  ch='a';

  ch++;

  a=ch;

  cout<

 }

2.运行结果为:

10,-5.2

2. 

#include

voidmain()

{

inta=10;

floatb=-5.2;

cout<

}

3.运行结果为:

97,a

3. 

#include

voidmain()

{

inta=97;

charch=a;

cout<

}

4.运行结果为:

3.1416

65

65

00065

4. 

#include

#include

voidmain()

{

doublea=3.1415926;

intb=65;

cout<

cout<

cout<

}

三、简答题

1.已知x=2,y=3,z=4,计算下列表达式的值:

(1)A1=x+y+1/2+z

(2)A2=x+(y+2)/(2-z)

答:

A1=2+3+0+4=5+0+4=9

A2=2+(3+2)/(2-4)=2+5/-2=2-2=0

2.计算下列表达式的值:

(1)1/2+5/2+7/6

(2)1/2.0+5/2.0+3.0

(3)1/2+5./2+2

(4)(unsignedchar)500+200

(5)(unsignedchar)(500+200)

(6)(unsignedint)(unsingnedchar)750

答:

(1)为3;

(2)为6.0;(3)为4.5;(4)为644;(5)为188;(6)为238;

3.已知inta=5,b=0;下面表达式运算后a和b的值是多少?

(1)!

a&&a+b&&a++

(2)!

a||a++||b++

答:

(1)a=5,b=0

(2)a=6,b=0

4.若有下面变量声明语句:

inta=4,b;

指出下面表达式运算后a和b的结果?

b+=b=++a;

答:

、编程题

1.从键盘输入两个整数a、b,输出其中较大的那个数。

答:

#include

 voidmain()

 {

  inta,b;

  intmax;

  cout<<"pleaseinputaandb:

";

  cin>>a>>b;

  max=(a>b)?

a:

b;

  cout<<"a和b其中最大的是:

"<

 }

2.编写一段程序,使用sizeof()运算符测试你所用机器的int,float,double,long,char等类型变量存储所需的字节数。

答:

#include

 voidmain()

 {

  cout<<"Variablesoftypeintuse"<

  cout<<"Variablesoftypefloatuse"<

  cout<<"Variablesoftypedoubleuse"<

  cout<<"Variablesoftypelonguse"<

  cout<<"Variablesoftypecharuse"<

 }

3.输入华氏温度F,输出摄氏温度C。

它们的换算公式为:

C=5(F-32)/9。

答:

参考程序如下:

 #include

 voidmain()

 {

  doubleF,C;

  /*输入部分*/

  cout<<"请输入华氏温度:

";

  cin>>F;

  /*计算部分*/

  C=5.0*(F-32.0)/9.0;

  /*输出部分*/

  cout<<"相应的摄氏温度为:

"<

 }

4.输入球半径r,输出球的表面积及体积。

答:

#include

 constdoublePI=3.1415;

 voidmain()

 {

  doubleR,C,S,V;

  /*输入部分*/

  cout<<"请输入半径:

";

  cin>>R;

  /*计算部分*/

  C=2.0*PI*R;

  S=PI*R*R;

  V=4.0*S*R/3.0;

  /*输出部分*/

  cout<<"圆周长为:

"<

  cout<<"圆面积为:

"<

  cout<<"圆球体积为:

"<

 }

习题三

一、选择题

1.下列语句哪一项不能正确将x,y的值进行交换:

(D)

A.x=x+y,y=x-y,x=x-y;

B.t=x,x=y;y=t;

C.t=y,y=x,x=t;

D.x=t,t=y,y=x

2.在if后面号中表示a不等于0的时候值为"真",正确的表达式为:

(D)

A.a<>0

B.!

a

C.a=0

D.a

3.循环语句for(inti=0,j=10;i=j=10;i++,j--);的循环次数是:

(A)

A.无限次

B.语法错误,不能执行

C.10

D.1

4.以下哪个语句不是循环语句:

(D)

A.while语句

B.do-while语句

C.for语句

D.if-else语句

5.下列do-while循环的循环次数是:

(D)

inti=5;

do

{

cout<

i--;

}while(i!

=0)

A.0

B.2

C.5

D.无限次

6.下面for循环的循环次数是:

(B)

  for(inti=0,x=0;!

x&&i<=5;i++);

A.5

B.6

C.1

D.无限次

二、编程题

1.从键盘输入三个整数a、b、c,输出其中的最大数。

答:

#include

voidmain()

{

inta,b,c;

intmax;

cin>>a>>b>>c;

max=a;

if(b>max)

max=b;

elseif(c>max)

max=c;

cout<

}

2.请同学们课后查阅有关资料,了解什么是素数。

然后求出2-100之间的所有素数,并以10个数为一行输出。

答:

#include

voidmain()

{

inti,j;

for(i=2;i<=100;i++)

{

for(j=2;j

{

if(i%j==0)

break;

}

if(j==i)

{

cout<

}

}

}

3.输入一行字符,分别统计其中英文字母、数字及其他符号的个数。

答:

#include

#include

voidmain()

{charc;

intletters=0,digit=0,other=0;

cout<<"pleaseinputachar:

\n";

while((c=getchar())!

='\n')

{if(c>='a'&&c<='z'||c>='A'&&c<='z')

letters++;

elseif(c>='0'&&c<='9')

digit++;

else

other++;

}

cout<<"字母数:

"<

<<"数字数:

"<

<<"其他字符数:

"<

}

4.求满足下式的最小n值,其中的limit可用户从键盘输入。

答:

#include

voidmain()

{

intlimit;

doublesum=0;

cin>>limit;

intn=0;

do

{n++;

sum+=1.0/n;

}while(sum<=limit);

cout<<"sum="<

<<"n="<

}

5.菲波那切数列的特征是:

前两项为1,以后每一项为前两项之和。

编程输出菲波那切数列的前40项。

答:

#include

voidmain()

{

inta=1,b=1,c;

cout<

for(inti=3;i<=40;i++)

{

c=a+b;

cout<

a=b;b=c;

if(i%5==0)

cout<

}

}

6.输入学生百分制成绩,输出五分制成绩,即“优秀”、“良好”、“中等”、“及格”与“不及格”。

答:

#include

voidmain()

{

inta;

cin>>a;

switch(a/10)

{

case10:

case9:

cout<<"优秀";break;

case8:

cout<<"良好";break;

case7:

cout<<"中等";break;

case6:

cout<<"及格";break;

case5:

case4:

case3:

case2:

case1:

case0:

cout<<"不及格";break;

default:

cout<<"输入错误1";break;

}

}

7.编程求解下列问题:

(1)所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。

例如,153是水仙花数,因为153=13+53+33。

请输出1000以内的所有“水仙花数”。

答:

#include

voidmain()

{

for(inti=1;i<=9;i++)

for(intj=0;j<=9;j++)

for(intk=0;k<=9;k++)

if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)

cout<<(100*i+10*j+k)<<"是水仙花数.\n";

}

(2)所谓“完数”,是指一个数恰好等于它的因子之和。

例如6是完数,因为6=1+2+3。

请输出求10000之内的所有“完数”。

答:

#include

voidmain()

{

for(inti=1;i<10000;i++)

{

intsum=0;

for(intj=1;j<=i/2;j++)

if(i%j==0)

sum=sum+j;

if(sum==i)

cout<

}

}

8.应用题:

(1)猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下的一半零一个。

到第10天早上想再吃时,只剩一个桃子了。

编程求第一天共摘下多少桃子。

答:

#include

voidmain()

{

intpeachs=1;

for(inti=1;i<10;i++)

peachs=(peachs+1)*2;

cout<<"第一天共摘下"<

}

 

(2)若一头小母牛,从出生起第四个年头开始,每年生一头母牛。

按此规律,第n年时有多少头母牛?

(n由键盘输入)。

答:

#include

voidmain()

{

intn;

longa=1,b=1,c=1,temp;

cout<<"pleaseinputavalue:

\n";

cin>>n;

for(inti=4;i<=n;i++)

{

temp=a+c;

a=b;

b=c;

c=temp;

}

cout<

}

习题四

一、仔细阅读下列程序,若无错误请给出运行结果

1.

1.运行结果为:

25

#include

intadd(inta,intb);

voidmain()

{

externintx,y;

cout<

}

intx=20,y=5;

intadd(inta,intb)

{

ints=a+b;

returns;

}

2.

2.运行结果为:

6,11

6,12

#include

voidfn(intn)

{

intx=5;

staticinty=10;

if(n>0)

{

++x;

++y;

cout<

}

}

voidmain()

{

intm=1;

fn(m);

fn(m);

}

 

3.

3.运行结果为:

随机数

分析这道题首先要弄清楚两点:

1:

未赋初值的变量,它的值是什么。

2:

形参变量的值和实参变量的值的关系。

本题在main函数中定义了一个整型变量c,系统为其分配了一个存储单元。

此单元中的原有信息并未被清除,这时变量c的值是不确定的"随机数"。

调用函数fun时,将实参常量2和3分别传给了形参a和b,实参变量c中的随机值传给了形参变量c。

通过函数fun的运算,形参变量c中存放了a*b的运算结果,这一结果并不能反馈给实参变量c。

因此在主函数中输出的c值是一个不确定的值。

#include"iostream.h"

fun(inta,intb,intc)

{

c=a*b;

}

voidmain()

{

intc;

fun(2,3,c);

cout<<"c="<

}

4.#include"iostream.h"

voidoutputab(inta,intb)

{

cout<<"a="<

a=100;

4.运行结果为:

a=300b=400

 a=300b=400

b=200;

}

voidmain()

{

inta=300;

intb=400;

outputab(a,b);

cout<<"a="<

}

二、使用函数结构,编程求解下述各题

1.编写递归函数,求解:

sum(n)=1+2+3+…+n。

答:

intsum(intn)

 {

  if(n==1)

   return1;

  else

   returnn+sum(n-1);

 }

2.输入正整数num,求

答:

#include"iostream.h"

 intfn(inta);

 voidmain()

 {

  ints=0;

  cout<<"pleaseputinanum:

";

  intnum;

  cin>>num;

  for(inti=1;i<=num;i++)s+=fn(i);

   cout<<"1!

+2!

+...+num!

="<

 }

 intfn(inta)

 {

  staticintb=1;

  b*=a;

  returnb;

 }

///或者使用如下方法

#include"iostream.h"

intfn(inta);

voidmain()

{

ints=0;

cout<<"pleaseputinanum:

";

intnum;

cin>>num;

for(inti=1;i<=num;i++)s+=fn(i);

cout<<"1!

+2!

+...+num!

="<

}

intfn(inta)

{

if(a==1)

return1;

elsereturna*fn(a-1);

}

3.求组合数:

答:

#include"iostream.h"

 //定义facto函数,在这里facto函数定义在main()函数之前,

 //如果定义在main()函数之后,

 //main()函数在调用facto函数之前需要先对facto函数进行声明

 longfacto(intx)

 {

/*或者函数体换成此段注释中的代码

if(x==1)

return1;

elsereturnx*facto(x-1);

*/

  longy;

  for(y=1;x>0;--x)

   y*=x;

   returny;

 }

 voidmain()

 {

  intm,n,temp;

  doublecmn;

  cout<<"inputm:

"<

  cin>>m;

  cout<<"inputn:

"<

  cin>>n;

  if(m

  {

   temp=n;

   n=m;

   m=temp;

  }

  cmn=facto(m)/(facto(n)*facto(m-n));

  //三次调用facto函数

  cout<<"thecombinationis"<

 }

4.编写递归函数,求解:

若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少头母牛?

答:

#include

longcattle(intn);

voidmain()

{

intn;

cout<<"pleaseinputanumber:

\n";

cin>>n;

cout<

}

longcattle(intn)

{

if(n<=0)

return0;

if(n<=3)

return1;

returncattle(n-1)+cattle(n-3);

}

5.已知银行的存款利息如下:

月息利率=0.63%期限一年

    0.66%期限二年

0.69%期限三年

0.75%期限五年

0.84%期限八年

某人有2000元钱,要存20年,请你帮助计算一下,怎样存才能使20年后得到的本利合计最多(假定银行对定期存款过期部分不付利息)?

答:

为了得到最多的利息,存入银行的钱应该在到期时马上取出来,然后立刻将原来的本金和利息加起来再作为新的本金存入银行,这样本利不断的滚动直到满20年为止。

由于存款的利率不同,所以有很多不同的存款方法(年限)存20年得到的利息也是不一样的。

分析题意:

设2000元存20年,其中一年期存了i1次,二年期存了i2次,三年期存了i3次,五年期存了i5次,八年期存了i8次,则到期时存款人应该得到的本利合计应该为:

  2000*(1+rate1)*(1+rate2)*(1+rate3)*(1+rate5)*(1+rate8)其中rateN为对应存款年限的利率。

根据题义还可以得到以下的限制条件:

  0<=i8<=2

  0<=i5<=(20-8*i8)/5

  0<=i3<=(20-8*i8-5*i5)/3

  0<=i2<=(20-8*i8-5*i5-3*i3)/2

  0<=i1<=20-8*i8-5*i5-3*i3-2*i2

  可以采用穷举法穷举所有的i8、i5、i3、i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2