1 条题解
-
0
《星火征途》初赛模拟卷(一)
一、单选题(每题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 = 9,12 > 9为 true,执行 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 的初始值为 5a = 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. 递归函数必须有停止条件,否则会无限递归。( ✓ 正确 )
【答案:正确 ✓】 解析:
- 递归:函数调用自身
- 必须有的要素:
- 基准情形(停止条件):直接返回,不再递归
- 递归情形:问题缩小,向基准情形靠近
- 没有停止条件的后果:
- 无限递归 → 栈溢出(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
- 上传者