C++程序设计基础(第4版)习题解答(6)

2019-08-30 18:12

if( n == 1 ) f = 10; else

f = age( n-1 ) + 2; return f; } int main() {

cout << \ } 【解答】 age:18 8.

#include using namespace std; int f1( int a, int b ) {

return a + b; }

int f2( int a, int b ) {

return a - b; }

int f3( int(?t )( int, int ), int a, int b ) {

return (?t )( a, b ); } int main() {

int (?p )( int, int ); p = f1;

cout << f3( p, 4, 8 ) << endl; p = f2;

cout << f3( p, 8, 4 ) << endl; } 【解答】 12 4 9.

#include using namespace std; int sub( int, int ); int a = 1; int main() {

int m = 1, n = 2, f;

f = sub( m, n );

cout << a << '\\t' << f << endl; f = sub( m, n );

cout << a << '\\t' << f << endl; }

int sub( int c, int d ) {

static int m = 2, n = 5;

cout << m << '\\t' << n << '\\t' << endl; a = ++ a; c = m ++; d = n ++; return c + d; } 【解答】

2 2 3 3

5 7 6 9

3.3 思考题

1.函数的作用是什么?如何定义函数?什么是函数原型? 【解答】

函数的两个重要作用:

(1)任务划分,把一个复杂任务划分为若干小任务,便于分工处理和验证程序正确性;(2)软件重用,把一些功能相同或相近的程序段,独立编写成函数,让应用程序随时调用,而不需要编写雷同的代码。

函数的定义形式:

类型 函数名 ( [ 形式参数表 ] ) {

语句序列

}

函数原型是函数声明,告诉编译器函数的接口信息:函数名、返回数据类型、接收的参数个数、参数类型和参数顺序,编译器根据函数原型检查函数调用的正确性。

2.什么是函数值的返回类型?什么是函数的类型?如何通过指向函数的指针调用一个已经定义的函数?编写一个验证程序进行说明。

【解答】

(1)函数的返回类型是函数返回的表达式的值得类型;

(2)函数类型是指函数的接口,包括函数的参数定义和返回类型; (3)若有 或

functionType functionName; //functionType是已经定义的函数类型 functionType *functionPointer=functionName; (*functionPointer)(argumentList); functionPointer(argumentList);

//定义函数指针并获取函数地址

则可以通过函数指针调用函数:

其中argumentList是实际参数表。

验证程序:

#include using namespace std; int main() {

typedef int myfunc(int,int); myfunc f,*fp; int a=10,b=6; fp=f;

cout<<\

//函数名调用函数 //函数指针调用函数 //函数指针调用函数

cout<<\ return 0; }

int f(int i,int j) { return i*j; }

3. 什么是形式参数?什么是实际参数?C++函数参数有什么不同的传递方式?编写一个验证程序进行说明。

【解答】

参数是调用函数与被调用函数之间交换数据的通道。函数定义首部的参数称为形式参数,调用函数时使用的参数称为实际参数。C++有三种参数传递机制:值传递(值调用);指针传递(地址调用);引用传递(引用调用)。

验证程序:

#include using namespace std; void funcA(int i) { i=i+10; } void funcB(int *j) { *j=*j+20; } void funcC(int &k) { k=k+30; } int main() { int a=1;

funcA(a);cout<<\ funcB(&a);cout<<\ funcC(a);cout<<\} 程序输出:

a=1 a=21 a=51

//传值参数,实际参数值不变

//指针参数,形式参数通过间址修改实际参数 //引用参数,形式参数通过别名方式修改实际参数

cout<<\

4.C++函数通过什么方式传递返回值?当一个函数返回指针类型时,对返回表达式有什么要求?当返回引用类型时,是否可以返回一个算术表达式?为什么?

【解答】

C++首先计算表达式的值,然后把该值赋给函数返回类型的匿名对象,通过这个对象,把数值带回调用点,继续执行后续代码。

当函数返回指针类型时,返回的地址值所指对象不能是局部变量。因为局部变量在函数运行结束后会被销毁,返回这个指针是毫无意义的。

返回引用的对象不能是局部变量,也不能返回表达式。算术表达式的值被储存在匿名空间中,函数运行结束后会被销毁,返回这个变量的引用也是无意义的。

5.变量的生存期和变量作用域有什么区别?请举例说明。 【解答】

变量的生存期是指程序运行后,变量占有内存的时间;变量作用域指的是指变量声明之后,在程序正文中有效的那部分区域。

例如,定义函数:

void count() {

static int n=0; //…… }

该函数中n被定义为static变量,生存期是整个程序运行时期;但作用域只在count函数中。 6.静态局部变量有什么特点?编写一个应用程序,说明静态局部变量的作用。 【解答】

静态局部变量的生存期是全程的,作用域是局部的。程序开始执行时就分配和初始化存储空间(默认初始化值为0)。定义静态局部变量的函数退出时,系统保持其存储空间和数值。下次调用这个函数时,static变量还是上次退出函数时的值。直至整个程序运行结束,系统才收回存储空间。

程序略。

7.在一个语句块中能否访问一个外层的同名局部变量?能否访问一个同名的全局变量? 如果可以,应该如何访问?编写一个验证程序进行说明。

【解答】

一个语句块中不能访问外层的同名局部变量。可以访问一个同名的全局变量。 验证程序:

#include using namespace std; int a=0; int main() {

int a=1; {

int a=2; }

cout<<\}

8.有函数原型

//输出外层局部变量a

cout<<\输出全局部变量a

//内层局部变量a

//输出内层局部变量a

cout<<\

//外层局部变量a

//全局变量a

void f (int & n);

和函数调用

int a; //…

f(a);

有人说,因为n是a的引用,则在函数f中访问n相当于访问a,所以,可以在f的函数体内直接使用变量名a。这种说法正确吗?为什么?编写一个验证程序。

【解答】

形式参数n的作用域是f函数,实际参数a的作用域是调用f函数的模块(例如main函数),所以在f函数中可见n而不可见a。因此,这种说法不正确。f函数内不能直接使用变量名a,只能通过别名n访问a。

验证程序:

#include using namespace std; void f ( int&n ); int main() {

int a = 1 ; f( a );

cout<<\}

void f ( int&n ) {

a++; n++; }

产生编译错误:error C2065: ―a‖: 未声明的标识符 9.有以下程序:

#include using namespace std; int main() { char c; cin>>c; if(c=='y'||c=='Y')

int a=1; else

int a=0;

cout<<\

}

编译错误为:error C2065: 'a' : undeclared identifier,指示语句行 cout<<\

变量a没有定义。请分析原因,并进行修改。

【解答】

//错误,直接使用a //正确


C++程序设计基础(第4版)习题解答(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:1336吴镇烽:晋公盘与晋公盆铭文对读 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: