第三章 函数习题
一.基本概念与基础知识自测题
3.1 填空题
3.1.1 被定义为形参的是在函数中起 (1) 作用的变量,形参只能用 (2) 表示。实参的作用是 (3) ,实参可以用 (4) 、 (5) 、 (6) 表示。
答案:
(1)自变量
(2)变量名
(3)将实际参数的值传递给形参
(4)具有值的变量
(5)常量
(6)表达式
3.1.2 局部域包括 (1) 、 (2) 和 (3) 。使用局部变量的意义在于 (4) 。
答案:
(1)块域
(2)函数域
(3)函数原型域
(4)局部变量具有局部作用域使得程序在不同块中可以使用同名变量
3.1.3 静态局部变量存储在 (1) 区,在 (2) 时候建立,生存期为(3) ,如定义时未显式初始化,则其初值为 (4) 。
答案:
(1)全局数据区
(2)编译
(3)全局生存期
(4)全0
3.1.4局部变量存储在 (1) 区,在 (2) 时候建立,生存期为(3) ,如定义时未显式初始化,则其初值为 (4) 。
答案:
(1)栈
(2)在函数或块开始执行时
(3)函数或块的执行期
(4)随机值
3.1.5 编译预处理的作用是 (1) ,预处理指令的标志是 (2) 。多文件系统中,程序由 const的作用
(3) 来管理,用户自定义头文件中通常定义一些 (4) 。
答案:
(1)将源程序文件进行处理,生成一个中间文件,编译系统对此中间文件进行编译并生成目标代码
(2)#
(3)工程文件
(4)用户构造的数据类型(如枚举类型),外部变量,外部函数、常量和内联函数等具有一定通用性或常用的量
3.1.6 设有函数说明如下:
int f(int x, int y){ return x%y+1; }
假定a=10,b=4,c=5,下列语句的执行结果分别是 (1) 和 (2) 。
(1) cout<<f(a,b)+f(a,c); (2) cout<<f(f(a+c,b),f(b,c));
解答:
(1)
a:
答案:4
(2)
答案:5
3.1.7下列程序的输出结果分别为 (1) 和 (2) 。
(1)
#include<iostream>
using namespace std;
int a,b;
void f(int j){
static int i=a; //注意静态局部变量
int m,n;
m=i+j; i++; j++; n=i*j; a++;
cout<<"i="<<i<<'\t'<<"j="<<j<<'\t';
cout<<"m="<<m<<'\t'<<"n="<<n<<endl;
}
int main(){
a=1; b=2;
f(b); f(a);
cout<<"a="<<a<<'\t'<<"b="<<b<<endl;
return 0;
}
解:
答案:
i=2 j=3 m=3 n=6 (对应蓝)
i=3 j=3 m=4 n=9 (对应绿)
a=3 b=2
(2)
#include<iostream>
using namespace std;
float sqr(float a){return a*a;}
float p(float x,int n){
cout<<"in-process:"<<"x="<<x<<'\t'<<"n="<<n<<endl;
if(n==0) return 1;
else if(n%2!=0) return x*sqr(p(x,n/2));
else return sqr(p(x,n/2));
}
int main(){
cout<<p(2.0,13)<<endl;
return 0;
}
图解递归,共五层,返回值是回归时产生:
答案:
in-process:x=2 n=13
in-process:x=2 n=6
in-process:x=2 n=3
in-process:x=2 n=1
in-process:x=2 n=0
8192
3.2 简答题
3.2.1 函数的实参和形参怎样对应?实参和形参数目必须一致吗?什么情况下可以不同?
答:实参和形参的个数和排列顺序应一一对应,并且对应参数应类型匹配(赋值兼容),当有缺省参数时可以不同。
3.2.2 函数和内联函数的执行机制有何不同?定义内联函数有何意义?又有何要求?
答:内联函数的调用机制与一般函数不同,编译器在编译过程中遇到inline时,为该函数建立一段代码,而后在每次调用时直接将该段代码嵌入到调用函数中,从而将函数调用方式
变为顺序执行方式,这一过程称为内联函数的扩展或内联。内联函数的实质是牺牲空间来换取时间。因inline指示符对编译器而言只是一个建议,编译器也可以选择忽略该建议,内联函数只适用于功能简单,代码短小而又被重复使用的函数。函数体中包含复杂结构控制语句,如switch、复杂if嵌套、while语句等,以及无法内联展开的递归函数,都不能定义为内联函数,即使定义,系统也将作为一般函数处理。
3.2.3 全局变量和全局静态变量的区别在哪里?为什么提倡尽量使用局部变量?
答:有static修饰的全局变量只能在定义它的文件中可见,在其他文件中不可见,而非静态的全局变量则可以被其他程序文件访问,但使用前必须用extern说明。
局部变量具有局部作用域使得程序在不同块中可以使用同名变量。这些同名变量各自在自己的作用域中可见,在其它地方不可见。所以提倡尽量使用局部变量
3.2.4 函数重载的作用是什么?满足什么条件的函数才可以成为重载函数?重载函数在调用时是怎样进行对应的?
答:函数重载可以定义几个功能相似,而参数类型不同使用相同的函数名的函数,以适应
不同情况下自动选用不同函数进行操作。函数重载的好处在于,可以用相同的函数名来定义一组功能相同或类似的函数,程序的可读性增强。
在定义重载函数时必须保证参数类型不同,仅仅返回值类型不同是不行的。
当某个函数中调用到重载函数时,编译器会根据实参的类型去对应地调用相应的函数。匹配过程按如下步骤进行:
(1)如果有严格匹配的函数,就调用该函数;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论