- gf24240 的博客
《梦溪笔谈·C++》卷十六:2025/5/10某比赛题目
- 2025-5-10 16:40:27 @
选择题
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.以下哪个代码能够正确计算公式 ,其中 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.流程图是一种用于描述算法步骤和决策过程的图形表示方法。