GESP 二级 · GESP 202603 C++ 二级 第 15 题

选择题 · 答案 A · 考点:循环控制

← 整套速查表 GESP 二级 全部真题

题目

某学校举办“校园演讲比赛”,每位选手由 8 位评委打分(分数为 $0$-$10$ 的整数),且每位评委必须打分。计分规则:若至少有 5 位评委给出大于等于 $6$ 分,则成绩有效,最终得分为所有 8 位评委的总分;如给出低于 $6$ 分的评委数量超过 5 位,则记为 $0$ 分。以下核心程序段依次输入 8 个分数,并计算最终得分。横线处应填入( )。

total_score = 0; // 所有分数之和
high_count = 0; // ≥6分的评委数量

for (i = 0; i < 8; i++) {
    cout << "请输入评委分数:";
    cin >> score;
    ________________;
    if (score >= 6)
        ________________;
}

if (high_count >= 5)
    cout << total_score;
else
    cout << 0;

A.

total_score += score
high_count += 1

B.

total_score += score
high_count += score

C.

high_count += 1
total_score += score

D.

total_score *= score
high_count *= 1
答案:A

考点

循环控制

解题思维

答案A。考点: 循环结构——for/while的执行与嵌套。

常见错误

关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。

详细解析(节选)

【考点】循环控制|条件判断|整数运算

命题人把这道题放在二级试卷,就是要卡住"循环体内无条件累加"的惯性思维。绝大多数考生看到两个横线,第一反应是"先加总分再计高分人数",却忽略了第二个横线必须写在 if 内部,否则条件判断就形同虚设。

解题思维很简单:循环体里,无论分数高低都要累加到总分,所以第一条横线填 total_score += score;只有当分数≥6 时才计入高分人数,因此第二条横线要放在 if 块内,填 high_count += 1。这样逻辑顺序与代码结构完全匹配。

陷阱拆解:A 选项把两个语句都放在 if 外,看似"无条件累加"但第二个语句却写成了 high_count += 1,实际上是把高分计数写成了无条件计数,导致 high_count 永远为 8;B 选项把 high_count += score 当作计数,混淆了"计数"与"累加";C 选项虽顺序正确,但第一个语句仍无条件执行 high_count += 1,与 if 条件冲突;D 选项误用乘法,让总分爆炸、高分计数为 0。最阴险的是 A,它利用了"先写再判断"的直觉,却把计数放在了条件外。

反命题思维:若把 if 条件改成 score >= 7,或把两个语句位置互换,答案就完全不同。刷到类似循环加条件判断的题,先问自己"哪些操作必须无条件执行,哪些只在条件成立时才执行",就能避开命题人埋下的逻辑陷阱。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断