1 条题解
-
0
这是一份涵盖了C++基础语法、循环逻辑、数学运算以及计算机常识的测试题。以下是所有题目的答案以及详细的解析:
单选题 (1 - 15)
1、以下不可以做为C++变量的是( )。
- 答案:
- 5Star(通常对应选项C) - 详细解释: C++的标识符(变量名)命名规则规定,变量名只能由字母、数字和下划线组成,并且第一个字符必须是字母或下划线,不能是数字。
5Star以数字5开头,因此是非法的变量名。
2、在C++中,与
for(int i = 10; i < 20; i +=2) cout << i;输出结果相同的是( )。- 答案:
- for(int i = 10; i < 19; i +=2) cout << i;(通常对应选项A) - 详细解释: 原代码的循环变量
i初始为10,每次增加2,只要i < 20就执行输出。因此输出结果为:10 12 14 16 18。当i变成 20 时,循环结束。选项A中,i < 19时,输出到18后,下一步i变成20,不再满足条件退出,输出结果完全一致。
3、以下C++代码实现从小到大的顺序输出能整除N的数...横线处应填入( )。
- 答案:
- int i = 1; i < N+1; i++(通常对应选项D) - 详细解释: 找数字
N的因子,由于除数(或取余操作)不能为0,所以循环变量i必须从1开始(排除选项A和C)。同时,N本身也是N的因子,所以循环必须能执行到i == N,条件应为i <= N或等价的i < N+1。
4、下面C++代码用于判断输入的整数是否为对称数...说法正确的是( )。
- 答案:
- 代码没有语法错误,但不能达到预期目标,因为循环结束N总为0。(通常对应选项D) - 详细解释: 原代码逻辑中使用
while(N)并在循环体内执行N = N / 10;来逐位拆解整数。当while循环结束时,原变量N的值一定已经被除到了0。随后执行if(newNum == N)相当于始终在拿翻转后的数与0做比较,所以原代码逻辑有漏洞,无法达到预期目标,应该使用一个临时变量先备份原本的N值。
5、下面C++代码用于判断N是否为质数...说法正确的是()。
- 答案:
- 代码存在漏洞,边界存在问题,应将第2行和第7行的 N / 2 改为 N / 2 + 1 。(通常对应选项D) - 详细解释: 当
N = 4时,N / 2 = 2。此时循环for(i = 2; i < 2; i++)不会执行。随后由于i的初始值为2,第7行的判断if(2 >= 2)成立,会错误地输出“4 是质数”。将边界改为N / 2 + 1(即变成i < 3)就能让N=4时正常进入循环被2整除,从而修补了这个边界漏洞。
6、下面C++代码执行后的输出是( )。
- 答案:
- 2#3#(通常对应选项D) - 详细解释: 观察代码缩进和花括号,内层
for循环没有大括号,所以只有if语句属于内层循环。第7行的continue;属于外层循环。因为外层循环每次都执行continue;,导致底部的cout << "0";永远被跳过,不可能输出0。 - 当
i=2时,j=1,2*1%2 == 0,输出2#。 - 当
i=3时,j=2时3*2%2 == 0,输出3#。 故输出为2#3#。
7、下面C++代码执行后的输出是( )。
- 答案:
- 4#4(通常对应选项D) - 详细解释: 外层循环
i从1走到9。内层循环j从1开始每次+2,所以j永远是奇数。要想i * j % 2 == 0(即乘积为偶数),由于j是奇数,所以i必须是偶数。因此只有当i为2, 4, 6, 8(共4个偶数)时,满足条件执行cnt++并break。循环结束时cnt的值为4。结束时i增加到10,所以i >= 10成立,输出4#,接着最后输出cnt的值4,结果是4#4。
8、下面C++代码执行后的输出是( )。
- 答案:
- 55(通常对应选项C) - 详细解释:
- N=100:偶数,且不能被3整除,执行
N -= 20,N变为80。 - N=80:偶数,且不能被3整除,执行
N -= 20,N变为60。 - N=60:偶数,能被3整除,执行
N -= 5,N变为55。 - N=55:奇数,触发
if(N % 2) break;退出循环。 - 最终输出55。
9、下面C++代码执行后的输出是( )。
- 答案:
- 1,10,12(通常对应选项D) - 详细解释:
- 初始
x=1。1%3 != 0成立,输出1,,随后执行底部x += 2,x变3。 x=3。3%3 == 0,且3/10结果为 0(逻辑假)。进入else分支x += 5,x变8。执行x += 2,x变10。x=10。10%3 != 0成立,输出10,,随后执行底部x += 2,x变12。x=12。12%3 == 0,且12/10结果为 1(逻辑真)。触发break,退出循环。- 最后输出此时的x,即
12。拼在一起是1,10,12。
10、下面C++代码执行后的输出是( )。
- 答案:
- 10(通常对应选项B) - 详细解释: 这是一个典型的嵌套循环计数题。外层
i从 0 到 4(5次)。内层j从 0 循环到i-1(即执行i次)。 - i=0时,内层执行 0 次;i=1时,执行 1 次;i=2时,执行 2 次;i=3时,执行 3 次;i=4时,执行 4 次。
cnt的总增加量 = 0 + 1 + 2 + 3 + 4 = 10。
11、以下C++代码用于输出1-100(含)的整数平方数...横线处应填写( )。
- 答案:
- int(sqrt(i)) * int(sqrt(i)) == i(通常对应选项C) - 详细解释: 判断一个整数
i是否为完全平方数,标准且不会产生浮点精度误差的做法是:先对i开平方取整,然后再将该整数平方,看是否与原数i相等。选项A和D误用了赋值号=而不是判断相等的==。
12、应在以下右图C++代码中填入( )。
- 推断答案:
- 与第9行下面填入一行: cout << endl;(通常对应选项D) - 详细解释: 由于原题图片无法直接查看,但从代码补全逻辑来看,这类控制台打印递增图形(如金字塔、直角三角形)的题目,在内层列循环结束后、外层行循环继续前,必然需要输出一个换行符
cout << endl;以确保图形逐行排列。选项D符合常规的打印换行逻辑。
13、下面哪项不是驾驶系统完成选路所必须的。( )
- 答案:
- 油量表(通常对应选项C) - 详细解释: 题目提到系统基于“告诉目的地,系统自动选路,告诉乘客后驶达”。麦克风用于获取目的地指令,扬声器用于语音告诉乘客,传感器用于避障和物理行驶。而路线规划(算法计算)的必要条件是地图数据和定位,油量表不是规划出一条最优路线算法所“必须”的要素。
14、现代计算机是指电子计算机,它所基于的是( )体系结构。
- 答案:
- 冯·诺依曼(通常对应选项B) - 详细解释: 现代计算机普遍采用的基础架构是“冯·诺依曼体系结构”(Von Neumann Architecture),其核心思想是“存储程序”以及将计算机分为运算器、控制器、存储器、输入设备和输出设备五大部分。
15、找出所有相邻的因数对...下面哪段代码找不到所有的因数对?( )
- 答案:
- for(i=2;i<N;i++) if(!(N%i) && !(N%(i+1))) printf("(%d,%d)\n", i, i+1);(通常对应选项B) - 详细解释: 选项B中循环变量
i的初始值设为了2,因此它第一次检查的是(2,3)。它直接遗漏掉了第一对最小的相邻因数对——即i=1时的(1,2)。因此这段代码无法找到“所有”的相邻因数对。
判断题 (16 - 25)
16、C++表达式
-7/2的值为整数-3。( )- 答案: 对
- 解释: 在C++中,两个整数相除的结果仍然是整数。负数除法运算时结果会向零取整(截断小数部分),所以
-7 / 2得到-3。
17、C++表达式
2*int('9')*2的值为36。( )- 答案: 错
- 解释:
'9'是一个字符,在ASCII码中对应的整数值是57。所以int('9')的值为 57,整个表达式计算结果为2 * 57 * 2 = 228,而不是36。如果想得到36,需要写成int('9' - '0')。
18、C++表达式
3+2 && 5-5的值为false。( )- 答案: 对
- 解释: 算术运算优先级高于逻辑运算。
3+2为 5(逻辑上的true),5-5为 0(逻辑上的false)。由于逻辑与(&&)运算中有一方为假,结果即为false(或0)。
19、在C++代码中,执行
srand(0)后连续两次执行rand()的结果相等。 ( )- 答案: 错
- 解释:
srand(0)只是设置了随机数生成的“种子”。设置种子后,每次调用rand()都会按照特定算法在序列中生成下一个不同的伪随机数。除非巧合,连续两次调用的结果是不相等的。
20、C++代码中
while(1){...}的判断条件不是逻辑值,将导致语法错误。( )- 答案: 错
- 解释: 在C++中,整数
1可以隐式转换为布尔类型的true,这是非常合法的语法。while(1)是构建无限循环的极常见写法,不会报错。
21、执行以下C++代码后将输出
0。( )- 答案: 错
- 解释: 代码中循环遍历的是
i从-500到499(因为条件是i < 500)。这其中从-499到499累加和为0,但最前面还有一个-500没被抵消。最终的总和Sum应该是-500而不是0。
22、在C++代码中,运算符只能处理相同的数据类型,不同类型之间必须转换为相同的数据类型。( )
- 答案: 错
- 解释: C++具备隐式类型转换(自动类型转换)机制。例如,将
int和double直接相加时,编译器会自动将int提升为double再进行运算。开发者并不“必须”手动写出转换代码。
23、在C++代码中,虽然变量都有数据类型,但同一个变量也可以先后用不同类型的值赋值。( )
- 答案: 对
- 解释: 在C++中,你可以将不同类型的值赋给已有的变量(例如把一个
double数值赋给int型变量),编译器会自动进行隐式转换(这可能会导致精度丢失或截断,但语法上是完全允许和支持的)。
24、小杨最近在准备考GESP,他用的Dev C++来练习和运行程序,所以Dev C++也是一个小型操作系统。( )
- 答案: 错
- 解释: Dev-C++ 是一个集成开发环境(IDE),是一个用来编写、编译和调试程序的应用软件,而不是操作系统(OS)。操作系统指的是像 Windows、Linux、macOS 这样的系统软件。
25、任何一个 while 循环都可以转化为等价的
for循环( )。- 答案: 对
- 解释: 几乎所有的
while(条件)循环都可以直接改写为for(; 条件;)格式。两者在逻辑控制能力上是完全等价的。
- 答案:
- 1
信息
- ID
- 4761
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者