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) }}

  • 正确
  • 错误