第2次课前练习题

一、判断题

1-1
函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。(T)

1-2
The types of arguments in a function call must match the types of the corresponding parameters in the function prototype’s parameter list.。(T)

1-3
在C++语言中引入内联函数(inline function)的主要目的是降低空间复杂度,即缩短目标代码长度。(F)

1-4
using namespace std; 这条语句的作用是将命名空间std内的所有标识符暴露在当前作用域内。(T)

1-5
通过命名空间可以区分具有相同名字的函数(T)

二、单选题

2-1
关于new运算符的下列描述中,(D)是错误的。

A.它可以用来动态创建对象和对象数组;
B.使用它创建的对象或对象数组可以使用运算符delete删除;
C.使用它创建对象时要调用构造函数;
D.使用它创建对象数组时必须指定初始值;

2-2
关于delete运算符的下列描述中,(C)是错误的。

A.它必须用于new返回的指针;
B.使用它删除对象时要调用析构函数;
C.对一个指针可以使用多次该运算符;
D.指针名前只有一对方括号符号,不管所删除数组的维数。

2-3
以下程序中,new语句干了什么。( C)

int** num;

num = new int* [20];

A.分配了长度为20的整数数组空间,并将首元素的指针返回。
B.分配了一个整数变量的空间,并将其初始化为20。
C.分配了长度为20的整数指针数组空间,并将num[0]的指针返回。
D.存在错误,编译不能通过。

2-4
以下程序存在的问题是:( C)

void fun()
{
int *num1, *num2;
num1 = new int[10];
num2 = new int[20];
num1[0] = 100;
num2[0] = 300;
num1 = num2;
delete [] num1;
}

A.num2不能给num1赋值
B.num2最初指向的空间没有释放
C.num1最初指向的空间没有释放
D.程序没有问题

2-5
设void f1(int * m,long & n);int a;long b;则以下调用合法的是(B)。

A.f1(a,b);
B.f1(&a,b);
C.f1(a,&b);
D.f1(&a,&b);

2-7
(2020final)一个函数功能不太复杂,但要求被频繁调用,可选用( A)。

A.内联函数
B.重载函数
C.递归函数
D.嵌套函数

2-8
重载函数在调用时选择的依据中,错误的是(D)。

A.函数的参数
B.参数的类型
C.函数的名字
D.函数的类型

2-9
在( C)情况下适宜采用inline定义内联函数。

A.函数体含有循环语句
B.函数体含有递归语句
C.函数代码少、频繁调用
D.函数代码多、不常调用

2-11
下面说法正确的是(B)。

A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C.类的内联函数必须在类体内定义
D.类的内联函数必须在类体外通过加关键字inline定义

2-12
对定义重载函数的下列要求中,( C)是错误的。

A.要求参数的个数不同
B.要求参数中至少有一个类型不同
C.要求函数的返回值不同
D.要求参数个数相同时,参数类型不同

2-13
命名空间应用于:(B)

A.在类外定义类的成员函数
B.避免各个不同函数、变量等的名称冲突
C.提高代码的执行速度
D.以上答案都正确

2-14
要说明标识符是属于哪个命名空间时,需要在标识符和命名空间名字之间加上:(A)

A.::
B.->
C…
D.( )

三、函数题

6-1 重载绝对值函数

分数 10
作者 张德慧
单位 西安邮电大学
将绝对值函数abs( )重载三次,以便在下列的主函数中调用。

###在主函数中调用形式为:

abs(x1);
其中 x1 是用户传入的参数。

裁判测试程序样例:
#include"iostream"
using std::cin;
using std::cout;
using std::endl;
//你提交的代码将被嵌入到这里

int main()
{
int x1; long x2; double x3;
cin>>x1>>x2>>x3;
cout<<“x1=”<<abs(x1)<<endl;
cout<<“x2=”<<abs(x2)<<endl;
cout<<“x3=”<<abs(x3)<<endl;
return 0;
}
输入样例:
8 -9 -2.7818281828
输出样例:
x1=8
x2=9
x3=2.78183

int abs(int x) {  
	if(x < 0)  x = -x;  
	return x; 
}
long abs(long x) {  
	if(x < 0)   x = -x;  
	return x;
}
double abs(double x) {  
	if(x < 0)  x = -x;  
	return x;
}

6-2 面积计算器(函数重载)

分数 10
作者 何振峰
单位 福州大学
实现一个面积计算器,它能够计算矩形或长方体的面积。

函数接口定义:
int area(int x, int y);
int area(int x, int y, int z);
第一个函数计算长方形的面积,其中x和y是长和宽。第二个函数计算长方体的表面积,x,y和z是长,宽和高。

裁判测试程序样例:
#include
#include
using namespace std;
int area(int,int);
int area(int,int,int);
int main()
{
int i, repeat, c, x, y, z;
cin>>repeat;
for(i=0;i<repeat;i++){
cin>>c;
if(c2){
cin>>x>>y;
cout<<area(x,y)<<endl;
}
if(c
3){
cin>>x>>y>>z;
cout<<area(x,y,z)<<endl;
}
}
return 0;
}

/* 请在这里填写答案 */
输入样例:
2
2 1 2
3 2 3 4
输出样例:
2
52

int area(int x, int y) {  
	return(x * y);
}
int area(int x, int y, int z) {  
	return(2  * ( x * y + x * z + y * z ) );
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值