1 条题解
-
0
《星火征途》初赛模拟卷七(小学组)
一、单选题(每题5分,共75分)
1. 在模拟抗日战争中英雄传递情报的编程任务中,执行以下程序段,输出的结果是( A )
for (int j=1;j<=6;j++){ if(j%3==0) break; cout <<j <<" "; }【答案:A】
- A. 1 2 ✅ 正确!循环中 j 从 1 递增到 6,当
j % 3 == 0时触发 break。j=1 时 1%3≠0,输出 1;j=2 时 2%3≠0,输出 2;j=3 时 3%3==0,break 终止循环。最终输出 "1 2" - B. 1 2 3 ❌ j=3 时 break 已触发,不会输出 3
- C. 1 2 3 4 5 6 ❌ break 在 j=3 时已终止循环,不会继续输出
- D. 1 2 4 5 6 ❌ break 不是 continue,不会跳过 3 继续,而是直接结束循环
2. 在长征途中,红军需要设定一个不可更改的行军目标距离。下列哪个是C++中定义这种常量的正确方式?( B )
【答案:B】
- A.
#define int MAX 100❌#define宏定义不需要指定类型,正确的写法是#define MAX 100 - B.
const int MAX=100;✅ 正确!const关键字用于定义不可修改的常量,是 C++ 中定义常量的标准方式 - C.
static const int MAX=100;❌ 语法上可行但过于复杂,static用于控制存储周期而非定义常量,普通场景用const即可 - D.
int MAX=100;❌ 普通变量,值可以被修改,不符合"不可更改"的要求
3. 在编写《小英雄雨来》故事模拟程序时,需要使用字符常量表示不同角色编号。常量
'3'用于表示一个角色。这个常量的数据类型是( C )。【答案:C】
- A. double ❌ double 是双精度浮点类型,字符常量不是 double
- B. float ❌ float 是单精度浮点类型,字符常量不是 float
- C. char ✅ 正确!单引号
'3'包围的是字符常量,C++ 中字符常量的类型为char - D. int ❌ 虽然字符在底层以 ASCII 码存储,但其类型是
char而非int;双引号"3"才是字符串
4. 在《小英雄雨来》的故事中,为了编写一个密码程序,需要判断一个整数是否为质数。质数是只能被1和它本身整除的数。在横线处应填入的代码是( B )。
int N; cin >> N; int cnt = 0; for(int i=1; i<N+1; i++) if(__________) cnt +=1; if(cnt == 2) cout << N << "是质数"; else cout << N << "不是质数";【答案:B】
- A.
N % i❌N % i返回余数(非零即真),但条件判断需要明确比较,且质数判断需要余数为 0 时才计数,逻辑反了 - B.
N % i == 0✅ 正确!当 i 能整除 N(余数为 0)时,说明 i 是 N 的一个因数,cnt加 1。最终若cnt == 2(只有 1 和 N 本身两个因数),则 N 是质数 - C.
N / i=0❌=是赋值运算符而非比较运算符,N / i=0会编译错误(不能给表达式赋值) - D.
N / i❌N / i返回除法商值,无法用于判断整除关系;且 N>i 时结果非 0 恒为真,会导致每个 i 都计数
5. 在《小英雄雨来》的故事中,雨来需要测量一块长方形菜地的边界长度。如果用两个 int 类型的变量 a 和 b 分别表示长和宽,下列哪个表达式不能用来计算周长?( A )
【答案:A】
- A.
a+b*2❌ 错误!由于运算符优先级,*高于+,因此a+b*2等价于a + (b*2)= a + 2b,不是周长 2a+2b - B.
2*a+2*b✅ 正确!标准周长公式2a + 2b,结果正确 - C.
a+b+a+b✅ 正确!长+宽+长+宽,结果正确 - D.
b+a*2+b✅ 这个也能正确计算!a*2优先计算得 2a,然后b + 2a + b= 2a + 2b,结果正确。注意本题选"不能"的选项,A 不能而 D 可以
补充说明:选项 D
b+a*2+b虽然看起来不直观,但由于运算符优先级,a*2先计算,等价于b + 2a + b= 2a + 2b,能正确计算周长。
6. 在《狼牙山五壮士》故事的算法模拟中,下列关于算法的叙述不正确的是( B )
【答案:B】
- A. 算法的每一步必须没有歧义,不能有半点含糊 ✅ 正确!确定性(Determinism)是算法的基本特征之一,每一步操作都必须明确无歧义
- B. 算法必须有输入 ❌ 错误!算法可以没有输入(零个输入),例如输出当前时间的算法不需要任何输入参数
- C. 同一问题可能存在多种不同的算法 ✅ 正确!例如排序问题有冒泡排序、快速排序、归并排序等多种算法
- D. 同一算法可以用多种不同的形式来描述 ✅ 正确!同一算法可以用自然语言、流程图、伪代码、编程语言等多种方式描述
7. 在传承井冈山精神的编程任务中,需要计算正方形纪念广场的周长。int 类型变量 a 表示边长,下列哪个语句执行后能够使周长增加4?( D )
【答案:D】
- A.
a*4;❌ 该表达式计算结果被丢弃,没有修改 a 的值,周长不变 - B.
a+4;❌ 该表达式计算结果被丢弃,没有修改 a 的值,周长不变 - C.
a+1;❌ 该表达式计算结果被丢弃,没有修改 a 的值,周长不变 - D.
++a;✅ 正确!++a将 a 的值增加 1(边长增加 1),正方形周长 = 4 × a,因此周长增加 4 × 1 = 4
8. 在模拟长征路线的程序中,需要定义变量记录行进信息。以下不可以作为C++变量名(标识符)的是( B )
【答案:B】
- A. x321 ✅ 正确!字母开头后跟数字,合法标识符
- B. 0x321 ❌ 错误!以数字 0 开头,C++ 标识符不能以数字开头。此外
0x前缀还会被误认为十六进制常量 - C. x321_ ✅ 正确!字母开头后跟数字和下划线,合法标识符
- D. _x321 ✅ 正确!下划线开头后跟字母和数字,合法标识符(虽然通常不推荐以下划线开头)
9. 在模拟红军长征的编程任务中,有一段代码用于计算每日行军里程,输出为"1248"。横线处应填写哪一条语句?( B )
#include <iostream> using namespace std; int main(){ for(int i=1;i<=8;________) cout <<i; return 0; }【答案:B】
- A.
i++❌ i 每次加 1,输出为 "12345678",不是 "1248" - B.
i *= 2✅ 正确!i 依次为 1、2、4、8,输出 "1248"。流程:i=1 输出 1 → i*=2=2 输出 2 → i*=2=4 输出 4 → i*=2=8 输出 8 → i*=2=16 > 8 结束 - C.
i += 2❌ i 每次加 2,输出为 "1357",不是 "1248" - D.
i * 2❌ 表达式计算结果未被赋值给 i,i 不变(恒为 1),导致死循环输出无数个 1
10. 在《狼牙山五壮士》红色教育程序中,屏幕输出 n+1 行直角三角形图案。输入正整数 n,输出对应图案,则①处应补充的代码为?( B )
int n; cin>>n; cout<<"*"<<endl; for (int i=1;i<=n;i++){ for (int j=1;________;j++){ cout<<"*"; } cout <<endl; }【答案:B】
- A.
j <= 2 * i❌ 每行输出 2i 个星号,行数增长过快,不符合标准直角三角形规律 - B.
j <= i✅ 正确!第 1 行(循环前)输出 1 个星号;第 2 行(i=1)输出 1 个星号;第 3 行(i=2)输出 2 个星号;以此类推,形成直角三角形图案。总行数为 n+1 行 - C.
j<=2 * i-1❌ 每行输出 2i-1 个星号(奇数序列),形成的是等边三角形而非直角三角形 - D.
j<=2 * i+1❌ 每行输出 2i+1 个星号,行数增长过快
11. 在抗日战争时期,地下党用一段字符密语传递情报。若定义
char a[10] = "word";,则数组 a 在内存中所占字节数(char 为1字节)是多少?( C )【答案:C】
- A. 4 ❌ 4 是字符串 "word" 的长度(不含结尾符),不是数组的占用空间
- B. 5 ❌ 5 是字符串 "word" 加上结尾符
\0的长度,不是数组的占用空间 - C. 10 ✅ 正确!数组
a[10]声明了 10 个 char 类型的元素,每个 char 占 1 字节,总共占用 10 字节。即使只初始化了 4 个字符,数组的大小仍然是 10 - D. 不定值 ❌ 数组大小在声明时已确定为 10,是固定值
12. 在《小英雄雨来》的故事中,雨来用程序记录村中物资数量。下面C++代码执行后的输出是( C )。
int N=10; int cnt = 0; while (1){ if(N == 0) break; cnt += 1; N -=2; } cout << cnt;【答案:C】
- A. 11 ❌ N 从 10 开始每次减 2,需要减 5 次才到 0,cnt 应为 5
- B. 10 ❌ 每次循环 N 减小 2,N=10 时需要 5 轮循环到 0,cnt=5
- C. 5 ✅ 正确!循环过程:N=10 → cnt=1,N=8 → cnt=2,N=6 → cnt=3,N=4 → cnt=4,N=2 → cnt=5,N=0 → break,输出 cnt=5
- D. 4 ❌ 当 N=10 时,需要 10÷2=5 次减法才能到 0,cnt 最终为 5,不是 4
13. 在长征途中,红军需要判断物资数量 N 是否能平均分配。下面程序用于判断 N 是否为偶数,横线处应填写的代码是( A )。
cin >> N; if(________) cout <<"偶数"; else cout <<"奇数";【答案:A】
- A.
N % 2 == 0✅ 正确!当 N 除以 2 的余数为 0 时,N 为偶数,输出"偶数";否则为奇数,输出"奇数" - B.
N % 2 = 0❌=是赋值运算符而非比较运算符,N % 2 = 0会编译错误(不能给右值赋值) - C.
N % 2❌ N 为偶数时N % 2 = 0(假),会输出"奇数";N 为奇数时N % 2 = 1(真),会输出"偶数",逻辑正好相反 - D.
N % 2 != 0❌ 这恰好是奇数的判断条件,应该输出"奇数",但代码中该分支输出的是"偶数",逻辑错误
14. 在纪念英雄黄继光的编程任务中,程序判断物资箱数是否能整除3。下面C++代码执行时输入10后,正确的输出是( C )。
int N; cout << "请输入正整数:"; cin >> N; if (N % 3) printf("第5行代码%2d", N % 3); else printf("第6行代码%2d", N % 3);【答案:C】
- A. 第5行代码1 ❌
%2d格式化输出会右对齐占 2 位,1 前面有一个空格,所以输出为"第5行代码 1"而非"第5行代码1" - B. 第6行代码1 ❌ 输入 10 时,
10 % 3 = 1为非零值(真),执行 if 分支(第5行),不执行 else 分支(第6行) - C. 第5行代码 1 ✅ 正确!输入 10,
10 % 3 = 1(真),执行printf("第5行代码%2d", 1),%2d将 1 右对齐占 2 位输出为" 1",结果为"第5行代码 1" - D. 第6行代码 1 ❌ 两个错误:1)分支错误,应执行第5行;2)即使执行第6行,
%2d也会输出" 1"而非"1"
15. 在讲述《小英雄雨来》的程序中,要求将输入的字符串中前三个大写字母转换为小写,其余字母保持不变。输入:ABCdef,输出应为( D )
char ch; while ((ch = getchar ())!= '\n'){ if (ch >= 'A' && ch <='Z') ch = ch + 32; else if (ch >= 'a' && ch <='z') ch = ch -32; cout << ch; }【答案:D】
- A. ABCdef ❌ 代码执行后所有字符都会发生大小写转换,不会是原样输出
- B. abcdef ❌ A→a, B→b, C→c 正确,但 d→D, e→E, f→F(小写转大写),结果应为 abcDEF
- C. ABCDEF ❌ A→a(大写转小写),不是保持大写
- D. abcDEF ✅ 正确!逐个字符处理:A(大写)→a (A+32);B(大写)→b (B+32);C(大写)→c (C+32);d(小写)→D (d-32);e(小写)→E (e-32);f(小写)→F (f-32)。最终输出 "abcDEF"
⚠️ 注意:题目描述说"前三个大写字母转换为小写,其余字母保持不变",但实际代码对所有字母都做了大小写转换(大写变小写,小写变大写),因此实际输出为 abcDEF
二、判断题(每题5分,共25分)
16. 在模拟红军长征翻越雪山的程序中,使用 while 循环判断海拔是否安全。如果初始海拔超过危险值,循环条件不成立,循环体将不会被执行。这个说法对吗?( ✓ 正确 )
【答案:正确 ✓】 解析:
- while 循环的特点是先判断条件,后执行循环体
- 如果初始条件为 false,循环体一次都不会执行
- 例如:
while (altitude < danger)中,若初始 altitude = 5000、danger = 3000,则条件5000 < 3000为 false,循环体直接跳过 - 这与 do-while 循环不同(do-while 至少执行一次循环体)
- 因此该说法正确 ✓
17. 在模拟红军长征路线选择的程序中,if 语句用于判断是否到达目的地,其条件表达式的结果必须为 bool 类型。( ✗ 错误 )
【答案:错误 ✗】 解析:
- 在 C++ 中,if 语句的条件表达式不要求必须是 bool 类型
- 任何可以隐式转换为 bool 的类型都可以:整型(0 为 false,非 0 为 true)、指针(nullptr 为 false,非空为 true)、浮点型等
- 例如:
if (5)是合法的,5 作为非零值被视为 true - 但 C 语言中也是如此,C++ 继承了这一特性
- 因此"必须为 bool 类型"的说法是错误的 ✗
18. 在讲述黄继光英勇事迹的程序中,模拟冲锋次数。以下程序段中,循环体的循环次数为4次。( ✓ 正确 )
int i= 0; do{ i++; }while(i*i<10);【答案:正确 ✓】 解析:
- do-while 循环至少执行一次循环体
- 执行过程:
- 第 1 次:i=0 → i++ → i=1,判断
1*1=1<10,继续 - 第 2 次:i=1 → i++ → i=2,判断
2*2=4<10,继续 - 第 3 次:i=2 → i++ → i=3,判断
3*3=9<10,继续 - 第 4 次:i=3 → i++ → i=4,判断
4*4=16>=10,结束
- 第 1 次:i=0 → i++ → i=1,判断
- 共执行 4 次循环体 ✓
19. 在延安时期,广播设备通过输入关键词播放红色故事,说明该设备中可能运行了交互式程序。( ✓ 正确 )
【答案:正确 ✓】 解析:
- 交互式程序是指能够接收用户输入并做出响应的程序
- 广播设备能够"输入关键词播放红色故事",说明它接收了用户输入(关键词),并根据输入给出反馈(播放对应故事)
- 这完全符合交互式程序的定义:输入 → 处理 → 输出
- 因此该说法正确 ✓
20. 在模拟董存瑞炸碉堡的红色教育程序中,每前进3步标记一次位置。下面C++代码执行后,最后一次标记的位置是10。( ✗ 错误 )
for (int i = 1; i < 10; i+=3) cout << i << endl;【答案:错误 ✗】 解析:
- 循环执行过程:
- i=1:输出 1,i+=3 → i=4
- i=4:输出 4,i+=3 → i=7
- i=7:输出 7,i+=3 → i=10
- i=10:
10 < 10为 false,循环结束
- 输出位置依次为:1、4、7
- 最后一次标记的位置是 7,不是 10
- 因此说法错误 ✗
- A. 1 2 ✅ 正确!循环中 j 从 1 递增到 6,当
信息
- ID
- 4882
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 19
- 已通过
- 7
- 上传者