第5章 函数与宏思考与练习题答案.docx

上传人:b****2 文档编号:589738 上传时间:2023-04-29 格式:DOCX 页数:16 大小:26.39KB
下载 相关 举报
第5章 函数与宏思考与练习题答案.docx_第1页
第1页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第2页
第2页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第3页
第3页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第4页
第4页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第5页
第5页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第6页
第6页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第7页
第7页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第8页
第8页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第9页
第9页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第10页
第10页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第11页
第11页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第12页
第12页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第13页
第13页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第14页
第14页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第15页
第15页 / 共16页
第5章 函数与宏思考与练习题答案.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第5章 函数与宏思考与练习题答案.docx

《第5章 函数与宏思考与练习题答案.docx》由会员分享,可在线阅读,更多相关《第5章 函数与宏思考与练习题答案.docx(16页珍藏版)》请在冰点文库上搜索。

第5章 函数与宏思考与练习题答案.docx

第5章函数与宏思考与练习题答案

第5章函数与宏

1、请给出函数概念的基本描述。

答:

函数就是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值。

2、什么叫函数原型?

答:

函数原型是指由函数定义中抽取出来的能代表函数应用特征的部分,包括函数的数据类型、函数名称、形式参数说明。

3、什么叫函数的实参?

什么叫函数的形参?

答:

实参是在调用函数过程中传递给被调用函数的参数;形参是被调用函数接受调用函数传递过来的数据的参数。

4、请说出函数参数为一般变量的复制传递方式、地址传递方式和引用方式的异同点。

答:

复制传递方式是实参的数据拷贝给了形参变量,实参和形参是具有相同数据类型但存储空间是不同的两组空间。

在复制传递方式下,被调用函数里对形参的操作不能改变实参的内容。

地址传递方式和复制传递方式正好相反,用函数的参数本身传给被调用函数。

被调用函数中对形参的操作将直接改变实参的值。

调用函数将实参的地址传送给被调用函数,被调用函数对该地址的目标操作即对实参本身的操作。

按地址传递,实参为变量的地址,而形参为同类型的指针。

引用方式和地址传递方式的效果一样,但引用更直接、更方便。

按引用传递,实参为变量,形参为同类型的引用。

采用引用方式实参和形参使用的是相同的内存空间,只是名称不同而已。

5、数组在函数间传递形式有哪些?

并给以比较和解释。

答:

数组在函数间的传递形式有复制传递方式、地址传递方式、引用方式和全局数组传递方式。

函数与函数之间数组的复制传递方式是调用函数将实参数组传递给被调用函数形参,形参接收是实参的地址。

函数与函数之间数组的地址传递方式是将调用函数中的实参数组的起始地址传递给被调用函数的指针变量形参。

被调用函数中对形参地址的目标操作,相当于对实参本身的操作,将直接改变实参数组的值。

地址传递方式,实参应该为数组的指针,而形参应为同类型的指针变量。

另外,数组的地址传递方式不仅要把实参数组的指针作为参数传递给函数,同时还需要传递数组的长度。

与引用方式不同的是被调用函数的形参应声明为数组同类型的指针变量。

函数与函数之间数组的引用传递方式需将被调用函数的形参说明为数组的引用形式。

在被调用函数中,对形参进行操作就是对实参数组的直接操作。

数组的引用方式和地址传递方式的作用效果基本一样,但引用更直接、更方便。

按引用方式传递数组,形参为实参同类型的数组引用。

但引用数组名不是指针变量,不能作为左值。

6、什么叫函数指针?

什么指针函数?

答:

函数指针是一个函数执行代码的起始地址。

指针函数是指一个函数的返回值为地址量的函数。

7、什么叫内联函数?

答:

内联函数是类声明体里定义的函数或在类的实现部分定义的、其前用inline修饰的函数;它将简单的函数(其内不能有循环语句和开关语句)"内嵌"到调用他的程序代码中,这样做的目的是为了节省了调用函数的开销。

8、什么叫函数重载?

答:

函数重载是指使用一个函数名称定义了多个完成不同功能的函数,这些函数的输入参数类型或个数不一样,相应的函数类型也有可能改变。

9、什么叫预编译语句?

答:

在C++程序的源代码中可以包括各种编译用的命令语句,这些语句都称为预编译语句。

10、什么叫宏?

谈谈带参数宏与内联函数之间的异同点.

答:

宏是指定义一个标识符来代替一个字符序列。

内联函数和宏都是在程序出现的地方展开,是在调用该函数的程序处或应用宏处将它展开。

但内联函数可以多行的程序段,而宏通常是单行代码段。

11、指出下列函数说明语句有哪些错误并说出原因。

(1)char*volume(intheight,width,charbackground);

答:

函数的参数部分说明错误;width参数没有指出数据类型。

(2)doublework(double&matrix[10]);

答:

参数部分引用数组的说明形式错误;不符合引用数组的说明形式。

(3)voiddisplay(intarr[][],intsize);

答:

参数二维数组的说明不对;右下标大小不能为空。

(4)voidsum(int(&a)[]);

答:

不符合引用数组的说明形式;大小不能缺省。

(5)intfun(doublea,intb=0,intc);

答:

缺省值位置说明错误;指定缺省值必须从右向左给出,不能跳跃指定缺省值。

(6)doubleMatrix(double*m[]);

答:

指针变量数组的说明形式不对;大小不能缺省。

(7)char*fetch(inta=24,intb,charc=0);

答:

缺省值位置说明错误;指定缺省值必须从右向左给出,不能跳跃指定缺省值。

(8)voidlength(int&a[2]);

答:

引用数组说明错误;不符合引用数组的说明形式。

12、什么叫递归函数?

简述其执行过程。

答:

递归函数是指一个函数的函数体中直接调用或间接调用了该函数自身的函数。

递归函数调用的执行过程分为两个阶段:

(1)递推阶段:

从原问题出发,按递归公式递推,从未知到已知,最终达到递归终止条件。

(2)回归阶段:

按递归终止条件求出结果,逆向逐步代入递归公式,回归到原问题求解。

13、阅读下列程序并给出运行结果。

(1)#include

intfun(intx,inty)

{

returnx*y;

}

voidmain(void)

{

intk=5;

cout<

}

运行结果是:

10

(2)#include

#include

voidfun(inta,intb,double&s,double&t)

{

s=sqrt(a*a+b*b);

t=sqrt(a*a-b*b);

}

voidmain(void)

{

doublem,n;

fun(4,3,m,n);

cout<

}

运行结果是:

7.64575

(3)#include

intn=0;

int&fun(intx)//引用型函数

{

n-=x;returnn;

}

voidmain(void)

{

fun(100)+=10;

cout<<"n="<

}

输出结果是:

n=-90

(4)#include"stdio.h"

intd=0;

intfun(intp)

{

staticintg=10;g+=++d-p;printf("%d",g);

return(g);

}

voidmain(void)

{

intd=10;printf("%d\n",fun(fun(d)-fun

(2)));

}

运行结果是:

1,1,4,4

(5)#include"iostream.h"

intafox(intx,int&y,int*v,int*w)

{

*v=--x+y++;

*w=x-y;return(v);

}

voidmain(void)

{

inta=3,b=3,c=3,d=3;

afox(a,b,&c,&d);

cout<

}

运行结果是:

3,4,6,-1

14、已知三角形的三边,求三角形面积,将其编写成一个函数。

答:

#include

#include

doublearea(doublea,doubleb,doublec,doubles)//求三角行的面积

{

doublep;

p=sqrt(s*(s-a)*(s-b)*(s-c));

returnp;

}

voidmain()

{

doublex,y,z,q;

cout<<"请输入三角形三边的长度"<

cin>>x>>y>>z;//输入三边长度

if(!

(((x+y)>z)&&((x+z)>y)&&((y+z)>x)))//判断给出的三边能否构成三角形

cout<<"你输入的三边不能构成三角形"<

else

{

q=area(x,y,z,(x+y+z)/2);

cout<<"三角形面积是:

Area="<

}

}

15、编写函数求两个整型参数a和b的最小公倍数。

答:

#include

voidnum(intx,inty)

{

intarg[100];

intm=0,n=0,j=0;

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

arg[i]=0;

m=n=x>y?

x:

y;

for(;n<=(x*y);n++)

{

if((n%x==0)&&(n%y==0))

{

arg[j]=n;

j++;

}

}

for(intk=0;k

{intt=0;

if(arg[0]>arg[k])

{

t=arg[0];arg[0]=arg[k];arg[k]=t;

}

}

cout<<"这两个数的最小公倍数是:

"<

}

voidmain()

{

inta,b;

cout<<"请输入两个整数:

"<

cin>>a>>b;

num(a,b);

}

16、编写判断一个正整数是否为素数的函数。

答:

#include

#include

voidmain()

{

intm,i,z;boolq=false;

cout<<"请输入一个数:

";

cin>>m;

z=(int)sqrt(m);//求m的平方根

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

{

if(m%i==0)//数m是否能被小于m平方根的数整除

{

q=true;

break;

}

}

if(q)

cout<<"你输入的数不是素数!

"<

else

cout<<"你输入的数是素数!

"<

}

17、分析并指出下列函数或程序实现的功能。

(1)voidTrans(intx)

{

chara[10];

inti=0,rem;

do

{

rem=x%16;x=x/16;

if(rem<10)

a[i]=48+rem;//'0'字符的ASCII码为48

else

a[i]=65+rem;//'A'字符的ASCII码为65

i++;

}while(x!

=0);

while(i>0)

cout<

cout<

}

答:

实现的功能是:

将a[i]中的元素转换成十六进制。

(2)#include

doubleTest(intn)

{

doublesign=-1,s

(1);

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

{s+=sign/(i*i);sign*=-1;}

returns;

}

voidmain(void)

{

inta(7);cout<

}

实现的功能是:

求公式

(3)doubleCalculate(doublea,doubleb,charop)

{

switch(op)

{

case'+':

returna+b;

case'-':

returna-b;

case'*':

returna*b;

case'/':

if(b==0)

{

cout<<"dividedby0!

"<

return(-9999.999999);

}

else

returna/b;

default:

cout<<"operatorerror!

"<

return(-9999.999999);

}

}

答:

实现的功能是:

两个数的加减乘除运算。

(4)#include

#include

constN=10;

intToCompute(intx,inty)

{

intz;

cout<

cin>>z;

if(x+y==z)

return1;

else

return0;

}

voidmain(void)

{

inta,b,c=0;

srand(100);//初始化随机数序列

for(inti=0;i

{

a=rand()%20+1;//rand()函数产生0-32767之间的一个随机数

b=rand()%20+1;

c+=ToCompute(a,b);

}

cout<<"得分:

"<

}

答:

实现的功能是:

对20以内任意两个加发运算能力的测试。

18、编写一个函数,要求将一个double型的一维数组和数组长度作为参数,并返回该数组中的正数之和。

答:

#include

doubleTestArray(doubleb[],intSize);

voidmain()

{

intn=0;

doublea[100],r=0;

cout<<"请输入数组元素的个数(n小于100)n=";//输入元素的个数

in>>n;

for(inti=0;i

{

cout<<"a["<

cin>>a[i];

}

r=TestArray(a,5);//调用函数TestArray,将返回值赋给r

cout<<"Result="<

}

doubleTestArray(doubleb[],intSize)//求数组中非负元素的和

{

doubles=0;

b++;

for(inti=0;i

{

if(b[i-1]<0)continue;

s+=b[i-1];

}

return(s);

}

19、编写一个函数,能够实现将一个double型的二维矩阵转置的功能。

答:

#include

voidTurarr(doublearg[][],inta,intb)//数组转置

{

doublek;

for(inti=0;i

for(intj=i;j

{

if(i!

=j)

{

k=arg[i][j];arg[i][j]=arg[j][i];arg[j][i]=k;

}

}

}

voidmain()

{

double*q;

doublea[][]={1.0,2.0,3.0,4.0};//初始化数组

q=a[0][0];

Turarr(q,2,2);

}

20、汉诺塔(Hanoi)是在欧洲比较流行的一种游戏。

游戏的要求是这样的:

设有A,B,C三个竿,A竿上有若干个由大到小的穿心圆盘,大的圆盘在下面,小的圆盘在上面,B和C都是空杆,请你把A杆上的圆盘都倒到C杆上,但在倒盘的过程中不允许大的圆盘压在小的圆盘之上(如下图所示)。

请用递归函数方法实现该程序。

答:

#include

voidhanoi(intn,charp,charq,charr)

{

if(n==1)

cout<<"move"<

else

{

hanoi(n-1,p,r,q);

cout<<"move"<

hanoi(n-1,q,p,r);

}

}

voidmain()

{

intn;

chara='A';

charb='B';

charc='C';

cout<<"Enterthenumberofdisks:

";

cin>>n;

cout<<"Thesolutionforn="<

hanoi(n,a,b,c);

}

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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