GESP2026年9月认证C++一级( 第二部分判断题(1~10题)精讲


一、判断题第1题:cin 和 scanf 是干什么的?

题目说:

C++程序执行 cin 或 scanf 语句时,通常是使用键盘等输入设备来给某个变量的值。

答案:

✅ 正确


① cin是什么?

我们经常写:

复制代码
int a;
cin >> a;

它的意思是:

"请从输入设备读取一个整数,放进变量 a 里面。"

比如我们运行程序:

复制代码
请输入一个数字:
25

那么:

复制代码
a = 25

② scanf呢?

在 C++ 中也经常能看到:

复制代码
int a;
scanf("%d", &a);

它同样可以从键盘输入数据。

所以:

复制代码
cin
scanf

都可以完成:

输入数据。


🧠 记忆点

把变量想象成一个小盒子:

复制代码
键盘 → 输入数字 → 小盒子

所以:

复制代码
cin >> a;

就像:

"把键盘输入的东西放进 a 盒子。"

因此:

✅ 第1题:正确



二、判断题第2题:n % 100能得到三位数的最高位吗?

题目说:

如果 n 为3位的正整数,则 C++ 表达式 n % 100 能得到最高位。如 n=123,则表达式值为1。

答案:

❌ 错误

这是一道非常经典的"数字拆分"陷阱。


① %到底是什么?

复制代码
n % 100

表示:

n除以100以后剩下的余数。

例如:

复制代码
123 ÷ 100 = 1 ...... 23

所以:

复制代码
123 % 100

得到:

复制代码
23

不是:

复制代码
1

② 那么三位数的最高位怎么求?

例如:

复制代码
123

想得到百位:

复制代码
1

应该:

复制代码
123 / 100

因为整数除法:

复制代码
123 / 100 = 1

所以:

/100 → 得到最高位

%100 → 得到后两位


🧙‍♂️ 数字拆分魔法

对于:

复制代码
12345

%10

抓个位:

复制代码
12345 % 10 = 5

/10

砍掉个位:

复制代码
12345 / 10 = 1234

%100

抓最后两位:

复制代码
12345 % 100 = 45

/100

砍掉最后两位:

复制代码
12345 / 100 = 123

所以一定要记住:

%负责"留下右边"

/负责"砍掉右边"

因此第2题:

❌ 错误



三、判断题第3题:这个循环会输出20吗?

代码:

复制代码
int i;

for (i = 0; i < 20; i += 3)
    if (i % 3 != 0)
        continue;

cout << i;

题目说:

执行后输出20。

答案:

❌ 错误


第一步:看 i怎么变化

循环:

复制代码
for (i = 0; i < 20; i += 3)

所以:

复制代码
i = 0
i = 3
i = 6
i = 9
i = 12
i = 15
i = 18
i = 21

什么时候停止?

当:

复制代码
i = 21

检查:

复制代码
21 < 20

❌

所以循环结束。


第二步:continue有没有影响?

看看:

复制代码
if (i % 3 != 0)
    continue;

但是:

复制代码
0 % 3 = 0
3 % 3 = 0
6 % 3 = 0
9 % 3 = 0
......
18 % 3 = 0

它们全部都是3的倍数。

所以:

复制代码
i % 3 != 0

始终是:

复制代码
false

因此 continue 一次都没有真正触发。


第三步:循环结束

最终:

复制代码
i = 21

所以:

复制代码
cout << i;

输出:

复制代码
21

不是20。


⭐ 这里有一个考试秘诀

看到:

复制代码
for (i = 0; i < 20; i += 3)

不要想:

"最大应该是18,所以输出18。"

因为循环结束后还有:

复制代码
i += 3;

所以:

复制代码
18 → 21

然后发现:

复制代码
21 < 20

不成立。

最终:

i = 21

因此:

❌ 第3题错误



四、判断题第4题:10和10,谁大?

代码:

复制代码
int N, M;

cin >> N >> M;

if (N > M)
    printf("%d大于%d", N, M);
else
    printf("%d小于%d", N, M);

题目说:

如果输入10和10,则输出"10小于10"。

答案:

✅ 正确


我们代入:

复制代码
N = 10
M = 10

先判断:

复制代码
N > M

也就是:

复制代码
10 > 10

显然:

❌ 不成立。

所以程序进入:

复制代码
else

输出:

复制代码
10小于10

🚨 但是这里有一个很有意思的问题

现实数学中:

复制代码
10 = 10

既不是:

复制代码
10 > 10

也不是:

复制代码
10 < 10

程序却输出:

10小于10

为什么?

因为程序写的是:

复制代码
if (N > M)
    ...
else
    ...

它只判断:

"N是不是大于M?"

如果不是,就全部扔进 else。

也就是说:

复制代码
N > M       → 大于
其他情况    → 小于

而"其他情况"其实包括:

复制代码
N < M
N == M

🧠 这是非常重要的编程思想

程序员写代码的时候:

程序怎么写,就怎么执行。

不能用我们脑袋里的"常识"替代程序真正的逻辑。

所以这句话:

✅ 正确



五、判断题第5题:这个程序能计算1到N的和吗?

代码:

复制代码
int N, tot;

cin >> N;

tot = 0;

while (N > 0) {
    tot += N;
    N -= 1;
}

cout << tot;

题目说:

如果输入大于0的整数,可以求出1到N之和。

答案:

✅ 正确


我们来玩"倒计时游戏"

假设:

复制代码
N = 5

开始:

复制代码
tot = 0

第1轮

复制代码
tot += N

就是:

复制代码
tot = 0 + 5 = 5

然后:

复制代码
N -= 1

变成:

复制代码
N = 4

第2轮

复制代码
tot = 5 + 4 = 9

然后:

复制代码
N = 3

第3轮

复制代码
tot = 9 + 3 = 12

第4轮

复制代码
tot = 12 + 2 = 14

第5轮

复制代码
tot = 14 + 1 = 15

然后:

复制代码
N = 0

循环结束。

最终:

复制代码
tot = 15

而:

复制代码
1 + 2 + 3 + 4 + 5 = 15

完全正确。


🧠 这里的两个变量很好理解

可以把:

复制代码
N

想成:

倒计时牌

而:

复制代码
tot

想成:

存钱罐

每轮:

复制代码
拿当前的N放进存钱罐
N再减1

于是:

复制代码
5 → 4 → 3 → 2 → 1

全部加起来。

所以:

✅ 第5题正确



六、判断题第6题:正负数的 % 会不会不一样?

题目说:

在 C++ 中,表达式 2 % 2 与 (-2) % 2 的值相同。

答案:

✅ 正确


我们分别算。

第一个:

复制代码
2 % 2

2除以2:

复制代码
2 ÷ 2 = 1 ...... 0

所以:

复制代码
2 % 2 = 0

第二个:

复制代码
(-2) % 2

也是整除:

复制代码
-2 ÷ 2

余数:

复制代码
0

所以:

复制代码
(-2) % 2 = 0

两者:

复制代码
0 = 0

因此:

✅ 正确


⭐ 小提醒

负数 % 的题目确实容易让人紧张。

但是这里很简单:

只要能够整除,余数就是0。

例如:

复制代码
10 % 5 = 0
-10 % 5 = 0

所以这一题不用害怕负号。



七、判断题第7题:z++到底输出增加前还是增加后的值?

代码:

复制代码
float z = 12.0;

z = z / 4;

z--;

cout << z++;

题目说:

执行后输出2。

答案:

✅ 正确

这道题非常适合讲清楚:

后置 ++


第一步:开始

复制代码
z = 12.0

第二步:除以4

复制代码
z = z / 4;

所以:

复制代码
z = 3.0

第三步:z--

复制代码
z--;

意思:

z减1。

所以:

复制代码
z = 2.0

第四步:最关键!

复制代码
cout << z++;

z++叫:

后置自增

它的特点是:

先使用,再加1。

所以输出的时候:

复制代码
先输出 2

然后:

复制代码
z = 3

因此屏幕上看到:

复制代码
2

所以题目说:

输出2。

是:

✅ 正确


🧠 ++有两个兄弟

++z

复制代码
先加1,再使用

z++

复制代码
先使用,再加1

可以记成:

++z:先长大,再做事。
z++:先做事,再长大。



八、判断题第8题:变量名里有几个下划线会不会出问题?

题目说:

在 C++ 代码中,如果两个变量名都包含下划线 _,但数目不同,可能会导致编译器无法识别而报错。

答案:

❌ 错误


举个例子

下面这些变量名:

复制代码
int a_b;
int a__b;
int a___b;

都是不同的变量名。

C++允许在变量名中使用下划线。

所以:

复制代码
a_b
a__b
a___b

并不会因为"下划线数量不同"就让编译器糊涂。

编译器完全可以区分它们。


🧙‍♂️ 想象成三间不同的房间

复制代码
a_b

是一间房。

复制代码
a__b

是另一间房。

复制代码
a___b

又是另一间房。

虽然名字很像,但是:

名字不同,就是不同的变量。


⚠️ 真正需要注意的是

C++变量名不能随便写。

例如:

复制代码
int 123abc;

这种就不行。

但是:

复制代码
int abc_123;
int a_b;
int a__b;

都可以。

所以第8题:

❌ 错误



九、判断题第9题:double x = 27 % 12结果不可预测?

题目说:

C++变量 x 是 double 类型,则表达式 x = 27 % 12 的结果是不可预测的。

答案:

❌ 错误

这道题看起来有点吓人,其实非常简单。


第一步:先算 %

复制代码
27 % 12

意思:

复制代码
27 ÷ 12 = 2 ...... 3

所以:

复制代码
27 % 12 = 3

第二步:再放进 double

题目是:

复制代码
double x;
x = 27 % 12;

右边:

复制代码
27 % 12 = 3

于是相当于:

复制代码
x = 3;

因为 x 是 double,实际保存时可以理解为:

复制代码
x = 3.0

结果非常确定。


⭐ 一个非常重要的知识点

%要求参与运算的是:

整数类型。

这里:

复制代码
27
12

都是整数。

所以:

复制代码
27 % 12

完全合法。

算完得到:

复制代码
3

然后再把这个结果放进:

复制代码
double x

没有问题。

所以:

❌ 第9题错误



十、判断题第10题:这个程序最后真的输出3吗?

代码:

复制代码
int ans = 0;

for (int idx = 1; idx <= 7; idx += 2) {
    if (idx == 5)
        continue;

    if (idx*idx > 30)
        break;

    ans += idx;
}

cout << ans;

题目说:

执行后输出3。

答案:

❌ 错误


🌟 这道题是"continue大挑战"

先看:

复制代码
for (int idx = 1; idx <= 7; idx += 2)

所以:

复制代码
idx:
1
3
5
7

我们一轮一轮看。


第1轮:idx = 1

判断:

复制代码
if (idx == 5)

也就是:

复制代码
1 == 5

❌

继续往下。


再看:

复制代码
if (idx > 30)

1 > 30

❌

所以:

复制代码
ans += idx;

即:

复制代码
ans = 0 + 1

得到:

复制代码
ans = 1

第2轮:idx = 3

复制代码
3 == 5

❌

复制代码
3 > 30

❌

所以:

复制代码
ans = 1 + 3

得到:

复制代码
ans = 4

第3轮:idx = 5

来了!

复制代码
if (idx == 5)
    continue;

条件成立:

复制代码
5 == 5

所以:

复制代码
continue;

出现!

💨 这一轮直接跳过!

也就是说:

复制代码
ans += idx;

根本不会执行。

所以:

复制代码
ans 还是4

第4轮:idx = 7

复制代码
7 == 5

❌

然后:

复制代码
7 * 7 > 30

正确

循环结束


所以:

复制代码
ans = 4 

因此:

❌ 第10题错误


🎯 第二部分10道判断题答案汇总

根据这份试卷的题面逐题分析:

题号 判断 核心知识
1 ✅ 对 cin、scanf输入
2 ❌ 错 /与%拆数字
3 ❌ 错 for循环结束值
4 ✅ 对 if-else逻辑
5 ✅ 对 while求1~N的和
6 ✅ 对 %与负数
7 ✅ 对 后置z++
8 ❌ 错 变量名与下划线
9 ❌ 错 %与double
10 ❌ 错 continue、循环模拟

🌟 给大家的"判断题破案法"

做 C++ 判断题,千万不要凭"感觉"。

可以固定使用这套 四步破案法:

第一步:圈出关键词

例如:

复制代码
%    /    ++    --    break    continue

这些都是"危险机关"。


第二步:给变量写初值

比如:

复制代码
int ans = 0;

就在草稿纸写:

复制代码
ans = 0

第三步:一轮一轮模拟

尤其看到:

复制代码
for
while

就画:

复制代码
第1轮
第2轮
第3轮
......

第四步:最后再判断"对还是错"

千万不要:

"看起来应该是对的。"

而应该:

"我已经把程序跑完了,所以我知道它到底输出什么。"


🧠 最后送大家一张"C++判断题魔法表"

看到 马上想到
cin >> a 从输入读数据
a % 10 取个位
a / 10 去掉个位
i++ i加1
i-- i减1
++i 先加再用
i++ 先用再加
continue 跳过本轮
break 结束整个循环
for 初始化→条件→循环体→更新
while 先判断条件,再决定进不进入
% 取余数
double 可以保存小数

其中最值得同学们记住的一句话是:

做程序题,不要"猜程序",要"跑程序"。

哪怕是拿草稿纸,自己用手把变量一步一步走一遍,程序就像小火车一样,最后一定能找到答案。


相关推荐
一只旭宝2 小时前
C++ 后端开发面试题整理
java·c++·面试
xlq223222 小时前
全面复习1
c++
Dylan的码园2 小时前
求平均成绩 矩阵数据处理 【循环处理 二维数组】
c++·线性代数·矩阵
All for pursuit.2 小时前
【回溯-2】22.括号生成
数据结构·c++·算法·leetcode
longlongzihan2 小时前
LeetCode 1004.最大连续1的个数III 滑动窗口及动态规划题解
c++·算法·leetcode·dp·滑动窗口
朝朝辞暮i2 小时前
C++ 第 22 课:const —— 不允许随便修改的数据
开发语言·c++·算法
蒸蒸yyyyzwd3 小时前
力扣二分总结-lowerbound
c++
ShineWinsu3 小时前
对于Redis:List类型的解析
数据库·c++·redis·链表·缓存·面试·list
小师兄吃牛肉4 小时前
C++ 与 Lua 的协程交互:从原理到实战
c++·lua·交互