90 #3493. 赛前模拟训练题1
赛前模拟训练题1
一、单选题(共30题,每题2分)
1. 小李编写数据交换工具,结合指针与引用实现交换逻辑,运行代码输出结果是?
void swapNum(int *m, int &n) {
int tmp = *m;
*m = n;
n = tmp;
}
int main() {
int a = 350, b = 120;
swapNum(&a, b);
cout << a << " " << b;
return 0;
}
{{ select(1) }}
- 350 120
- 120 350
- 350 350
- 编译报错
2. 自定义函数计算四门学科总分,横线处正确调用语句是?
int getTotal(int x, int y, int z, int k) {
return x + y + z + k;
}
int main() {
int phy = 82, chem = 91, bio = 78, geo = 86;
int sum = __________;
cout << sum;
return 0;
}
{{ select(2) }}
- getTotal
- getTotal(phy, chem, bio, geo)
- getTotal(int phy, chem, bio, geo)
- getTotal(x,y,z,k)
3. 运行下方代码,控制台打印输出数值为?
int addTwo(int num) {
return num + 2;
}
int main() {
int b = 8;
cout << addTwo(b) + addTwo(4);
return 0;
}
{{ select(3) }}
- 12
- 14
- 16
- 18
4. 针对下列代码描述正确的是?
void drawLine() {
int lineCnt = 18;
}
int main() {
cout << lineCnt;
return 0;
}
{{ select(4) }}
- 程序输出18
- 编译正常,输出随机垃圾值
- 编译失败,lineCnt仅在drawLine函数内有效
- 编译失败,cout不能输出整型变量
5. 角色升级程序,执行代码后*ptr最终数值是?
int currLv = 8, nextLv = 11;
int *ptr = &currLv;
*ptr = *ptr + 3;
ptr = &nextLv;
{{ select(5) }}
- 8
- 11
- currLv的内存地址
- nextLv的内存地址
6. 沙盘地图二维数组int grid[5][4];,单个int占4字节,grid首地址0x2000,&grid + 1地址为? {{ select(6) }}
- 0x204c
- 0x205c
- 0x2050
- 0x2058
7. 执行代码后变量res的值为?
int arr[] = {14, 22, 38, 46, 52};
int *p = arr + 2;
int res = *(p - 1) + *(p + 1);
{{ select(7) }}
- 68
- 72
- 60
- 84
8. 4组学员、每组5人成绩存入二维数组grade,grade[2][1]数值是?
int grade[4][5] = {
{62,64,66,68,70},
{71,73,75,77,79},
{80,83,86,89,92},
{91,93,95,97,99}
};
{{ select(8) }}
- 73
- 83
- 80
- 93
9. 结构体Weapon存储武器信息,哪种写法编译报错?
struct Weapon {
string name;
int atk;
};
{{ select(9) }}
- Weapon w = {"Bow", 160};
- Weapon w; w.name = "Bow"; w.atk = 160;
- Weapon w = new Weapon{"Bow", 160};
- Weapon *p = new Weapon{"Bow", 160};
10. 运行代码,控制台输出内容是?
struct Magazine {
string name;
int page;
};
int main() {
Magazine mag[2] = {{"Game", 96}, {"Life", 132}};
cout << mag[1].name;
return 0;
}
{{ select(10) }}
- Game
- Life
- 96
- 132
11. 商品热度排序,热度相同需保留原始先后顺序,下列说法错误的是? {{ select(11) }}
- 冒泡排序稳定,仅左大于右时交换元素
- 插入排序稳定,相等元素不向前交换
- 选择排序稳定,每次提取最小值放到数组前端
- 排序稳定指等值元素排序后相对顺序不变
12. 爬楼梯递推规则:g(n)=g(n-1)+g(n-2),g(1)=2,g(2)=3,调用step(5)结果为?
int step(int n) {
if(n <= 2) return n == 1 ? 2 : 3;
int a=2,b=3,tmp;
for(int i=3;i<=n;i++){
tmp = a + b;
a = b;
b = tmp;
}
return b;
}
{{ select(12) }}
- 10
- 13
- 8
- 21
13. 除法异常容错程序,运行后输出内容为?
try {
int m = 40, k = 0;
if(k == 0) throw "Divide Fault";
cout << m / k;
} catch(int err) {
cout << "Num Err:" << err;
} catch(const char* msg) {
cout << "Catch:" << msg;
}
{{ select(13) }}
- 0
- Num Err:0
- Catch:Divide Fault
- 程序直接崩溃
14. 下方代码实现升序排序,该排序算法是?
void sortArr(float arr[], int len) {
for(int i=0; i<len-1; i++){
int minIdx = i;
for(int j=i+1; j<len; j++){
if(arr[j] < arr[minIdx]) minIdx = j;
}
float t = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = t;
}
}
{{ select(14) }}
- 冒泡排序
- 插入排序
- 选择排序
- 归并排序
15. 读取文件info.txt,文件内容Class 16,执行代码输出结果?
ifstream fin("info.txt");
string s; int num;
fin >> s >> num;
cout << s.size() * num;
{{ select(15) }}
- 64
- 80
- 16
- 72
16. 已知定义 int arr[5][4];,若数组首地址为0x1000,int占4字节,则表达式 arr + 1 对应的内存地址是? {{ select(16) }}
- 0x1004
- 0x1010
- 0x1014
- 0x1080
17. 关于C++值传递、指针传递、引用传递,下列说法正确的是( ) {{ select(17) }}
- 值传递时,函数形参是实参的独立副本,修改形参不会影响实参
- 指针传递时,函数内无法通过指针修改外部变量的值
- 引用传递时,引用变量在定义之后可以重新绑定到另一个变量
- 值传递与引用传递的运行效率完全相同,没有任何区别
18. 下列关于冒泡、选择、插入排序稳定性描述,正确的是? {{ select(18) }}
- 选择排序是稳定排序
- 冒泡排序相邻元素相等时不交换,则可以保证稳定
- 插入排序一定不稳定
- 稳定排序执行速度一定快于不稳定排序
19. 有递推公式 f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2),采用普通递归实现该函数,其时间复杂度接近? {{ select(19) }}
- O(n)
- O(n^2)
- O(2^n)
- O(log n)
20. C++结构体定义,以下代码能够正常编译运行的是?
struct Student {
int id;
string name;
};
{{ select(20) }}
- Student s = {"1001"};
- Student s; s.name = "Tom";
- Student s(); s.id = 1;
- Student s = {name:"Lily"}
21. 执行双层循环代码:
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
cout << "*";
该程序时间复杂度为? {{ select(21) }}
- O(n)
- O(n^2)
- O(2^n)
- O(log n)
22. 关于C++文件流,若想要读取磁盘上已有文件的数据,应当使用? {{ select(22) }}
- ofstream
- ifstream
- ostream
- cerr
23. C++异常处理 try-catch,下面说法错误的是? {{ select(23) }}
- try块中出现异常,会立刻跳出try,匹配对应catch
- catch可以捕获指定类型的异常数据
- 如果异常没有被捕获,程序不会终止
- 一个try可以搭配多个不同类型的catch
24. 对比Python与C++参数传递,下面描述准确的是? {{ select(24) }}
- Python存在纯粹的值传递
- C++引用传递在Python中有完全等同语法
- Python传递可变对象(列表)时,函数内修改元素会影响外部
- Python传递整数变量,函数内部修改一定会改变外部变量
25. 选择排序核心思想是不断在未排序区间寻找最小值交换至前端,它不稳定的根本原因是? {{ select(25) }}
- 循环次数过多
- 远距离交换操作容易打乱等值元素相对顺序
- 只能从小到大排序
- 无法处理重复数字
26. 下面关于局部变量作用域说法正确的是? {{ select(26) }}
- 在函数内部定义的变量,可以直接在函数外部访问
- 代码块{}内部定义变量,出块之后仍然有效
- 不同作用域内可以定义同名变量,优先使用当前局部变量
- 局部变量默认自动初始化为0
27. 设有 int a=10, *p=&a;,执行 int b=20; p=&b;,下列结果正确的是? {{ select(27) }}
- a的值变为20
- p存储的地址修改为变量b的地址
- *p的值依旧是10
- &a的值发生改变
28. 下列哪一段算法属于递推思想而非递归? {{ select(28) }}
- 函数不断调用自身直到基线条件
- 从第1项开始,循环依次算出第2、3……第n项斐波那契数
- 使用分治法快速排序
- 递归遍历树形结构
29. 二维数组 int mat[4][3]; int *q = mat[0];,q+2 指向的是? {{ select(29) }}
- mat第2行首元素
- mat[0][2]
- mat[2][0]
- 整个数组向后偏移2行
30. 下列代码执行后输出结果是?
void func(int &x){x *= 2;}
int main(){
int m = 6;
func(m);
cout << m;
return 0;
}
{{ select(30) }}
- 6
- 12
- 0
- 编译报错
二、多选题(共10题,每题3分)
31. 下列关于C++函数三种传参方式描述正确的是( ) {{ multiselect(31) }}
- 值传递拷贝独立副本,函数内修改不影响外部原始变量
- 指针传递直接操作原变量内存,可修改实参真实数据
- 引用是原变量别名,无需拷贝副本,能直接修改外部值
- 结构体变量无法作为函数形参传入
32. 关于二维数组定义与初始化合法规则,说法正确的有( ) {{ multiselect(32) }}
- 全局/局部二维数组初始化时允许省略第一维行数
- 定义二维数组时第二维列数绝对不能省略
- double data[][4]={1.1,2.2,3.3}; 语法合法可编译
- float arr[3][]={1,2,3}; 属于标准合法写法
33. 下面哪些特征属于函数内部局部变量( ) {{ multiselect(33) }}
- 仅在当前{}代码块内可访问,出作用域失效
- 定义后未手动赋值,存储随机垃圾数值
- 函数执行完毕自动释放栈内存,销毁变量
- 整个程序所有函数都能直接读取使用
34. 针对冒泡、插入、选择三种基础排序,表述无误的是( ) {{ multiselect(34) }}
- 冒泡、插入排序均为稳定排序,等值元素顺序不变
- 基础选择排序属于不稳定排序,会打乱等值相对位置
- 稳定排序会交换相等元素,改变原有前后次序
- 有序数组使用flag优化冒泡,一轮遍历即可结束,复杂度O(n)
35. 结构体变量与指针的合法访问写法包含( ) {{ multiselect(35) }}
- 普通结构体变量:变量名.成员名
- 结构体指针:指针变量->成员名
- (*结构体指针).成员名 等价于 -> 访问方式
- 结构体内部不允许定义string、数组类型成员
36. 下列属于指针安全、合规操作的是( ) {{ multiselect(36) }}
- 直接给指针字面数字(如0x1234)作为地址赋值
- 使用*解引用,读取指针指向内存存储的数据
- 两个同类型指针变量,可使用> < ==比较地址大小
- 使用&取普通变量地址,赋值给同类型指针
37. 文件流相关函数与使用场景正确的有( ) {{ multiselect(37) }}
- open()函数用于打开指定路径的磁盘文件
- eof()用于判断文件读取是否到达末尾
- rdbuf()可替换标准输出缓冲区,实现输出重定向到文件
- ifstream类专门用于文件写入操作
38. 对比指针与引用,下列正确描述是( ) {{ multiselect(38) }}
- 引用定义时必须绑定已有变量,不能无主引用
- 指针变量可多次修改指向,切换指向不同变量
- 引用一旦绑定变量,无法重新绑定其他变量
- 指针和引用都不能修改外部原始变量的值
39. 下面对代码时间复杂度判断错误的选项是( ) {{ multiselect(39) }}
- 单层for循环 for(int i=1;i<=n;i++) 复杂度O(n)
- 内层j<=i的双层嵌套循环,复杂度为O(2^n)
- 三层完全独立嵌套循环,时间复杂度O(n^3)
- 循环迭代版斐波那契数列,复杂度为O(2^n)
40. 以下代码书写会直接触发编译报错的有( ) {{ multiselect(40) }}
- int num[6]; num++;
- 函数内部定义局部变量,在main函数直接访问
- int &ref; 仅声明引用,未绑定任何变量
- void无返回函数内单独写 return;
三、判断题(共10题,每题1分)
41. 运行下列代码,变量x最终的值会变为28。
void addVal(int *p) {
*p = *p + 18;
}
int main() {
int x = 10;
addVal(&x);
return 0;
}
{{ select(41) }}
- 正确
- 错误
42. C++引用一旦绑定变量,后续可以通过赋值操作将其重新指向另一个变量。 {{ select(42) }}
- 正确
- 错误
43. 下面代码能够正常编译并正确输出4名学生的平均分数。
struct Student {
int id;
int score;
};
int main() {
Student st[4] = {{1, 76}, {2, 88}, {3, 91}, {4, 85}};
int sum = 0;
for (int i = 0; i < 4; i++) sum += st[i].score;
double avg = sum / 4.0;
cout << avg;
return 0;
}
{{ select(43) }}
- 正确
- 错误
44. 选择排序是一种稳定的排序算法。 {{ select(44) }}
- 正确
- 错误
45. 带有优化标记flag的冒泡排序,若数组初始完全有序,仅需一轮遍历即可结束,时间复杂度为O(n)。 {{ select(45) }}
- 正确
- 错误
46. C++二维数组初始化时可省略第一维长度,不能省略第二维;int arr[][3]={{1,5},{2,6}}合法,int arr[][]={1,2,3}无法编译。 {{ select(46) }}
- 正确
- 错误
47. 下方双层循环代码的时间复杂度是O(2^n)。
int num = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= i; j++){
num++;
}
}
{{ select(47) }}
- 正确
- 错误
48. 若在 C++ 中,ofstream 以默认方式打开文件时,若文件不存在则新建文件;若文件已存在,会清空文件原有内容。 {{ select(48) }}
- 正确
- 错误
49. 运行饭卡充值程序,控制台最终输出90。
void addMoney(int money) {
money += 40;
}
int main() {
int card = 50;
addMoney(card);
cout << card;
return 0;
}
{{ select(49) }}
- 正确
- 错误
50. 以下两行代码能够正常编译运行。
int arr[6];
arr++;
{{ select(50) }}
- 正确
- 错误