第六章 函数
一、填空题
1. 一个函数调用表达式能够作为左值的条件是:函数的返回值必须是______类型。
2. 假定一个函数的数组参数说明为char a[],则等价的指针参数说明为______。
3. 假定一个函数的二维数组参数说明为int w[][N],则等价的指针参数说明为______。
4. 假定一个参数说明为const int a,则在函数体中______(能够/不能够)改变a的值。
5. 假定一个参数说明为const char *p,则在函数体中______(能够/不能够)改变p所指向的存储空间的内容,但______改变p指针的内容。
6. 假定一个参数说明为int &x,则进行函数调用时,它是对应______的别名。
编程递归函数7. 一个函数带有函数声明时,则参数的默认值应该在______(函数定义/函数声明)中给出。
8. 在进行函数调用时,将把______传送给非引用参数,把实参的______传送给引用参数。
9. 函数执行中对引用参数的访问实际上就是对相应______的访问。
10. 当函数的返回类型为void 时,在函数体中可以使用______语句,否则必须使用______语句返回一个值。
11. 当实参为一个数组名时,对应的形参必须是______类型或______类型。
12. 变量的四种作用域分别为______、______、______和______。
13. 不同作用域范围内的变量______(能够/不能够)同名。
14. 当一个函数的非引用参数为a,假定它对应的实参也为a,则在函数体中对a的访问与对应的实参a______(有关/无关)。
15. 当一个函数的引用参数为a,假定它对应的实参也为a,则在函数体中对a的访问与对应的实参a______(有关/无关)。这两个变量的作用域______(相同/不同)。
16. 当一个函数的引用参数为a,假定它对应的实参为b,则它们对应的作用域______(相同/不同),访问它们的存储空间______(相同/不同)。
17. 在函数定义的第一层复合语句内______(能够/不能够)定义与形参同名的变量,因为它们作用域______(相同/不同)。
18. 函数的形参和函数体内的变量______(可以/不可以)与全局域或文件域的对象同名。
19. 在两个嵌套的不同作用域内若分别定义有同名对象,当在内层作用域访问这个对象时,将访问的是在______(内层/外层)定义的对象,除此之外将访问的是在______(内层/外层)定义的对象。
20. 在一个程序文件中定义的函数,若要在另一个程序文件中访问,则必须在该文件开始给出一条该函数的______对其进行说明。
21. 在一个函数体中可以使用函数调用表达式调用其他函数,也可以调用______。
22. 在函数体中又调用自身函数称为______调用,该函数称为______函数。
23. 当两个函数的函数名______,但参数的个数或对应参数的类型______时,则称为重载函数。
24. 当一个函数为void f(int ,char=’a’),另一个函数为void f(int),则它们______(是/不是)重载函数,在一个程序中______(可以/不可以)同时定义这两个函数。
25. 一个函数模板中的类型参数所对应的具体类型由调用该函数模板的______决定。
26. 当在同一个程序中存在一个普通函数是一个函数模板的重载函数时,则与函数调用表达式相符合的______将被优先调用执行。
27. 当一个函数调用表达式只能与一个函数模板相符合时,将首先根据函数模板生成一个______,然后再调用它执行。
28. 在函数定义的参数表中,也可以使用函数参数,假定一个函数参数说明为int &ff(int[],int),则等价的函数指针说明为______。
二、给出下列程序运行后的输出结果并上机验证
1. #include<iostream.h>
void main()
{int a=10,b=20;
cout<<a<<’ ’<<b<<endl;
{ a*=3;
int b=a+35;
cout<<a<<’ ’<<b<<endl;
}
cout<<a<<’ ’<<b<<endl;
}
2. #include<iostream.h>
int a=5;
void main()
{
int a=10,b=20;
cout<<a<<’ ‘<<b<<endl;
{ int a=0,b=0;
for(int i=1;i<6;i++)
{ a+=i;b+=a; }
cout<<a<<’ ‘<<b<<’ ‘<<::a<<endl;
}
cout<<a<<’ ‘<<b<<endl;
}
3. #include<iostream.h>
int f1(int a,int b)
{a=a+b;b=a+b;
cout<<”a=”<<a<<”,b=”<<b<<endl;
return a+b;}
void main()
{int x=5,y=8;
int z=f1(x,y);
cout<<”x=”<<x<<”,y=”<<y;
cout<<”,z=”<<z<<endl;
}
4. #include<iostream.h>
void f2(int&x,int&y)
{
int z=x;x=y;y=z;
}
void f3(int *x,int *y)
{
int z=*x;*x=*y;*y=z;
}
void main()
{
int x,y;
x=10;y=26;
cout<<”x,y=”<<x<<”,”<<y<<endl;
f2(x,y);
cout<<”x,y=”<<x<<”,”<<y<<endl;
f3(&x,&y);
cout<<”x,y=”<<x<<”,”<<y<<endl;
x++;y--;
f2(y,x);
cout<<”x,y=”<<x<<”,”<<y<<endl;
}
5. #include<iostream.h>
void f4(int a[],int n,int &s)
{
s=0;
for(int i=0;i<n;i+=2) s+=a[i];
}
void main()
{
int a[5]={2,7,5,4,9};
int b[10]={4,8,6,9,2,10,7,12,6,15};
int x;
f4(a,5,x);
int y=x;
f4(b,8,x);
y+=x;
f4(b+3,5,x);
cout<<x+y<<endl;
}
6. #include<iostream.h>
int x=5;
void f5(int a);
int f6(int x);
void main()
{
int x=3;
f5(x);
f5(x+4);
cout<<x+::x<<endl;
}
void f5(int a)
{
a+=x;
cout<<f6(a)<<endl;
}
int f6(int x)
{
x*=3;
return x+1;
}
7. #include<iostream.h>
#include<string.h>
char *f7(char *&a,int n)
{
a=new char[n];
strcpy(a,”motion”);
char *b=new char[n];
strcpy(b,”telephone”);
return b;
}
void main()
{
char *p1;
char *p2=f7(p1,12);
cout<<p1<<’ ‘<<p2<<endl;
delete p1;delete p2;
}
8. #include<iostream.h>
const N=15;
int f8(char a[][N],int m)
{
int c=0;
for(int i=0;i<m;i++)
{
int j=0;
while (a[i][j])
{
if(a[i][j]>=’0’&&a[i][j]<=’9’) c++;
j++;
}
}
return c;
}
void main()
{
char b[4][N]={“12ab3”,”70542”,”abc25”,”x+y=26”};
int c1=f8(b,4);
int c2=f8(b+2,2);
cout<<c1<<’ ‘<<c2<<endl;
}
9. #include<iostream.h>
int f9(int x)
{
cout<<x<<’ ‘;
if(x<=0){cout<<endl; return 0;}
else return x*x+f9(x-1);
}
void main()
{
int x=f9(6);
cout<<x<<endl;
}
10. #include<iostream.h>
const N1=8,N2=6;
int average(int a[],int n)
{
int s=0;
for(int i=0;i<n;i++) s+=a[i];
return s/n;
}
double average(double a[],int n)
{
double s=0;
for(int i=0;i<n;i++) s+=a[i];
return s/n;
}
void main()
{
int a[N1]={3,6,5,10,8,2};
double b[N2]={3.2,5,6.2,5.6,4.9,8.4};
int v1;double v2;
v1=average(a,N1);
v2=average(b,N2);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论