CSP-S 提高级 · CSP 2019 提高级第一轮 第 1 题

选择题 · 答案 D · 考点:运算符与表达式、基本数据类型、基础语法

← 整套速查表 CSP-S 提高级 全部真题

题目

若有定义:int a=7; float x=2.5, y=4.7,则表达式 x+a%3*(int) (x+y)%2 的值是:()

答案:D

考点

运算符与表达式基本数据类型基础语法

解题思维

别被浮点数吓住,这题核心就是运算符优先级和取模陷阱。看到表达式先别急着算,把强制类型转换括号里的东西先圈出来,记住%只能整型参与,乘法%同级从左往右,一步步拆解就能秒杀。

常见错误

最容易栽跟头的就是以为%能直接用在浮点数上,或者把(int)(x+y)当成四舍五入,结果算出2.500000。还有人会搞错结合性,先算%2再乘,或者把a%3的结果直接当整数加到浮点数上忘了类型提升,导致精度丢失。记住,(int)是硬截断,7.2变7,不是7.5。

详细解析(节选)

Q1 表达式求值

考察知识点

概念定义

运算符优先级:C++ 中不同运算符有规定的计算先后顺序,优先级高的先计算。本题涉及的优先级从高到低为: 1. 强制类型转换 (int)(一元转换,优先级第3级) 2. * / %(乘法类运算符,优先级第5级,从左到右结合) 3. + -(加法类运算符,优先级第6级) 4. =(赋值运算符,优先级第16级)

% 取模运算符:计算整数除法的余数,只能用于整数类型。如 7 % 3 = 1。

(int) 强制类型转换:将 float/double 类型截断为 int(直接去掉小数部分,不四舍五入)。

逐步推导

给定:int a=7; float x=2.5, y=4.7; 求:x + a % 3 * (int) (x+y) % 2

第1步:计算 a % 3 7 % 3 = 1(7 ÷ 3 = 2 ··· 1)

第2步:计算 (int)(x + y) x + y = 2.5 + 4.7 = 7.2 (int)(7.2) = 7(截断小数部分)

此时表达式变为:x + 1 * 7 % 2

第3步:计算 1 * 7 = 7(* 和 % 同级,从左到右) 表达式变为:x + 7 % 2

第4步:计算 7 % 2 = 1(7 ÷ 2 = 3 ··· 1) 表达式变为:x + 1

第5步:计算 2.5 + 1 = 3.5(float + int → float 自动提升)

第6步:输出格式为 float,得到 3.500000

避坑指南

技巧总结

考频与趋势

基本数据类型考频较高,2023年63题、2024年34题、2025年26题、2026年119题,近年占比显著上升;运算符与表达式考频也稳定,2023年91题、2024年41题、2025年61题、2026年14题。本题属于基础语法与数据类型交叉点,2019年3题、2023年63题、2024年34题、2025年26题、2026年119题均有涉及,命题人喜欢在浮点运算中嵌入取模和强制转换,制造“看起来像陷阱但其实是语法细节”的坑。暂无足够依据预测未来具体考法,但此类混合运算题仍会是高频考点。

同考点真题

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