GESP 客观题评测系统

2024-06-Level-2

2024-06-Level-2

试卷解析总览,可直接查看每题答案与解析。

单选题(每题 2 分)

1 题(单选题

小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?()

A.
1
B.
2
C.
3
D.
4

正确答案C

解析详情

【答案】C 【考点】GESP 认证常识 【解析】GESP(编程能力等级认证)第 1 级目前提供的认证语言 include C++、Python 和图形化编程(Scratch),共 3 种。 【易错点】对认证提供的语言种类记忆不全。

2 题(单选题

下面流程图在yr输入2024时,可以判定yr代表闰年,并输出 2月是29天,则图中菱形框中应该填入()。

Image
A.
(yr%400==0) || (yr%4==0)
B.
(yr%400==0) || (yr%4==0 && yr%100!=0)
C.
(yr%400==0) && (yr%4==0)
D.
(yr%400==0) && (yr%4==0 && yr%100!=0)

正确答案B

解析详情

【答案】B 【考点】闰年判断逻辑 【解析】闰年的判断条件是:能被 400 整除,或者能被 4 整除但不能被 100 整除。对应的 C++ 逻辑表达式为 (yr % 400 == 0) || (yr % 4 == 0 && yr % 100 != 0)。 【易错点】逻辑运算符 && 和 || 的优先级或结合方式错误。

3 题(单选题

在C++中,下列不可做变量的是()。

A.
five-Star
B.
five_star
C.
fiveStar
D.
fiveStar

正确答案A

解析详情

【答案】A 【考点】C++ 变量命名规则 【解析】C++ 变量名不能包含减号(-),只能包含字母、数字和下划线。选项 A 中的 five-Star 不合法。 【易错点】混淆合法字符范围。

4 题(单选题

在C++中,与 for(int i=0; i<10; i++) 效果相同的是()。

A.
for(int i=0; i<10; i++)
B.
for(int i=1; i<=10; i++)
C.
for(int i=10; i>0; i--)
D.
for(int i=10; i<1; i++)

正确答案A

解析详情

【答案】A 【考点】循环结构等价性 【解析】选项 A 的代码与题干完全一致。其他选项虽然循环次数可能相同,但初始值、边界条件或增量不同,会导致循环变量 i 的取值序列不同。 【易错点】误认为只要循环次数相同就是效果相同。

5 题(单选题

在C++中,cout << (5 % 2 && 5 % 3) 的输出是()。

A.
1
B.
2
C.
true
D.
false

正确答案A

解析详情

【答案】A 【考点】逻辑运算与短路特性 【解析】5 % 2 为 1(真),5 % 3 为 2(真)。1 && 2 的逻辑结果为 true。在 C++ 中,cout 输出布尔真时默认显示为 1。 【易错点】对逻辑与运算结果的数值表示(1)不熟悉。

6 题(单选题

执行下面的C++代码时输入1,则输出是()。

int month;
cin >> month;
switch(month){
    case 1:
        cout << "Jan";
    case 3:
        cout << "Mar";
        break;
    default:
    ;
}
A.
Jan
B.
Mar
C.
Jan Mar
D.
以上均不对

正确答案C

解析详情

【答案】C 【考点】switch 语句的 fall-through 特性 【解析】输入 month 为 1。匹配 case 1,输出 "Jan"。由于 case 1 后面没有 break,程序会继续执行 case 3 的代码,输出 "Mar",然后遇到 break 退出。最终输出为 JanMar。 【易错点】忽略了 switch 语句在缺少 break 时的“穿透”行为。

7 题(单选题

执行下面 C++ 代码后,有关说法错误的是()。

int a, b;
cin >> a >> b;
if (a && b)
    cout << "1";
else if (!(a || b))
    cout << "2";
else if (a || b)
    cout << "3";
else
    cout << "4";
A.
如果先后输入1和1,则将输出1
B.
如果先后输入0和1或者1和0,则将输出3
C.
如果先后输入0和0,则将输出2
D.
如果先后输入0和0,则将输出4

正确答案D

解析详情

【答案】D 【考点】逻辑分支覆盖分析 【解析】输入 0 和 0 时:a 为假,b 为假。if (a && b) 失败;else if (!(a || b)) 等价于 !(0 || 0) 即 !0,为真。因此输出 2。选项 D 说输出 4 是错误的。 【易错点】复杂的逻辑非与逻辑或组合判断出错。

8 题(单选题

某货币由5元,2元和1元组成。输入金额(假设为正整数),计算出最少数量。为实现其功能,横线处应填入代码是()。

int N;
cin >>N;
int M5, M2, M1;
M5 = N / 5;
M2 = ___;
M1 = ___;
printf("5*%d+2*%d+1*%d", M5, M2, M1);
A.
第1横线处应填入:N / 2 第2横线处应填入:N - M5 - M2
B.
第1横线处应填入:(N - M5 * 5) / 2 第2横线处应填入:N - M5 * 5 - M2 * 2
C.
第1横线处应填入:N - M5 * 5 / 2 第2横线处应填入:N - M5 * 5 - M2 * 2
D.
第1横线处应填入:(N - M5 * 5) / 2 第2横线处应填入:N - M5 - M2

正确答案B

解析详情

【答案】B 【考点】货币找零算法(贪心思想) 【解析】为了使货币数量最少,应先尽可能使用面值大的货币。5 元用量 M5 = N/5。剩余金额 N - M5*5 中,2 元用量 M2 = (N - M5*5)/2。最后剩余的即为 1 元用量。 【易错点】公式中未扣除已分配的大面值货币金额。

9 题(单选题

下面C++代码执行后的输出是()。

int loopCount = 0;
for (int i=0; i < 10; i++)
    for (int j=1; j < i; j++)
        loopCount += 1;
cout << loopCount;
A.
55
B.
45
C.
36
D.
28

正确答案C

解析详情

【答案】C 【考点】嵌套循环执行次数计算 【解析】内层循环执行次数为 i-1(当 i > 1 时)。i 从 0 到 9 变化: i=2: 1次;i=3: 2次;... i=9: 8次。 总次数 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36。 【易错点】对内层循环起点 j=1 和终点 j < i 导致的次数计算偏差。

10 题(单选题

下面 C++ 代码执行后的输出 is()。

int loopCount = 0;
for (int i=0; i < 10; i++) {
    for (int j=0; j < i; j++)
        if (i * j % 2)
            break;
    loopCount += 1;
}
cout << loopCount;
A.
25
B.
16
C.
10
D.
9

正确答案C

解析详情

【答案】C 【考点】嵌套循环与 break 作用域 【解析】break 语句只能跳出它所在的最内层循环(即 j 循环)。无论内层循环是否被 break,外层循环末尾的 loopCount += 1 都会执行。外层循环执行 10 次,故 loopCount 最终为 10。 【易错点】误认为内层 break 会终止外层循环。

11 题(单选题

假设下面 C++ 代码执行过程中仅输入正负整数或 0,有关说法错误的是()。

int N, Sum = 0;
cin >> N;
while (N){
    Sum += N;
    cin >> N;
}
cout << Sum;
A.
执行上面代码如果输入0,将终止循环
B.
执行上面代码能实现所有非0整数的求和
C.
执行上面代码第一次输入0,最后将输出0
D.
执行上面代码将陷入死循环,可将 while (N) 改为 while (N==0)

正确答案D

解析详情

【答案】D 【考点】while 循环条件判断 【解析】while(N) 表示只要 N 不为 0 就继续。输入 0 会使 N 为假从而终止循环。选项 D 建议改为 while(N==0) 是完全错误的,那将导致除非第一次输入就是 0 否则根本不进入循环。 【易错点】理解反了循环继续条件与终止条件。

12 题(单选题

执行下面的C++代码,有关说法正确的是()【质数是指仅能被1和它本身整除的正整数】。

int N;
cin >> N;
bool Flag = true;
for (int i = 2; i < N; i++) {
    if (i * i > N)
        break;
    if (N % i == 0) {
        Flag = false;
        break;
    }
}
if (Flag)
    cout << N << "是质数" << endl;
else
    cout << N << "不是质数" << endl;
A.
如果输入正整数,上面代码能正确判断N是否为质数
B.
如果输入整数,上面代码能正确判断N是否为质数
C.
如果输入大于等于0的整数,上面代码能正确判断N是否质数
D.
如将 Flag = true 修改为 Flag = N >= 2? true:false 则能判断所有整数包括负整数、0、正整数是否为质数

正确答案D

解析详情

【答案】D 【考点】质数判断逻辑优化 【解析】Flag = N >= 2 ? true : false 这行代码正确处理了小于 2 的数(如负数、0、1 均不是质数)。后续循环通过枚举到 sqrt(N) 的因子来判断 N 是否为质数,逻辑完备。 【易错点】忽略了质数定义中“大于 1 的正整数”这一前提。

13 题(单选题

下面C++代码用于实现如下图所示的效果,其有关说法正确的是()。

1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
for (int i = 1; i < 6; i++) { // L1
    for (int j = 1; j < i + 1; j++) // L2
        cout << i * j << " ";
    cout << endl;
}
A.
当前代码能实现预期效果,无需调整代码
B.
如果 cout << endl; 移到循环L2内部,则可实现预期效果
C.
如果 cout << endl; 移到循环L1外部,则可实现预期效果
D.
删除 cout << endl; 行,则可实现预期效果

正确答案A

解析详情

【答案】A 【考点】嵌套循环实现矩阵输出 【解析】外层循环 i 控制行数(1 到 5),内层循环 j 控制每行的列数(1 到 i)。输出 i * j 实现了题目要求的倍数效果。cout << endl 放在内层循环结束后,实现了每行换行。 【易错点】对换行符 endl 放置的位置对图形输出的影响理解不准。

14 题(单选题

下面 C++ 代码执行后,输出 is()。

int cnt1 = 0, cnt2 = 0;
for (int i = 0; i < 10; i++) {
    if (i % 2 == 0)
        continue;
    if (i % 2)
        cnt1 += 1;
    else if (i % 3 == 0)
        cnt2 += 1;
}
cout << cnt1 << " " << cnt2;
A.
52
B.
50
C.
02
D.
00

正确答案B

解析详情

【答案】B 【考点】循环中的 continue 与分支逻辑 【解析】当 i 为偶数(0, 2, 4, 6, 8)时,执行 continue 直接跳到下一次循环,不执行后面的代码。当 i 为奇数(1, 3, 5, 7, 9)时,if(i%2) 始终为真,cnt1 累加共 5 次。cnt2 所在的分支永远无法到达。 【易错点】忽略了 continue 对后续 else if 分支的屏蔽作用。

15 题(单选题

在下面的C++代码中,N必须是小于10大于1的整数,M为正整数(大于0)。如果M被N整除则M为幸运数,如果M中含有N且能被N整除,则为超级幸运数,否则不是幸运数。程序用于判断M是否为幸运数或超级幸运数或非幸运数。阅读下面代码,有关说法正确的是()。

int N, M;
cout << "请输入幸运数字:";
cin >> N;
cout << "请输入正整数:";
cin >> M;
bool Lucky;
if (M % N == 0)
    Lucky = true;
else
    Lucky = false;
while (M){
    if (M % 10 == N && Lucky){
        printf("%d是%d的超级幸运数!", M, N);
        break;
    }
    M /= 10;
}
if (M == 0)
    if (Lucky)
        printf("%d是%d的幸运数!", M, N);
    else
        printf("%d非%d的幸运数!", M, N);
A.
如果N输入3,M输入36则将输出:36是3的超级幸运数!
B.
如果N输入7,M输入21则将输出:21是7的幸运数!
C.
如果N输入8,M输入36则将输出:36非8的超级幸运数!
D.
如果N输入3,M输入63则将输出:63是3的超级幸运数!

正确答案D

解析详情

【答案】D 【考点】复杂逻辑模拟 【解析】N=3, M=63。63%3==0 故 Lucky=true。进入 while 循环,M 依次为 63, 6。当 M=63 时,M%10=3 等于 N 且 Lucky 为真,输出“63是3的超级幸运数!”并跳出。 【易错点】模拟过程中未能准确跟踪变量 M 的缩减和条件判断。

判断题(每题 2 分)

1 题(判断题

执行C++代码cout << '9'+1'; 的输出为10。()

正确答案错误

解析详情

【答案】错误 【考点】字符与整数的加法运算 【解析】'9' 的 ASCII 码是 57。'9' + 1 的结果是 58。cout 输出 58,而不是 10。单引号表示字符,而非直接的数值。 【易错点】将字符 '9' 误认为整数 9。

2 题(判断题

C++表达式 -12 % 10 的值为2。()

正确答案错误

解析详情

【答案】错误 【考点】负数的取模运算 【解析】在 C++11 及以后的标准中,取模运算的结果符号与被除数相同。-12 % 10 的结果应该是 -2,而不是 2。 【易错点】记错负数取模的符号规则。

3 题(判断题

C++表达式 int(12.56) 的值为13。()

正确答案错误

解析详情

【答案】错误 【考点】强制类型转换的截断特性 【解析】int(12.56) 会直接丢弃小数部分,结果为 12。C++ 中的强制类型转换不会进行四舍五入。 【易错点】误以为 int 转换会自动四舍五入。

4 题(判断题

C++的整型变量N被赋值为10,则语句cout << N / 3 << "-" << N % 3 执行后输出是3-1。()

正确答案正确

解析详情

【答案】正确 【考点】整除与取模运算 【解析】10 / 3 = 3(商),10 % 3 = 1(余数)。输出结果为 3-1,描述正确。 【易错点】基本算术运算错误。

5 题(判断题

在C++代码中,不可以将变量命名为scanf,因为scanf是C++语言的关键字。()

正确答案错误

解析详情

【答案】错误 【考点】关键字与库函数名区别 【解析】scanf 是标准输入库函数,不是 C++ 的关键字(关键字如 int, if, for 等)。 【易错点】混淆语言核心关键字与标准库函数名。

6 题(判断题

下面C++代码执行后将导致死循环。()

for (int i = 0; i < 10; i++)
    continue;

正确答案错误

解析详情

【答案】错误 【考点】continue 语句的影响 【解析】continue 只是跳过本次循环的剩余部分,并不会阻止循环变量的自增和条件的再次判断。该循环会正常执行 10 次后结束,不会死循环。 【易错点】误解 continue 对循环控制流的影响。

7 题(判断题

下面 C++ 代码执行后将输出 10。()

int cnt = 0;
for (int i = 0; i < 10; i++)
    for (int j = 0; j < i; j++)
        cnt += 1;
    break;
}
cout << cnt;

正确答案错误

解析详情

【答案】错误 【考点】代码语法错误分析 【解析】所给代码中存在明显的括号不匹配(有结束大括号但无开始大括号)以及语法错误。即使忽略语法错误,break 的位置也会导致结果不为 10。 【易错点】未仔细观察代码中的语法缺陷。

8 题(判断题

下面C++代码执行后,将输出5。()

int cnt = 0;
for (int i = 1; i < 5; i++)
    for (int j = i; j < 5; j += i)
        if (i * j % 2 == 0)
            cnt += 1;
cout << cnt;

正确答案正确

解析详情

【答案】正确 【考点】嵌套循环条件模拟 【解析】i=1: j=1(F),2(T),3(F),4(T) -> cnt=2; i=2: j=2(T),4(T) -> cnt=4; i=3: j=3(F) -> cnt=4; i=4: j=4(T) -> cnt=5。最终结果为 5,描述正确。 【易错点】模拟过程中漏掉某些满足条件的 i, j 组合。

9 题(判断题

下面C++代码能实现正整数各位数字之和。()

int N, Sum = 0;
cin >> N;
while (N){
    Sum += N % 10;
    N /= 10;
}
cout << Sum;

正确答案正确

解析详情

【答案】正确 【考点】各数位之和算法 【解析】通过 while(N) 配合 N%10 取个位、N/=10 去个位的操作,是累加各数位之和的标准算法。 【易错点】怀疑算法在处理最后一位时的正确性。

10 题(判断题

GESP测试是对认证者的编程能力进行等级认证,同一级别的能力基本上与编程语言无关。()

正确答案正确

解析详情

【答案】正确 【考点】GESP 认证性质 【解析】GESP 考察的是编程逻辑和思维能力,同一等级的不同语言考试在考查点上是基本一致的。 【易错点】过度强调不同编程语言的差异性。