国家二级(C++)机试模拟试卷334
选择题
1.算法的有穷性是指( )。(A)
A. 算法程序的运行时间是有限的
B. 算法程序所处理的数据量是有限的
C. 算法程序的长度是有限的
D. 算法只能被有限的用户使用
解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。
2.下列程序输出的结果是( )。
#include
funl(char a,char b){char c;c=a;a=.b;b=c;)
fun2(ehar*a,char b){char c;c=*a;*a=b;b=c;)
fun3(char*a,char*b){char c;c=*a;*a=*b;*b=c;)
void main()
{
char a,b;
a=‘A’;b=IB’;funl(a,b);putchar(a);(B )
A. BABBAB
B. ABBBBA
C. ABBABA
D. ABABBA
解析:由程序中的主函数main入手,分别调用funl,fun2,fun3函数,得到输出结果。其中,三个函数都是实现两个形参的交换功能,只是参数传递的方式不同,有的是地址,有的是传值。第一个函数中参数采用的是值传递的方式,形参的变化不影响实参。所以调用funl后,实参a和b并没有交换,仍然是AB。第二个调用中,实参a采用的是地址,即传递的是地址,所以形参a的改变会影响实参a的值,即BB。同理,调用fun3后为BA。
3.给出下面程序输出结果( )。
#includevoid main()
{int*p1;
int**p2=&p1;
int b=20;
p1=&b;
cout<<**p2<<endl;
}(B)
A. 10
B. 20
C. 40
D. 30
解析:p1指向b,而p指向p1的地址。*p2表示p1的地址,p1的地址就是&b,即*p2是&b,所以**p2就是b变量的值。
4.有如下函数模板:templateT square(T x){return x*x;}其中T是( )。(C )
A. 函数形参
B. 函数实参
C. 模板形参
D. 模板实参
解析:此题考查的是函数模板。声明一个函数模板的格式是:template函数声明,{函数体}其中的是由一个或多个“模板形参”组成的,每个“模板形参”可具有以下几种形式:typename参数名;class参数名;类型修饰参数名。
5.假定MyClass为一个类,那么下列的函数说明中,( )为该类的析构函数。(D )
A. void~MyClass();
B. ~MyClass(int n);
C. MyClass();
D. ~MyClass():
解析:C++语言中析构函数为符号“~”加类名,且析构函数没有返回值和参数,故前不加void关键字。所以正确的形式应该是~MyClass()。
6.有如下程序:
#include<iostream>
using namespaee std;
class Obj {
static int i;
public:
obj() {i++;}
-obj() {i--;}
static int getVal() {return i;}
};
int obj∷i=0:
void f() {obj oh2;cout<<ob2.getVal();}
int main() {
obj ob1;
f();
Obj * ob3=new obj;cout<<oh3->getVal();
delete ob3;cout<<obj∷getVal();
return 0;
}
执行这个程序的输出结果是( )。(D)
A. 232
B. 231
C. 222
D. 221
解析:本题考查构造函数和析构函数的调用顺序,调用顺序为先构造的后析构,后构造的先析构。本题中先定义了一个对象ob1,会执行构造函数,那么i就变为了1;再执行函数f后,由于又定义了一个对象ob2,所以再次执行构造函数,i就变为了2,输出了2。函数执行完后执行析构函数,i变为了1,然后又定义了对象指针,i变为了2。释放ob3后,i变为了1,所以答案为D。
7.下列叙述中正确的是( )。(D)
A. 栈是“先进先出”的线性表
B. 队列是“先进后出”的线性表
C. 循环队列是非线性结构
D. 有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
解析:栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。
8.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是( )。(C)
A. 编译程序
B. 操作系统 c)教务管理系统
C. 汇编程序
解析:编译软件、操作系统、汇编程序都属于系统软件,只有C教务管理系统才是应用软件。
9.有以下程序段:
#include
#define MAX(x,y)(x)>(y)?(x):(y)
void main()
{
int i,j,k;
i=10;
j=15;k=MAX(i,j),10;
cout<<k<<endl:
}
程序执行后的输出结果是( )。(C)
A. 15
B. 100
C. 150
D. lO
解析:题目程序中的MAX函数是利用条件运算符为?:求最大值。即(x>y)?(x):(y)是当x大于y时取x,否则取y。当i=10,j=15时,“MAX(i,j)”的值为15,所以“k=MAx(i,j)*10;”答案为:150。
10.下列有关运算符重载的叙述中,正确的是( )。(A)
A. 运算符重载是多态性的一种表现
B. C++中可以通过运算符重载创造新的运算符
C. C++中所有运算符都可以作为非成员函数重载
D. 重载运算符时可以改变其结合性
解析:重载运算符的规则如下:
①C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载;
②C++不能重载的运算符只有5个;
③重载不能改变运算符运算对象的个数;
④重载不能改变运算符的优先级和结合性;
⑤重载运算符的函数不能有默认的参
本文档预览:3600字符,共16801字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载