选择题

1.运行下列代码,输出的结果是什么?

#include <iostream>
#include <cmath> 
using namespace std;
int main(){
    cout << pow(2,3) + floor(-3.14); 
    return 0;
}

A.7

B.6

C.5

D.4

2.以下代码的输出结果是?

string s1 = "apple";
string s2 = "banana";
cout << (s1 > s2);

A.0

B.1

C.true

D.false

3.以下C++代码段中,变量count的值在循环结束后是多少?

int count = 0;
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < i; j++) {
        count++;
    }
}
cout << count << endl;

A.5

B.10

C.15

D.20

4.执行下列代码,输出的结果是( )。

#include<iostream>
using namespace std;
int f(int a){
	if(a<=3) return a;
	else return f(a-1)+f(a-2)+f(a-3); 
}
int main(){
	cout<< f(8) ;
	return 0;	
}

A.65

B.67

C.68

D.69

5.有5个男生和3个女生站成一排,规定3个女生必须相邻,问有多少种不同的排列方式?

A.4320种

B.5040种

C.3600种

D.2880种

6.假设一颗二叉树的前序遍历为 DBACPMZX,中序遍历为 ABCDMPXZ,则其后序遍历序列为?

A.DBPACMZX

B.ACBMXZPD

C.XZMCAPBD

D.ABCDXZMP

7.十进制数100.0625转化为二进制数的结果是?

A.1100100.0101

B.1100100.0001

C.1101100.0001

D.1101100.0101

8.十进制数15的原码、反码、补码分别是多少( )

A.0000 1111 、 0000 1111 、 0000 1111

B.0000 1111 、 1111 0000 、 1111 0001

C.1000 1111 、 1000 1111、 1000 1111

D.1000 1111 、 1111 0000、 1111 0001

9.在 C++ 中,下列程序段能使指针变量 q 指向变量 x 的是( )。

A.

int *q = &x;
int x = 8;

B.

int x;
int *q = &x;

C.

int *q;
int x;
*q = &x;

D.

int x;
int *q,
*q = x;

10.将中缀表达式 1+3*4 转化为后缀表达式为()。

A.1 3 4 * +

B.1 * 3 4 +

C.+ * 4 3 1

D.1 + * 4 3

11.在下列代码的横线处填写( ),可以使得输出是“-8 21”

#include<iostream>
using namespace std;
int main(){
    int a=23,b=21;
    a=a^b;
    _____;
    a=b^a;
    cout<<a<<" "<<b;
	return 0;
}

A.b=a^b

B.a=a+b

C.b=b+a

D.a=a-b

12.下列关于c++语言中数组的叙述,不正确的是( )

A.数组的所有元素在内存中是连续存放的

B.在定义数组时“[]”内必须有常数

C.数组中元素的类型必须相同

D.数组可以定义多个

13.语句 while(!e); 中的条件 !e 等价于

A.e==0

B.e!=1

C.e!=0

D.~e

14.对于二维数组 int arr [3][2] = {{1, 2}, {3, 4}, {5, 6}}; 以下哪个选项可以正确遍历数组( )

A.for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { cout << arr [i][j]; } }

B.for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { cout << arr [i][j]; } }

C.for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { cout << arr [i][j]; } }

D.for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { cout << arr [i][j]; } }

15.有函数定义 void func (int *arr, int n),以下调用正确的是( )

A.int a [5] = {1, 2, 3, 4, 5}; func (a, 5);

B.int a [5] = {1, 2, 3, 4, 5}; func (&a, 5);

C.int a [5] = {1, 2, 3, 4, 5}; func (*a, 5);

D.int a [5] = {1, 2, 3, 4, 5}; func (a [0], 5);

16.表达式 ((1==1)+′B′+1+3.3) 的结果类型为()

A.float

B.double

C.char

D.bool

17.以下C++代码执行后,求出几天后是星期几。如果星期日则输出“星期天”,否则输出形如“星期1”。横线上应填入的代码是( )。

int N, nowDay, afterDays;
cin >> nowDay;
cin >> afterDays;
N = nowDay + afterDays;
if ( _____ )
    printf("星期天");
else
    printf("星期%d", N % 7);

A.N % 7 != 0

B.N % 7 == 0

C.N == 0

D.N % 7

18.如果 a 和 b 均为 int 类型的变量,下列表达式与条件“a==b” 不等效的是( )。

A.a-b==0

B.(a ^ b)==0

C.a/2*2==b

D.!(a!=b)

19.以下C++代码段的时间复杂度为( )。

int k = 1;
while(k <= n){
	k = k << 1;
}

A.O(n)

B.O(n^2)

C.O(nlogn)

D.以上答案都不对

20.以下哪个代码能够正确计算公式 a+b+cc×amodk\frac{a+b+c}{c} × a mod k ,其中 mod 表示取余。()

A.(a + b + c) / c x a mod k

B.(a + b + c) / c * a / k

C.(a + b + c) / c * a % k

D.(a + b + c) / c * a ÷ k

21.高精度除法中,余数最终结果的长度不超过?

A.第一个数的长度

B.第二个数的长度

C.两数长度之和

D.两数较长的长度

22.在使用模拟法解决问题时,以下哪项不是模拟法的关键步骤?

A.定义问题的状态

B.确定状态转移的条件

C.直接给出问题的最优解

D.设计算法的终止条件

23.下面代码段的输出结果是( )

int a = 10;
int b = 20;
int c = a > b ? a : b;
cout << c;

A.10

B.20

C.30

D.编译错误

24.在写递归函数时,哪些内容一般不写在递归函数内部( )

A.递归终止条件

B.重复的计算过程

C.全局变量的修改

D.基本的运算操作


填空题

1.运行下面代码,当输入为 5 1 1 2 3 1 时,结果是:1

#include<iostream>
#include<cmath>
using namespace std;
int a[10005];
int t[10005];
int main(){
	int n,fmax = 0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		fmax = fmax<a[i] ? a[i]:fmax;
		t[ a[i] ] ++;
	} 
	for(int i=0;i<=fmax;i++){
		cout<<t[i]<<‘ ’;
	} 
	return 0;
}

1:0 3 1 1

2.执行如下代码,若输入的n值为6,那么函数fib将会被递归调用1次(不包含最初传入参数为6的那一次调用)。

#include <iostream>
using namespace std;
int fib(int x) {
    if(x == 1 || x == 2) return 1;
    else return fib(x - 1) + fib(x - 2);
}
int main() {
    int n;
    cin >> n;
    int result = fib(n);
    cout << result;
    return 0;
}

2:12


判断题

1.在任何情况下,算法的时间复杂度都不会影响程序的实际运行时间。

2.函数参数为数组时,传递的是整个数组的拷贝。

3.我们小时候玩的猜数字,有些人的策略是先猜中间的数字,然后根据反馈的结果大了或者小了,确定新的猜数字的范围,再猜其中间值,直到正确,这个逻辑与递归的逻辑相似。

4.主函数里面定义的变量是全局变量,自定义函数里面定义的变量是局部变量。

5.任何一个 for 循环都可以转化为等价的 while 循环.( )

6.右移运算符 >> 是将二进制位向右移动,左边空出的位用 0 填充。

7.~ 2 的输出值是 ?3 。

8.在二维数组定义的时候,行列不是一定都要确认长度的。

9.可以用栈计算前缀表达式的答案()

10.流程图是一种用于描述算法步骤和决策过程的图形表示方法。