第05章习题解答.docx

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

第05章习题解答.docx

《第05章习题解答.docx》由会员分享,可在线阅读,更多相关《第05章习题解答.docx(28页珍藏版)》请在冰点文库上搜索。

第05章习题解答.docx

第05章习题解答

5.10习题

5.10.1概念题

1.试问下列程序的输出结果如何?

#include

usingnamespacestd;

intmain()

{

inti=2,j=4,k=6;

cout<

{

inti=3,j=5;

k=i*j;

cout<

}

cout<

return0;

}

答:

输出结果如下:

246

3515

2415

2.试问下列程序的输出结果如何?

#include

usingnamespacestd;

intmain()

{

intn=2;

for(intt=0,i=1;i<=n;i++){

intj=t+i;

cout<<"t="<

}

cout<<"t="<

return0;

}

答:

输出结果如下:

t=0j=1

t=0j=2

t=0i=3

3.试问下列程序的输出结果如何?

#include

usingnamespacestd;

inta=3,b=4,c;

intmain()

{

inta=6,b=9,c;

c=:

:

a+:

:

b;

:

:

c=a+b;

cout<

cout<<:

:

a<<'\t'<<:

:

b<<'\t'<<:

:

c<

return0;

}

答:

输出结果如下:

697

3415

4.试问下列程序的输出结果如何?

#include

usingnamespacestd;

inta=5,b=8;

intmax(inta,intb)

{

return(a>b?

a:

b);

}

intmain()

{

inta=9;

cout<

return0;

}

答:

输出结果如下:

9

5.试问下列程序的输出结果如何?

#include

usingnamespacestd;

intf(intx);

intmain()

{

inta=4;

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

cout<

cout<

return0;

}

intf(intx)

{

inty=0;

staticz=3;

y++;

z++;

return(x+y+z);

}

答:

输出结果如下:

9101112

6.试设法将例5-4及例5-6程序中的全局变量k改为合适的局部静态变量。

使能获得正确的运行结果。

答:

例5-4程序修改为:

#include

#include

usingnamespacestd;

voidlok(int,int);

intjdg(int);

voidout(int);

intmain()

{

lok(10,50);

return0;

}

voidlok(inta,intb){

for(inti=a;i<=b;i++)

if(jdg(i))out(i);

}

intjdg(intn){

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

if(n%i==0)return1;

return0;

}

voidout(intn){

staticintk;

cout<

k++;

if(k%10==0)cout<

}

例5-6程序修改为:

#include

#include

usingnamespacestd;

intin();

voidcyl(int);

longf(int,int);

voidout(int);

intmain()

{

inta;

a=in();

cyl(a);

return0;

}

intin(){

intt;

cout<<"请输入一整数。

";

cin>>t;

returnt;

}

voidcyl(intx){

for(intn=1;n<=20;n++)

out(f(x,n));

}

longf(intx,intn){

if(n==1)return1;

elseif(n==2)returnx;

elsereturnf(x,n-1)+x*f(x,n-2);

}

voidout(intx){

staticintk;

cout<

k++;

if(k%5==0)cout<

}

7.主调函数中声明了下列变量:

inta=2;

charb=‘Q’;

char*p=“System”

现在想通过别名传递调用函数fun来对这三个变量进行访问操作。

试写出实参表、形参表和被调函数中访问的对象。

列出表格如表5-4那样。

答:

列出表格如表5-9所示。

表5-9参数别名传递的函数调用

主调函数中待访问变量

inta

charb

char*p

实参表

(a,b,p)

形参表

(int&x,char&y,char*&z)

被调函数中访问的对象

x

y

z

访问别名x、y、z于被调函数内,效达实名a、b、p于主调函数中

8.试分析下列程序,输出什么结果?

#include

usingnamespacestd;

voidfun(int,int&,int&,int&);

intmain()

{

inttm=12345;//A

inthr=3,mt=10,sd=20;

cout<<"原来时刻是"<

"<

fun(tm,hr,mt,sd);//B

cout<<"经"<

cout<<"现在时刻是"<

"<

return0;

}

voidfun(intt,int&h,int&m,int&s)//D

{

t=t+h*3600+m*60+s;//E

h=(t/3600)%24;

m=(t%3600)/60;

s=t%60;

}

答:

程序运行结果为:

原来时刻是:

3点10分20秒。

经12345秒后,

现在时刻是:

6点36分5秒。

9.上题程序中,函数fun的第一个形参为何不用别名?

如果也用别名会有什么影响?

答:

从程序B行可看出,主函数是用tm作为第一个实参通过值传递给形参t,调用fun函数的。

在fun函数体内E行对形参t进行操作,改变了t值。

如果这个形参是用别名的话,则这种改变的效果将直达主调函数中的tm,使tm作同样改变,致使tm不再是12345了。

这将使C行的输出中tm不正确。

因此fun函数的第一个形参没用别名。

10.主调函数中声明了下列变量:

inta=2;

charb=‘Q’;

char*p=“System”

现在想通过地址传递调用函数fun来对这三个变量进行访问操作。

试写出实参表、形参表和被调函数中访问的对象。

列出表格如表5-5和表5-6那样。

答:

列出表格如表5-10所示。

表5-10参数地址传递的函数调用

主调函数中待访问变量

inta

charb

char*p

实参表

(&a,&b,&p)

形参表

(int*x,char*y,char**z)

被调函数中访问的对象

*x

*y

*z

访问指针所指*x、*y、*z于被调函数内,效达所指变量a、b、p于主调函数中

11.主调函数中声明了下列变量:

inta=2;

charb=‘Q’;

char*p=“System”

现在想通过值传递调用函数fun。

试写出实参表、形参表和被调函数中访问的对象。

列出表格如表5-7那样。

试问这时被调函数在函数体内的操作对主调函数中的变量有无影响?

答:

列表格如表5-11所示。

被调函数在函数体内的操作对主调函数中的变量毫无影响。

表5-11参数值传递的函数调用

主调函数中的变量

inta

charb

char*p

实参表

(a,b,p)

形参表

(intx,chary,char*z)

被调函数中访问的变量

x

y

z

访问变量x、y、z于被调函数内,对主调函数中变量a、b、p毫无影响.

12.试问下列程序中,函数的返回值是何类型?

是指向哪个变量的指针?

程序的输出结果如何?

#include

usingnamespacestd;

int*f(intx)

{

staticintz=3;

z+=x;

return&z;

}

intmain()

{

inta=4;

for(inti=0;i<4;i++)cout<<*f(a)<<’\t’;

*f(a)=1000;

cout<<*f(a)<

return0;

}

答:

函数的返回值是指向静态变量z的int型指针。

程序输出结果为:

71115191004

13.试将上题程序中函数返回值改为静态变量z的别名。

程序中其它相关语句也作相应改变,使得输出结果与上题完全一样?

答:

程序修改后如下:

#include

usingnamespacestd;

int&f(intx){

staticintz=3;

z+=x;

returnz;

}

intmain()

{

inta=4;

for(inti=0;i<4;i++)cout<

f(a)=1000;

cout<

return0;

}

14.试将例5-6中的程序改为多文件形式。

上机将各文件相继加入到同一个工程中,进行编译通过。

然后进行链接,运行。

答:

程序如下:

//头文件,h514.h

#include

#include

usingnamespacestd;

intin();

voidcyl(int);

longf(int,int);

voidout(int);

externintk;

//函数定义,f514.cpp

#include"h514.h"

intin(){

intt;

cout<<"请输入一整数。

";

cin>>t;

returnt;

}

voidcyl(intxb){

for(intnb=1;nb<=20;nb++)

out(f(xb,nb));

}

longf(intx,intn){

if(n==1)return1;

elseif(n==2)returnx;

elsereturnf(x,n-1)+x*f(x,n-2);

}

voidout(intxc){

cout<

k++;

if(k%5==0)cout<

}

//主函数,m514.cpp

#include"h514.h"

intk=0;

intmain()

{

intxa;

xa=in();

cyl(xa);

return0;

}

5.10.2程序设计题

1.试设计一程序,输入三个不等的整数,求出其中的最大数,输出之。

充分细分各项任务,由多个函数分担实现。

#include

usingnamespacestd;

voidin(int&,int&,int&);

intmx(int,int,int);

voidout(int);

intmain()

{

inta,b,c,max;

in(a,b,c);

max=mx(a,b,c);

out(max);

return0;

}

voidin(int&x,int&y,int&z){

cout<<"请输入三个不等的整数。

"<

cin>>x>>y>>z;

}

intmx(intx,inty,intz){

return(x>=y?

x:

y)

z:

(x>=y?

x:

y);

}

voidout(intm){

cout<<"三数中最大数为:

"<

}

2.设计程序,输入m值和r值,按下列公式计算组合数C(m,r):

C(m,r)=m!

/(r!

×(m-r)!

其中m、r为正整数,且m>r。

分别求出C(3,2)、C(8,4)、C(5,3)的组合数。

充分细分各项任务,由多个函数分担实现。

#include

usingnamespacestd;

voidin(int&,int&);

intjecn(int);

intC(int,int);

voidout(int,int);

intmain()

{

inta,b;

in(a,b);

out(a,b);

return0;

}

voidin(int&x,int&y){

cout<<"请依次输入大小两整数。

"<

cin>>x>>y;

}

intjecn(intn){

intm=1;

for(inti=1;i<=n;i++)m*=i;

returnm;

}

intC(intm,intr){

return(jecn(m)/(jecn(r)*jecn(m-r)));

}

voidout(intu,intv){

cout<<"C("<

}

程序运行结果为:

请依次输入大小两整数。

32↙

C(3,2)=3

请依次输入大小两整数。

84↙

C(8,4)=70

请依次输入大小两整数。

53↙

C(5,3)=10

3.试设计程序,用函数的递归调用求阶乘5!

和8!

#include

usingnamespacestd;

intjecn(intn){

if(n==1)return1;

elsereturnn*jecn(n-1);

}

intmain()

{

cout<<"阶乘5!

的值为:

"<

cout<<"阶乘8!

的值为:

"<

return0;

}

运行结果为:

阶乘5!

的值为:

120

阶乘8!

的值为:

40320

4.试设计程序,输入一整数n,用递归函数实现求Fibonacci数列的前n项。

#include

#include

usingnamespacestd;

intfbnc(intn){

if(n==1||n==2)return1;

elsereturnfbnc(n-1)+fbnc(n-2);

}

intmain()

{

for(intn=1;n<=20;n++){

cout<

if(n%10==0)cout<

}

return0;

}

5.试修改例5-7程序使得运行结果改为正序输出。

#include

usingnamespacestd;

intin();

voidfun(int);

intmain()

{

inta;

a=in();

fun(a);

cout<

return0;

}

intin()

{

intn;

cout<<"请输入一个整数。

"<

cin>>n;

returnn;

}

voidfun(intx)

{

if(x){

fun(x/8);

cout<

}

}

6.试设计一程序,输入一个十进制整数,能正序输出其十六进制数。

用递归函数求解。

#include

usingnamespacestd;

intin();

voidfun(int);

intmain()

{

inta;

a=in();

fun(a);

cout<

return0;

}

intin()

{

intn;

cout<<"请输入一个整数。

"<

cin>>n;

returnn;

}

voidfun(intx)

{

if(x){

fun(x/16);

cout<

}

}

7.试设计程序。

输入一整数x(要求x>1)和一整数n,分别用递归函数和非递归函数来求出Hennite多项式的前n项的值。

当x>1时,Hennite多项式定义为:

用递归函数程序如下:

#include

#include

usingnamespacestd;

intHennite(intx,intn){

if(n==0)return1;

elseif(n==1)return2*x;

elsereturn2*x*Hennite(x,n-1)-2*(n-1)*Hennite(x,n-2);

}

intmain()

{

intx,n;

cout<<"请依次输入x和n两整数。

"<

cin>>x>>n;

for(inti=0;i

cout<

if((i+1)%5==0)cout<

}

return0;

}

用非递归函数程序如下:

#include

#include

usingnamespacestd;

intmain()

{

intx,n;

cout<<"请输入x和n两整数。

"<

cin>>x>>n;

intc=1,b=2*x,a;

a=2*x*b-2*(2-1)*c;

cout<

<

<

for(inti=3;i

c=b;b=a;a=2*x*b-2*(i-1)*c;

cout<

if((i+1)%5==0)cout<

}

return0;

}

8.试设计一程序,主函数中声明两整数a和b,初值分别为66和88。

用a和b通过别名传递调用函数swap将a和b的值相互交换。

主函数中输出调用前后a和b的值。

#include

usingnamespacestd;

voidswap(int&x,int&y){

intt;

t=x;x=y;y=t;

}

intmain()

{

inta=66,b=88;

cout<<"swap函数调用前:

"<<"a="<

<<"b="<

swap(a,b);

cout<<"swap函数调用后:

"<<"a="<

<<"b="<

return0;

}

9.试设计一程序,输入一个实数,由函数将其分解为整数部分和小数部分。

由主函数将这两部分输出之。

(用参数的别名传递)

#include

usingnamespacestd;

voidfun(doublex,double&y,int&z){

z=x;

y=x-z;

}

intmain()

{

doublea,b;

intc;

cout<<"请输入一个实数。

"<

cin>>a;

fun(a,b,c);

cout<<"实数的小数部分为:

"<

cout<<"实数的整数部分为:

"<

return0;

}

10.某同学家原快餐份数为0。

想吃快餐,向快餐店订送快餐5份。

试设计程序,由函数实施送餐;由主函数输出送餐前后该同学家的快餐份数。

(用参数的地址传递)

#include

usingnamespacestd;

voidfun(int*x){

*x+=5;

}

intmain()

{

inta=0;

cout<<"原快餐数为:

"<

fun(&a);

cout<<"现快餐数为:

"<

return0;

}

11.问从18点25分32秒的时刻开始,经过了123456789秒以后的时刻是几点几分几秒?

试设计程序,由函数进行计算,由主函数输出结果。

(用参数的地址传递)

#include

usingnamespacestd;

voidfun(int,int*,int*,int*);

intmain()

{

inttm=123456789;

inthr=18,mt=25,sd=32;

cout<<"原来时刻是"<

"<

fun(tm,&hr,&mt,&sd);

cout<<"经"<

cout<<"现在时刻是"<

"<

return0;

}

voidfun(intt,int*h,int*m,int*s){

t=t+*h*3600+*m*60+*s;

*h=(t/3600)%24;

*m=(t%3600)/60;

*s=t%60;

}

12.试设计一程序,输入一个实数,由函数将其分解为整数部分和小数部分。

由主函数将这两部分输出之。

(用参数的地址传递)

#include

usingnamespacestd;

voidfun(

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

当前位置:首页 > 求职职场 > 职业规划

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

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