试卷解析 · 理解每一步
2023-12-Level-2
2023-12-Level-2
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题,2 分)
以下不可以做为C++变量的是()。
正确答案C
解析详情
C++ 标识符 必须以字母或下划线开头,不能以数字开头。5Star 以数字 5 开头,不符合命名规则。
第 2 题(单选题,2 分)
在C++中,与for(int i = 10; i < 20; i += 2) cout << i; 输出结果相同的是()。
正确答案A
解析详情
原循环 `i` 取值:10, 12, 14, 16, 18(共5个数)。选项 A 范围 `[10, 19)`,步长 2,取值同样为 10, 12, 14, 16, 18。选项 B 起点为 11 会输出 11, 13, 15, 17。选项 C 范围 `[10, 21)` 会多输出 20。
第 3 题(单选题,2 分)
以下C++代码实现从小到大的顺序输出能整除N的数(N的因子),例如N=18时输出1236918,横线处应填入( )。
cin >> N;
for ( ___)
if (N % i == 0)
cout << i << " " ;正确答案D
解析详情
求 N 的所有因子需要遍历范围 [1, N]。选项 A、C 从 0 开始会导致 `N % 0` 运行时错误(除零异常);选项 B 终止条件 `i < N` 漏掉了 N 本身;选项 D 范围为 `[1, N]`,正确。
第 4 题(单选题,2 分)
下面C++代码用于判断输入的整数是否为对称数,如1221、12321是对称数,但123、972不是对称数。下面对该题对应代码的说法,正确的是()。
cin >> N;
newNum = 0;
while(N) {
newNum = newNum * 10 + N % 10;
N = N / 10;
}
if(newNum == N)
cout << N << "为对称数";正确答案D
解析详情
`while(N)` 循环结束后,变量 `N` 的值必然为 0。第 7 行 `if(newNum == N)` 实际上是将反转后的数与 0 比较,而非与原数比较。应在循环前用临时变量保存 `N` 的原始值。
第 5 题(单选题,2 分)
下面C++代码用于判断N(大于等于2的正整数)是否为质数(素数)。下面对如下代码的说法,正确的是()。
cin >> N;
for(i = 2; i < N / 2; i++)
if(N % i == 0) {
cout << N << "不是质数";
break;
}
if(i >= N / 2)
cout << N << "是质数";正确答案D
解析详情
当 `N=4` 时,`N/2=2`,循环条件 `i < 2` 不成立,循环体不执行。此时 `i` 保持 2,满足 `if(i >= 2)`,输出“4是质数”,显然错误。应将条件改为 `i <= N/2` 或 `i < N/2 + 1` 以检查到 `N/2`。
第 6 题(单选题,2 分)
下面C++代码执行后的输出是()。
N = 4;
for (int i = 0; i < N; i++) {
for (int j = 1; j < i; j++)
if (i * j % 2 == 0)
cout << i << "#";
continue;
}
cout << "0";正确答案A
解析详情
1. `i=0, 1`: `j<i` 不成立,无输出。
2. `i=2`: `j=1`,`2*1%2==0`,输出 `2#`。
3. `i=3`: `j=1` 时 `3*1%2!=0`;`j=2` 时 `3*2%2==0`,输出 `3#`。
4. 循环结束输出 `0`。综合输出 `2#3#0`。
第 7 题(单选题,2 分)
下面 C++ 代码执行后的输出 is()。
cnt = 0;
for (i = 1; i < 10; i++)
for (j = 1; j < i; j += 2)
if (i * j % 2 == 0) {
cnt++;
break;
}
if (i >= 10) cout << cnt << "#";
cout << cnt;正确答案D
解析详情
`i` 遍历 1-9,`j` 每次增加 2 且 `j < i`,即 `j` 取奇数。当 `i` 为偶数(2, 4, 6, 8)时,存在 `i*j` 为偶数,执行 `cnt++` 并 `break`。循环结束 `cnt=4`,`i=10`。满足 `if(i >= 10)` 输出 `4#`,最后输出 `4`。
第 8 题(单选题,2 分)
下面C++代码执行后的输出是()。
N=100;
while (N > 0)
if (N % 2)
break;
else if (N % 3 == 0)
N -= 5;
else
N -= 20;
cout << N;正确答案C
解析详情
1. `N=100`: 偶数且 `100%3!=0`,执行 `N-=20` 得 80。
2. `N=80`: 偶数且 `80%3!=0`,执行 `N-=20` 得 60。
3. `N=60`: 偶数且 `60%3==0`,执行 `N-=5` 得 55。
4. `N=55`: 奇数,执行 `break` 跳出。最终输出 55。
第 9 题(单选题,2 分)
下面C++代码执行后的输出是()。
x = 1;
while (x < 100) {
if (x % 3 != 0)
cout << x << ",";
else if (x / 10)
break;
else
x += 5;
x += 2;
}
cout << x;正确答案D
解析详情
1. `x=1`: `1%3!=0` 输出 `1,`,`x` 变为 1+2=3。
2. `x=3`: `3%3==0` 且 `3/10=0`,执行 `x += 5; x += 2;` 后 `x=10`。
3. `x=10`: `10%3!=0` 输出 `10,`,`x` 变为 10+2=12。
4. `x=12`: `12%3==0` 且 `12/10=1`,执行 `break` 跳出。最后输出 `12`。综合结果 `1,10,12`。
第 10 题(单选题,2 分)
下面 C++ 代码执行后的输出是()。
cnt = 0;
for (i=0; i<5; i++)
for (j=0; j<i; j++)
cnt += 1;
cout << cnt;正确答案B
解析详情
内层循环执行次数取决于 `i` 的值。当 `i` 分别取 0, 1, 2, 3, 4 时,`j` 的循环次数分别为 0, 1, 2, 3, 4。总执行次数为 0+1+2+3+4 = 10 次。
第 11 题(单选题,2 分)
以下C++代码用于输出1-100(含)的整数平方数(完全平方数),如16是4的平方,横线处应填写()。
for (i=1; i < 100+1; i++)
if ( ___)
cout << i << "";正确答案C
解析详情
判断 `i` 是否为完全平方数,可通过 `sqrt(i)` 取整后再平方,看结果是否等于 `i`。选项 C 的逻辑 `int(sqrt(i)) * int(sqrt(i)) == i` 正确。选项 A 使用了赋值运算符 `=`;选项 B 浮点数比较可能存在精度问题。
第 12 题(单选题,2 分)
下面的 C++ 代码用于实现如下左图所示的效果,应在以下右图 C++ 代码中填入()。
0
01
012
0123
01234
012345
0123456
01234567
012345678
0123456789
01234567890
012345678901正确答案D
解析详情
题干展示了一个典型的数字金字塔,每一行数字输出完毕后需要换行。在双重循环结构中,外层循环代表行,因此在内层循环(第 9 行)结束后添加 `cout << endl;` 即可实现逐行递增输出的效果。
第 13 题(单选题,2 分)
某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。()
正确答案C
解析详情
声控智能驾驶系统需要:麦克风(接收声音指令)、传感器(感知路径环境)、扬声器(反馈路径信息)。油量表属于车辆状态监控,不是完成“选路”(路径规划)逻辑的必要组件。
第 14 题(单选题,2 分)
现代计算机是指电子计算机,它所基于的是()体系结构。
正确答案B
解析详情
冯·诺依曼提出了“存储程序”原理,规定计算机由控制器、运算器、存储器、输入设备 and 输出设备五部分组成,这构成了现代计算机的体系结构。
第 15 题(单选题,2 分)
输入一个正整数N,想找出它所有相邻的因数对,比如,输入12,因数对有(1,2)、(2,3)、(3,4)。下面哪段代码找不到所有的因数对?()
正确答案B
解析详情
输入 12 时,因数对包含 (1, 2)。选项 B 的循环起点为 `i=2`,此时无法检查 `i=1` 和 `i+1=2` 这一对因数,导致漏掉 (1, 2)。其他选项均能覆盖 1 到 N/2 的范围。
判断题
第 1 题(判断题,2 分)
C++表达式 -7/2 的值为整数 -3。()
正确答案正确
解析详情
C++ 中整数除法执行截断取整(向零取整)。-7 / 2 = -3.5,截断小数部分后结果为 -3。
第 2 题(判断题,2 分)
C++表达式 2*int('9')*2 的值为36。()
正确答案错误
解析详情
在 C++ 中,`int('9')` 获取的是字符 '9' 的 ASCII 码,值为 57。表达式计算为 2 * 57 * 2 = 228,而非 2 * 9 * 2 = 36。
第 3 题(判断题,2 分)
C++ 表达式 3+2 && 5-5 的值为 false。()
正确答案正确
解析详情
`3+2` 结果为 5,在逻辑判断中视为 true;`5-5` 结果为 0,视为 false。根据逻辑与运算“全真才为真”,`true && false` 结果为 false。
第 4 题(判断题,2 分)
在C++代码中,执行 srand(θ) 后连续两次执行 rand() 的结果相等。()
正确答案错误
解析详情
`srand(seed)` 用于初始化随机数种子。初始化后,调用 `rand()` 会根据该种子生成 a 伪随机序列。序列中的每个数通常是不同的,连续调用两次 `rand()` 不会得到相同的结果。
第 5 题(判断题,2 分)
C++代码中 while(1){...} 的判断条件不是逻辑值,将导致语法错误。()
正确答案错误
解析详情
C++ 允许将整型隐式转换为布尔型。在 `while` 判断中,非零值被视为 true,0 被视为 false。因此 `while(1)` 是完全合法的语法,表示无限循环。
第 6 题(判断题,2 分)
执行以下C++代码后将输出0。()
Sum = 0;
for (i = -500; i < 500; i++)
Sum += i;
cout << Sum;正确答案错误
解析详情
循环范围是 `[-500, 500)`,即从 -500 累加到 499。其中 `[-499, 499]` 部分的正负数相互抵消,和为 0。最终 `Sum` 的值为初始项 -500。
第 7 题(判断题,2 分)
在C++代码中,运算符只能处理相同的数据类型,不同类型之间必须转换为相同的数据类型。()
正确答案错误
解析详情
C++ 具有自动类型转换机制(隐式转换)。例如 `int` 和 `double` 运算时,`int` 会自动提升为 `double` 再进行计算,并不要求程序员必须手动强制转换。
第 8 题(判断题,2 分)
在 C++ 代码中,虽然变量都有数据类型,但同一个变量也可以先后用不同类型的值赋值。()
正确答案正确
解析详情
虽然 C++ 是强类型语言,但允许不同类型之间进行赋值。如果类型不匹配,编译器会进行隐式转换(如将 `double` 赋给 `int` 会发生截断)。
第 9 题(判断题,2 分)
小杨最近在准备考GESP,他用的Dev C++来练习和运行程序,所以Dev C++也是一个小型操作系统。()
正确答案错误
解析详情
Dev C++ 是一种集成开发环境(IDE),属于应用软件。操作系统(如 Windows, Linux)是系统软件,负责管理硬件资源,二者概念完全不同。
第 10 题(判断题,2 分)
任何一个 while 循环都可以转化为等价的 for 循环()。
正确答案正确
解析详情
`for` 循环和 `while` 循环都是图灵完备的控制结构。任何 `for` 循环都可以写成带有初始化 and 迭代步长的 `while` 循环,反之亦然。