GESP2024年6月认证C++二级( 第一部分选择题(9-15))


🌟 第 9 题 ------ 双重 for 循环计数

1、先看题目:

cpp 复制代码
int loopCount = 0;
for (int i=0; i < 10; i++)
    for (int j=1; j < i; j++)
        loopCount += 1;

2、正确答案:C(36)


3、🧠 题目讲解

(1)我们来画个表:

当 i=0 → j 不执行

当 i=1 → j 不执行

当 i=2 → j=1 → 1次

当 i=3 → j=1,2 → 2次

当 i=4 → 3次

...

当 i=9 → 8次


(2)所以总数:

cpp 复制代码
1+2+3+4+5+6+7+8 = 36

(3)🎯 这是一个三角形计数,等差数列求和问题!



🌟 第 10 题 ------ 计数器的位置

1、先看题目:

cpp 复制代码
int loopCount = 0;
for (int i=0; i < 10; i++){
    for (int j=0; j < i; j++)
        if (i * j % 2)
            break;
        loopCount += 1;
}

2、关键代码

cpp 复制代码
for (int j=0; j < i; j++)
    if (i * j % 2)
        break;
loopCount += 1;

计数器在内循环的外面,只负责记录外循环的次数


3、外循环次数为0~9


4、正确答案: C、 10



🌟 第11题 ------ while 循环求和

1、先看题目:

cpp 复制代码
while (N){
    Sum += N;
    cin >> N;
}

2、正确答案:D 是错误说法


3、题目讲解

(1)while(N) 的意思是:

只要 N 不等于 0,就继续。


(2)如果输入:

5

3

-2

0

Sum = 5 + 3 - 2 = 6

输入 0 时停止。


3、选项 D 说:

把 while(N) 改成 while(N==0)

那会怎样?
一开始 N 不是 0,就根本不进循环 ❌

所以 D 是错的。



🌟 第12题 ------ 判断质数

1、正确答案:D


2、🧠 代码逻辑解释

cpp 复制代码
for (int i = 2; i < N; i++){
    if (i * i > N)
        break;
    if (N % i == 0){
        Flag = false;
        break;
    }
}

3、目前代码存在的问题:

目前代码默认输入数字是大于2的正整数。


4、看下各个选项:

**A.**如果输入正整数,上面代码能正确判断N是否为质数

答案是错误❌️

输入1,是正整数,不是质数,但是输出判断是质数。


**B.**如果输入整数,上面代码能正确判断N是否为质数

答案是错误❌️
输入负数,也误判是质数。


**C.**如果输入大于等于0的整数,上面代码能正确判断N是否质数

答案是错误❌️

输入1,是大于等于0的整数,不是质数,但是输出判断是质数。


**D.**如将 Flag = true 修改为 Flag = N>=2? true:false 则能判断所有整数包括负整数、0、正整数是否为质数

答案是正确、✅️



🌟 第13题 ------ 打印乘法图

(1)代码:

cpp 复制代码
for (int i = 1; i < 6; i++){
    for (int j = 1; j < i+1; j++)
        cout << i*j << " ";
    cout << endl;
}

(2) 正确答案:A


(3)🧠会打印什么?

cpp 复制代码
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25

(4)每一行结束后换行。

代码本来就正确,不用改。



🌟 第14题 ------ continue 的魔法

cpp 复制代码
for (int i = 0; i < 10; i++){
    if (i % 2 == 0)
        continue;
    if (i % 2)
        cnt1 += 1;
    else if (i % 3 == 0)
        cnt2 += 1;
}

1、正确答案:A(5 2)


2、🧠 解释

(1)i 从 0 到 9

如果 i 是偶数:

直接 continue(跳过)


(2)所以只剩下:

1 3 5 7 9

都是奇数。


(3)接着:

if(i % 2)

奇数 %2 = 1 → true

(4)所以:

cnt1 += 1

共 5 次。


(5)那 cnt2 呢?

永远进不到。

(6)所以:

cpp 复制代码
cnt1 = 5
cnt2 = 0

答案是 B、5 0



🌟 第15题 ------ 幸运数大挑战

1、规则:

  • 如果 M 能被 N 整除 → 幸运数

  • 如果 M 里含有 N 且能被 N 整除 → 超级幸运数


2、正确答案:D


3、🧠 举例

N=3

M=63
63 % 3 == 0 ✅

63 里面有数字 3 ✅
所以:

63 是 3 的超级幸运数


4、看选项 A:

A.如果N=3,M=36输出:36是3的超级幸运数!

36%3==0→Lucky =true

检查36中是否含3:

36%10=6≠3

3%10=3==3→满足超级幸运数条件

输出应该是"36是3的超级幸运数!"

正确吗?

代码中循环时修改了M, 所以第一次printf输出时M已被除以10变为3了,而不是36

实际打印的是**"3是3的超级幸运数!"**而不是36

因此,选项A的输出和代码实际不符,不正确


B/C选项同样不正确


5、如果M的值不想改变怎么办?

cpp 复制代码
int oldM = M;

可以提前存下来,最后输出就没问题了。


相关推荐
王老师青少年编程2 小时前
csp信奥赛c++高频考点假期集训(分模块进阶)
数据结构·c++·算法·csp·高频考点·信奥赛·集训
王老师青少年编程3 小时前
2020年信奥赛C++提高组csp-s初赛真题及答案解析(选择题1-5)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
plus4s4 小时前
2月18日(82-84题)
c++·算法·动态规划
wangluoqi5 小时前
c++ 树上问题 小总结
开发语言·c++
不梦闲人6 小时前
15 面向对象程序设计
c++
ArturiaZ8 小时前
【day29】
数据结构·c++·算法
锅包一切8 小时前
PART17 一维动态规划
c++·学习·算法·leetcode·动态规划·力扣·刷题
Polaris北8 小时前
第二十六天打卡
c++·算法·动态规划
汉克老师11 小时前
GESP2024年6月认证C++二级( 第三部分编程题(1) 平方之和)
c++·算法·预处理·完全平方数·循环结构·gesp二级·gesp2级