1 条题解

  • 0
    @ 2026-5-9 21:59:07

    《星火征途》初赛模拟卷(一)

    一、单选题(每题5分,共75分)

    1. 红军某连队需要统计战士人数,以下哪个变量类型最适合存储人数?( C

    A. double
    B. char
    C. int
    D. bool
    

    【答案:C】

    • A. double ❌ 双精度浮点数,用于存储小数,人数是整数不需要用浮点型
    • B. char ❌ 字符型,只能存储单个字符(如'A'、'5'),无法存储较大数值
    • C. int ✅ 整型变量,专门用于存储整数,适合统计人数等整数数据
    • D. bool ❌ 布尔型,只能存储 true 或 false(真/假),不能存储具体数值

    2. 红军通讯兵记录电报编号,以下变量定义中,正确的是( C

    A. int 3rdMsg = 101;
    B. double msg-id = 5.5;
    C. char code = 'R';
    D. int return = 10;
    

    【答案:C】

    • A. int 3rdMsg = 101; ❌ 变量名以数字开头,C++规定标识符必须以字母或下划线开头
    • B. double msg-id = 5.5; ❌ 变量名包含连字符 -,这是减号运算符,不是合法的标识符字符
    • C. char code = 'R'; ✅ 正确!code 是合法标识符,char 类型用单引号包裹字符常量
    • D. int return = 10; ❌ return 是 C++ 的关键字(用于函数返回),不能作为变量名

    3. 长征途中记录当日行军距离,以下代码输出结果是( A

    int distance = 35;
    int total = distance;   // total = 35(值拷贝)
    distance = 50;          // distance 改为50,但total不受影响
    cout << total << endl;
    

    【答案:A】

    • A. 35 ✅ 正确!int total = distance 是值拷贝,total 获得独立的副本35,后续修改 distance 不影响 total
    • B. 50 ❌ 混淆了引用传递和值拷贝,这里是基本类型的赋值操作
    • C. 85 ❌ 错误地认为两个变量会相加
    • D. 0 ❌ 无此可能

    4. 红军指挥部需要输入密码并输出验证结果,以下代码正确的是( B

    A. int n; cin << n; cout >> n;    // 方向反了
    B. int n; cin >> n; cout << n;     // 正确
    C. int n; cout >> n; cin << n;     // 完全反了
    D. int n; cin >> n; cout >> n;     // 输出方向错误
    

    【答案:B】

    • A. cin << n; cout >> n; ❌ 方向完全反了!cin>> 提取输入,cout<< 输出内容
    • B. cin >> n; cout << n; ✅ 正确!cin >> n 从键盘读取输入到n,cout << n 将n的值输出到屏幕
    • C. cout >> n; cin << n; ❌ 完全颠倒,无法编译
    • D. cin >> n; cout >> n; ❌ cout 应该用 << 不是 >>

    5. 红军仓库有子弹137发,分给12名战士,以下表达式结果为5的是( B

    【答案:B】

    • A. 137 / 12 ❌ 整数除法结果为 11(商),表示每人能分到11发
    • B. 137 % 12 ✅ 正确!取余运算 137 ÷ 12 = 11 余 5,% 返回余数 5
    • C. 137 - 12 ❌ 结果为 125
    • D. 137 * 12 ❌ 结果为 1644

    6. 以下关于C++逻辑运算符的说法,正确的是( C

    【答案:C】

    • A. && 表示逻辑或&& 是逻辑与(AND),两边都为真才为真
    • B. || 表示逻辑与|| 是逻辑或(OR),只要一边为真就为真
    • C. ! 表示逻辑非 ✅ 正确!! 是逻辑非(NOT),真变假,假变真
    • D. ! 不能作用于表达式 ❌ 错误!!(a > b) 是合法的表达式

    7. 红军根据伤亡情况判断是否需要增援( A

    int wounded = 12, total = 30;
    if (wounded > total * 0.3) {   // 12 > 9 ? Yes!
        cout << "请求增援";
    } else {
        cout << "继续作战";
    }
    

    【答案:A】

    • A. 请求增援 ✅ 正确!30 × 0.3 = 912 > 9true,执行 if 分支输出"请求增援"
    • B. 继续作战 ❌ 需要条件不成立才会执行 else 分支
    • C. 原地休整 ❌ 代码中没有这个选项
    • D. 无输出 ❌ 条件成立一定会输出

    8. 三目运算符 (a > b) ? a : b 的功能是( B

    【答案:B】

    • A. 如果 a>b 成立返回b否则返回a ❌ 说反了
    • B. 如果 a>b 成立返回a否则返回b ✅ 正确!三目运算符格式:条件 ? 值1 : 值2,条件为真返回值1,否则返回值2
    • C. 返回a和b的平均值 ❌ 这是求平均值的写法 (a+b)/2
    • D. 判断a和b是否相等 ❌ 应该用 a == b

    9. for循环输出几行?( B

    for (int i = 1; i <= 5; i++) {
        cout << "第" << i << "省" << endl;  // 每次循环输出一行并换行
    }
    

    【答案:B】

    • A. 4 ❌ i从1到5共5次
    • B. 5 ✅ 正确!i 取值:1,2,3,4,5,每次循环输出1行+换行,共5行
    • C. 6 ❌ i=6时不满足 i<=5,退出循环
    • D. 无限循环 ❌ 有明确的终止条件

    10. while循环输出结果( B

    int step = 1;
    while (step <= 4) {      // step=1,2,3,4 时执行
        cout << step << " "; // 输出: 1 2 3 4
        step++;               // step递增
    }
    

    【答案:B】

    • A. 1 2 3 ❌ 少了step=4的情况
    • B. 1 2 3 4 ✅ 正确!step从1到4,每次先输出再自增
    • C. 0 1 2 3 ❌ 初始值是1不是0
    • D. 1 2 3 4 5 ❌ step=5时 5<=4 为假,不会输出

    11. do-while循环输出( B

    int k = 10;
    do {
        cout << k << " ";   // 先执行一次:输出10
        k++;                  // k变为11
    } while (k <= 5);        // 11<=5? false,退出
    

    【答案:B】

    • A. 无输出 ❌ do-while至少执行一次循环体
    • B. 10 ✅ 正确!do-while先执行后判断,所以至少输出一次10
    • C. 10 11 12 13 14 15 ❌ 条件k<=5在第一次就为假
    • D. 无限循环 ❌ 有终止条件且会触发退出

    12. 表达式 int(3.14) 的值是( B

    【答案:B】

    • A. 3.14 ❌ 强制转换为int后会丢失小数部分
    • B. 3 ✅ 正确!int() 类型转换会截断小数部分(向零取整),3.14→3
    • C. 4 ❌ 这不是四舍五入
    • D. 0 ❌ 无此可能

    13. switch语句输出( B

    int direction = 2;
    switch (direction) {
        case 1: cout << "东"; break;
        case 2: cout << "南";       // 匹配!输出"南",但没有break!
        case 3: cout << "西"; break; // 穿透执行,输出"西"
        default: cout << "北"; break;
    }
    

    【答案:B】

    • A. 南 ❌ case 2 没有 break,会发生穿透,不会只输出"南"
    • B. 南西 ✅ 正确!switch穿透:case 2 匹配→输出"南"→无 break→继续执行 case 3→输出"西"→遇到 break 退出
    • C. 南西北 ❌ 多了"北",default 不会被执行(因为 case 3 有 break)
    • D. 东西北 ❌ 完全不对

    14. 嵌套循环输出多少个星号?( C

    for (int i = 0; i < 3; i++) {        // 外层循环3次(i=0,1,2)
        for (int j = 0; j < 4; j++) {    // 内层循环4次(j=0,1,2,3)
            cout << "* ";                // 每次内层循环输出一个*
        }
        cout << endl;
    }
    // 总计:3 × 4 = 12 个星号
    

    【答案:C】

    • A. 7 ❌ 计算错误
    • B. 10 ❌ 计算错误
    • C. 12 ✅ 正确!外层3次 × 内层4次 = 12个星号
    • D. 3 ❌ 只计算了外层数

    15. strlen输出结果( B

    char code[20] = "Red";          // 字符串"Red"占4字节(R,e,d,\0)
    cout << strlen(code) << endl;   // strlen计算字符串长度(不含\0)
    

    【答案:B】

    • A. 2 ❌ 少算了一个字符
    • B. 3 ✅ 正确!strlen() 返回字符串长度(不含结束符\0),"Red"有3个字符
    • C. 4 ❌ 这是 sizeof 或含\0的长度
    • D. 20 ❌ 这是数组总大小,不是字符串长度

    二、判断题(每题5分,共25分)


    16. 在C++中,int a = 5; a = a + 3; 执行后,a 的值为8。( ✓ 正确

    【答案:正确 ✓】 解析:

    • int a = 5; → a 的初始值为 5
    • a = a + 3; → 先计算右边 a + 3 = 5 + 3 = 8,再将 8 赋值给 a
    • 最终 a = 8 ✅
    • 这是基本的赋值运算,右边先计算,再将结果赋给左边变量

    17. while 循环保证循环体至少执行一次。( ✗ 错误

    【答案:错误 ✗】 解析:

    • while 循环:先判断条件,条件为真才执行循环体,可能一次都不执行
    • do-while 循环:先执行循环体,再判断条件,保证至少执行一次
    • 例如:while(false) { ... } 循环体永远不会执行
    • 要保证至少执行一次,应使用 do-while 结构

    18. 在C++函数中,值传递的参数在函数内被修改,不会影响函数外的变量。( ✓ 正确

    【答案:正确 ✓】 解析:

    • 值传递:将实参的副本传给形参,函数内部修改的是副本,不影响原变量
    void func(int x) { x = 100; }  // 只修改了副本x
    int a = 5;
    func(a);           // a仍然是5,不受影响
    
    • 引用传递/指针传递:才会影响原变量
    • 这是C++函数参数的重要概念!

    19. 递归函数必须有停止条件,否则会无限递归。( ✓ 正确

    【答案:正确 ✓】 解析:

    • 递归:函数调用自身
    • 必须有的要素
      1. 基准情形(停止条件):直接返回,不再递归
      2. 递归情形:问题缩小,向基准情形靠近
    • 没有停止条件的后果
      • 无限递归 → 栈溢出(Stack Overflow)→ 程序崩溃
    • 示例:
    int factorial(int n) {
        if (n <= 1) return 1;  // ← 停止条件(基准情形)
        return n * factorial(n - 1);  // ← 递归情形
    }
    

    20. 指针变量存储的是另一个变量的地址,通过 * 运算符可以访问该地址中的值。( ✓ 正确

    【答案:正确 ✓】 解析:

    • 指针:专门用来存储内存地址的变量
    • &(取地址运算符):获取变量的地址
    • *(解引用运算符):访问指针指向地址中存储的值
    int a = 10;
    int *p = &a;    // p 存储a的地址
    cout << *p;     // 输出 10(访问p指向的值)
    *p = 20;         // 修改p指向的值,a也变成20
    
    • 这是C++指针的核心概念!
    • 1

    信息

    ID
    4867
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    67
    已通过
    19
    上传者